代码本地校验软件A Real Validator算法分析
软件没有加壳,明码比较,很容易找到关键处,0040F970/$53 push ebx ;算法CALL开始
0040F971|.55 push ebp
0040F972|.56 push esi
0040F973|.57 push edi
0040F974|.BF 54C64100 mov edi, 0041C654 ;ASCII "@!SDVXFGUHbvnc908 *&)5 fjd095j90kcf ja%JKeSFAKDJSLJgJDF 2k34lsdjfkldjf jdsklfjadskgl;jafdkl;gjasdkl;r568r;jvggfl;kd4ui12098vlkjfdlk;sfjgklfdgjlejt03456erjgrj"
0040F979|.83C9 FF or ecx, FFFFFFFF
0040F97C|.33C0 xor eax, eax
0040F97E|.F2:AE repne scas byte ptr es:
0040F980|.F7D1 not ecx
0040F982|.49 dec ecx
0040F983|.8BF8 mov edi, eax
0040F985|.8BF0 mov esi, eax
0040F987|.74 26 je short 0040F9AF
0040F989|.8D99 53C64100 lea ebx,
0040F98F|>0FBE86 54C641>/movsx eax, byte ptr ;取密串中的开始一个字符
0040F996|.0FBE13 |movsx edx, byte ptr ;取密串结尾一个字符
0040F999|.0FAFC2 |imul eax, edx ;两个相乘放EAX
0040F99C|.03C7 |add eax, edi ;加上EDI
0040F99E|.33D2 |xor edx, edx ;EDX清零,准备放/结果
0040F9A0|.BF 00286BEE |mov edi, EE6B2800 ;EDI赋值ee6b2800
0040F9A5|.F7F7 |div edi ;eax/edi,改变edx
0040F9A7|.46 |inc esi ;向前移动开始指针指向下一个
0040F9A8|.4B |dec ebx ;向后移动结尾指针,指向上一个
0040F9A9|.3BF1 |cmp esi, ecx ;比较是否移动完
0040F9AB|.8BFA |mov edi, edx ;edi保存最终计算结果
0040F9AD|.^ 72 E0 \jb short 0040F98F ;edi==0011C198
0040F9AF|>8B4424 14 mov eax,
0040F9B3|.33F6 xor esi, esi
0040F9B5|.8B18 mov ebx, ;用户名地址放ebx
0040F9B7|.8B6B F8 mov ebp, ;用户名长度放ebp
0040F9BA|.85ED test ebp, ebp ;测试是否输入了用户名
0040F9BC|.7E 26 jle short 0040F9E4
0040F9BE|>8BC6 /mov eax, esi
0040F9C0|.33D2 |xor edx, edx
0040F9C2|.F7F1 |div ecx ;ecx是上面加密串的长度
0040F9C4|.0FBE82 54C641>|movsx eax, byte ptr ;取加密串开始的一个字符到eax
0040F9CB|.0FBE1433 |movsx edx, byte ptr ;取用户名的一个字符到edx
0040F9CF|.0FAFC2 |imul eax, edx ;两个相乘放eax
0040F9D2|.03C7 |add eax, edi ;eax再加上上面循环计算的结果
0040F9D4|.33D2 |xor edx, edx ;清除edx
0040F9D6|.BF 00286BEE |mov edi, EE6B2800
0040F9DB|.F7F7 |div edi ;除Edi结果在edx:eax
0040F9DD|.46 |inc esi
0040F9DE|.3BF5 |cmp esi, ebp ;和用户名长度比较
0040F9E0|.8BFA |mov edi, edx ;edi放最张结果
0040F9E2|.^ 7C DA \jl short 0040F9BE
0040F9E4|>8BC7 mov eax, edi ;edi是最后结果,通过EAX返回
0040F9E6|.5F pop edi
0040F9E7|.5E pop esi
0040F9E8|.5D pop ebp
0040F9E9|.5B pop ebx
0040F9EA\.C3 retn
/****
* 代码本地校验软件A Real Validator
*http://arealvalidator.com/download/arv112.msi
* 软件名称:A Real Validator
* 开发者主页:www.arealvalidator.com
* 软件大小:2.28MB
* 安装环境:Microsoft Windows 95/98/Me/NT4/2000/xp ;IE 4.0 以上浏览器
* 版本:1.12(30天试用版)
* 软件说明
* 我们在制作符合web标准网站的过程中,
* 总要不断的到W3C网站来校验自己制作的页面是否符合XHTML 1.0,这样比较麻烦。
* A Real Validator就是一款本地校验软件,允许你在本机直接校验页面而不需要再联网校验,
* 它校验的结果与W3C完全一致。
*/
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char * about = "\
***************************************\n\
A Real Validator V1.12\n\
代码本地校验软件注册机\n\
作者: surge\n\
***************************************\n";
char * key = "@!SDVXFGUHbvnc908 *&)5 fjd095j90kcf ja%JKeSFAKDJSLJgJDF 2k34lsdjfkldjf jdsklfjadskgl;jafdkl;gjasdkl;r568r;jvggfl;kd4ui12098vlkjfdlk;sfjgklfdgjlejt03456erjgrj";
int i=0;
int j=0;
int num=0;
int k=0;
int z=0;
char username;
printf(about);
memset(username,0,sizeof(username));
printf("输入用户名:");
gets(username);
num =strlen(key)-1;
for(i=0,j=num; i<=num; i++,j--){
z = (key*key)+k;
k = 0xee6b2800;
k = z%k;
}
for(i=0; i<strlen(username); i++){
z = key*username+k;
k = 0xee6b2800;
k = z%k;
}
printf("注册码是: %d\n",k);
getchar();
return 0;
}
Windows Registry Editor Version 5.00
"Name"="surge"
"RegKey"=dword:0012cf3f 喜欢这类文章,支持! 厉害,学习了。
我是新手,感谢你的文章。 本帖最后由 dzswvip 于 2010-5-29 02:30 编辑
真牛 中国有你 我什么时候才可以有浏览权限呀 不错,学习了。。。
页:
[1]