轻松提取资源1.45破解教程
Cracked by simonyan
这个软件有几个陷阱, 其实算法都是一致, 但在跟的时候,
可能会误入陷阱, 花费多一点时间.
在下写得不对之处, 欢迎大家指正.
一: 首先打开软件, 先填入注册码 (19191919),
注册名(simonyan). 点选OK后, 会出现要求重启动软件.
在这里你也可以跟一下, 看他怎样处理的注册码, 注册名.
我跟踪了以后, 发现他运算出四个值, 分别为REGCODE, (=假码每位加2). SEARCHID1(=假码每位加1再反转)
SEARCHID2=(假码每位加3再反转) , SEARCHID3=(假码每位加5再反转)
再将注册名, 及以上值存入注册表.
二: 关闭软件后, 加载SOFTICE, 下断点bpx regqueryvalueexa do “d *(esp+8)”
因我们已知道注册码存入注册表, 就先用注册表断点吧!!
启动程序后, 断下, 按F12到45B019停. 这时显示的值并不是与我们要的值有关,
继续按F5, 这时在数据窗口出现
regusername字样, 再按F12到程序领空.
这时停在40b03c,
按F10走到40b045时, D ECX可看见注册名 “simonyan”, ECX的值为11c7ac8.
这时我们可下断点bpm
11c7ac8.
三: 这时按F5走, 可看见SEARCHID1, 再按F5两次可看见下面一段算法. 再将算出的值, 与SEARCHID1比较.
相等则将一个全局变量给值1.
如一直按F5则可看现SEARCHID2, SEARCHID3, REGCODE与算法结果比较。但最后又将全局变量值改为0
表明这些都是陷阱。
四: 我们可一直跟到出现程序菜单后, 到以下位置:
出现最后一次比较:
* Possible StringData Ref from Data Obj ->"EZ Extract Resource 1.45"
|
:0040CD9E 68C4FC4700
push 0047FCC4
:0040CDA3 E860680300
call 00443608
:0040CDA8 51
push ecx
:0040CDA9
8D542418 lea edx, dword
ptr [esp+18]
:0040CDAD 8BCC
mov ecx, esp
:0040CDAF 8964242C
mov dword ptr [esp+2C], esp
:0040CDB3
52
push edx
:0040CDB4 E8D66A0300
call 0044388F
:0040CDB9 51
push ecx
:0040CDBA C68424CC01000010
mov byte ptr [esp+000001CC], 10
:0040CDC2 8BCC
mov ecx, esp
:0040CDC4
89642418 mov dword ptr
[esp+18], esp
:0040CDC8 57
push edi
:0040CDC9 E8C16A0300
call 0044388F
:0040CDCE 8BCE
mov ecx, esi
:0040CDD0 C68424CC0100000F
mov byte ptr [esp+000001CC], 0F
:0040CDD8 E893070000
call 0040D570 (关键CALL)
* Possible StringData Ref from Data Obj ->"help.chm"
|
:0040CDDD 68B8FC4700
push 0047FCB8
:0040CDE2 8986D0000000
mov dword ptr [esi+000000D0], eax (赋全局变量值)
:0040CDE8
E82C080200 call 0042D619
:0040CDED 83C404
add esp, 00000004
:0040CDF0 8BCE
mov ecx, esi
:0040CDF2 89868C000000
mov dword ptr [esi+0000008C], eax
:0040CDF8 E863030000
call 0040D160
:0040CDFD 8BB654020000
mov esi, dword ptr [esi+00000254]
五: 现在我们可以跟入CALL中分析算法: (如下)
算法部分:
* Referenced by a
CALL at Addresses:
|:0040CAF7 , :0040CB6E , :0040CBE5 ,
:0040CC63 , :0040CDD8
|
:0040D570 6AFF
push FFFFFFFF
:0040D572
6840394600 push 00463940
:0040D577 64A100000000 mov eax, dword
ptr fs:[00000000]
:0040D57D 50
push eax
:0040D57E 64892500000000
mov dword ptr fs:[00000000], esp
:0040D585 81ECD0000000
sub esp, 000000D0
:0040D58B C78424D800000000000000
mov dword ptr [esp+000000D8], 00000000
:0040D596 8B8424E0000000
mov eax, dword ptr [esp+000000E0]
:0040D59D 68D4404800
push 004840D4
:0040D5A2 50
push eax
:0040D5A3 C781C400000001000000 mov dword ptr [ebx+000000C4],
00000001
:0040D5AD E8A7FC0100
call 0042D259
:0040D5B2 83C408
add esp, 00000008
:0040D5B5 85C0
test eax, eax
:0040D5B7 0F8432010000
je 0040D6EF
:0040D5BD 8B8C24E4000000
mov ecx, dword ptr [esp+000000E4]
:0040D5C4 68D4404800
push 004840D4
(此处用 D ECX可看见实际输入的假码19191919)
:0040D5C9 51
push ecx
:0040D5CA E88AFC0100
call 0042D259
:0040D5CF 83C408
add esp, 00000008
:0040D5D2 85C0
test eax, eax
:0040D5D4 0F8415010000
je 0040D6EF
:0040D5DA 8B9424E0000000 mov
edx, dword ptr [esp+000000E0]
:0040D5E1 53
push ebx
:0040D5E2 56
push esi
:0040D5E3
33C9 xor
ecx, ecx
:0040D5E5 8B72F8
mov esi, dword ptr [edx-08]
:0040D5E8 C644240868
mov [esp+08], 68
:0040D5ED 85F6
test esi, esi
:0040D5EF C644240975 mov [esp+09],
75
:0040D5F4 C644240A79 mov
[esp+0A], 79
:0040D5F9 C644240B64
mov [esp+0B], 64
:0040D5FE C644240C6F
mov [esp+0C], 6F
:0040D603 C644240D6E
mov [esp+0D], 6E
:0040D608 C644240E67
mov [esp+0E], 67
:0040D60D C644240F00
mov [esp+0F], 00
:0040D612 7E3F
jle 0040D653
:0040D614 55
push ebp
:0040D615 57
push edi
:0040D616 8D7C3417
lea edi, dword ptr [esp+esi+17]
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040D64F(C)
|
:0040D61A 8B8424F0000000 mov eax,
dword ptr [esp+000000F0] (EAX 中的值为注册名)
:0040D621 BD07000000
mov ebp, 00000007
(这几句作用是注册名超过7位后,又得第一个开始)
:0040D626 8A1C01
mov bl, byte ptr [ecx+eax]
:0040D629 8BC1
mov eax, ecx
:0040D62B 99
cdq
:0040D62C F7FD
idiv ebp
:0040D62E 0FBEC3
movsx eax, bl
(EAX值为注册名第N个字符值)=a
:0040D631 8BD9
mov ebx, ecx
:0040D633 0FBE541410
movsx edx, byte ptr [esp+edx+10]
(ESP+10)的值为字符 “huydong”
:0040D638 03DA
add ebx, edx
(取第N个固定字符值+N-1)=b
:0040D63A 03C3
add eax, ebx
(a+b)=c
:0040D63C BB09000000
mov ebx, 00000009
:0040D641 03C6
add eax, esi
(esi为注册名长度)+c=d
:0040D643
99
cdq
:0040D644 F7FB
idiv ebx
:0040D646 80C230
add dl, 30
:0040D649 41
inc ecx
(ECX+1)
:0040D64A 8817
mov byte ptr [edi], dl
(除9余数+30)=(注册名长度-N+1)位注册码
:0040D64C 4F
dec edi
:0040D64D 3BCE
cmp ecx, esi
:0040D64F
7CC9 jl 0040D61A
(小于注册名长度跳回运算)
:0040D651
5F
pop edi
:0040D652 5D
pop ebp
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:0040D612(C)
|
:0040D653 8D464D
lea eax, dword ptr [esi+4D]
(注册名长度+4D)
:0040D656 B909000000
mov ecx, 00000009
:0040D65B 99
cdq
:0040D65C F7F9
idiv ecx
:0040D65E
8B8424EC000000 mov eax, dword ptr [esp+000000EC]
:0040D665 80C230
add dl, 30 (最后一位注册码)
:0040D668
88543410 mov byte ptr [esp+esi+10],
dl
后面有一个与假码比对过程, 就不写了.
六: 整理算法如下:
算法分析如下:
J=len(注册名)
I<=J
S(I)=注册名第I位字符
D(I)=”huydong”第I位字符, 如注册名大于7,
则又从第一位开始
经过J次循环
则SN(J-I+1)= CHR(((S(I)+D(I)+J+I-1) MOD 9)+30h)
最后一位注册码为 SN(J+1)=ASC(((J+4Dh) mod 9)+30h)
可能很凌乱, 请大家谅解!!!!
- 标 题:轻松提取资源1.45破解心得 (7千字)
- 作 者:simonyan
- 时 间:2002-5-29
20:58:43
- 链 接:http://bbs.pediy.com