万丈高楼平地起,学PJ先打好基础,最好下载后自己先练习追踪一下,否则只是come
easy go easy.
cardIt V1.2是专业的名片设计系统,运行于Windows95/98/NT4平台,它不仅适应于名片设计,还适应于各种证件、卡片的制作。
前面的过程,我想你应该了解吧。又给版主添麻烦了。~~~~~~~
:004156B9
E840FC0200 call 004452FE
:004156BE
8BCE mov
ecx, esi
:004156C0 E82B000000 call
004156F0此处要按F8进入。
:004156C5 85C0
test eax, eax
:004156C7 6A00
push 00000000
:004156C9 6A00
push 00000000
:004156CB
7412 je 004156DF
为零则跳转到失败处
***************************
:004156F0 64A100000000
mov eax, dword ptr fs:[00000000]
:004156F6
6AFF push
FFFFFFFF
:004156F8 68D8834600 push
004683D8
:004156FD 50
push eax
:004156FE 64892500000000
mov dword ptr fs:[00000000], esp
:00415705 83EC38
sub esp, 00000038
:00415708
56 push
esi
:00415709 8B74244C mov
esi, dword ptr [esp+4C]
:0041570D 837EF810
cmp dword ptr [esi-08], 00000010
[esi-08]是你所输入的注册码的长度。如果不是16个就跳.
:00415711
0F85C0000000 jne 004157D7
:00415717
BAF7FFFFFF mov edx, FFFFFFF7
:0041571C
33C9 xor
ecx, ecx
:0041571E 8D4609
lea eax, dword ptr [esi+09]此处是把你所输入的注册码的首地址+9赋值给EAX,也就是取第10位数字
:00415721
2BD6 sub
edx, esi
* Referenced
by a (U)nconditional or (C)onditional Jump at Address:
|:00415742(C)
|
:00415723
0FBE70F9 movsx esi, byte
ptr [eax-07]此处首先是取第三位数字。
:00415727 83EE30
sub esi, 00000030把其ASCII值减30
:0041572A 89740C04
mov dword ptr [esp+ecx+04],
esi存入此处,需要注意此处地址每次地址都不一样。
:0041572E 83C104
add ecx, 00000004 ECX+4
:00415731 0FBE30
movsx esi, byte ptr [eax]见上。
:00415734
83EE30 sub esi,
00000030把其ASCII值减30
:00415737 40
inc eax地址指针加1
:00415738 89740C1C
mov dword ptr [esp+ecx+1C], esi存入此处,需要注意此处地址每次地址都不一样。
:0041573C
8D3402 lea esi,
dword ptr [edx+eax]
:0041573F 83FE07
cmp esi, 00000007是否循环7次。
:00415742 7CDF
jl 00415723低于继续循环,否则进行比较。
上面的取所输入的注册码的的顺序是,第3位、第10位、第4位、第11位、第5位、
第12位、第6位、第13位、第7位、第14位、第8位、第15位、第9位、第16位。
而其ASCII值减30存入地址依次是:70EB20、70EB3C、70EB24、70EB40、70EB28、
70EB44、70EB2C、70EB48、70EB30、70EB4C、70EB34、70EB50、70EB38、70EB54
:00415744
8B442430 mov eax, dword
ptr [esp+30]
:00415748 8B4C2404
mov ecx, dword ptr [esp+04]
:0041574C 03C1
add eax, ecx
:0041574E 83F809
cmp eax, 00000009
这一部分是第3位注册码与第14位注册码相加之和是否等于9
:00415751
0F8580000000 jne 004157D7不相同就跳到失败处
:00415757
8B542428 mov edx, dword
ptr [esp+28]
:0041575B 8B442408
mov eax, dword ptr [esp+08]
:0041575F 03D0
add edx, eax
:00415761 83FA09
cmp edx, 00000009
这一部分是第4位注册码与第12位注册码相加之和是否等于9
:00415764
7571 jne
004157D7不相同就跳到失败处
:00415766 8B4C240C
mov ecx, dword ptr [esp+0C]
:0041576A 8B542434
mov edx, dword ptr [esp+34]
:0041576E 03D1
add edx,
ecx
:00415770 83FA09
cmp edx, 00000009
这一部分是第5位注册码与第15位注册码相加之和是否等于9
:00415773 7562
jne 004157D7不相同就跳到失败处
:00415775
8B442410 mov eax, dword
ptr [esp+10]
:00415779 8B4C242C
mov ecx, dword ptr [esp+2C]
:0041577D 03C8
add ecx, eax
:0041577F 3BCA
cmp ecx, edx
这一部分是第6位注册码与第13位注册码相加之和是否等于9
:00415781
7554 jne
004157D7不相同就跳到失败处
:00415783 8B542414
mov edx, dword ptr [esp+14]
:00415787 8B442420
mov eax, dword ptr [esp+20]
:0041578B 03C2
add eax,
edx
:0041578D 83F809
cmp eax, 00000009
这一部分是第7位注册码与第10位注册码相加之和是否等于9
:00415790 7545
jne 004157D7不相同就跳到失败处
:00415792
8B4C2418 mov ecx, dword
ptr [esp+18]
:00415796 8B542424
mov edx, dword ptr [esp+24]
:0041579A 03D1
add edx, ecx
:0041579C 3BD0
cmp edx, eax
这一部分是第8位注册码与第11位注册码相加之和是否等于9
:0041579E
7537 jne
004157D7不相同就跳到失败处
:004157A0 8B44241C
mov eax, dword ptr [esp+1C]
:004157A4 8B4C2438
mov ecx, dword ptr [esp+38]
:004157A8 03C8
add ecx,
eax
:004157AA 83F909
cmp ecx, 00000009
这一部分是第9位注册码与第16位注册码相加之和是否等于9
:004157AD 7528
jne 004157D7不相同就跳到失败处
:004157AF
8D4C244C lea ecx, dword
ptr [esp+4C]
:004157B3 C7442444FFFFFFFF mov [esp+44],
FFFFFFFF
:004157BB E8C9FD0200 call
00445589
:004157C0 B801000000 mov
eax, 00000001 01是成功标志。
:004157C5 5E
pop esi
:004157C6 8B4C2438
mov ecx, dword ptr [esp+38]
:004157CA
64890D00000000 mov dword ptr fs:[00000000],
ecx
:004157D1 83C444
add esp, 00000044
:004157D4 C20400
ret 0004
总结:
前两位可以是任意字符,而后14位注册码的算法是:
第3位注册码+第14位注册码=9
第4位注册码+第12位注册码=9
第5位注册码+第15位注册码=9
第6位注册码+第13位注册码=9
第7位注册码+第10位注册码=9
第8位注册码+第11位注册码=9
第9位注册码+第16位注册码=9
如:$%00000009999999