我以winhex9.9为例.请使用TRW,因为要用suspend.
启动winhex前,伪造user.txt。要留意伪造的user.txt的格式,User: ADDR1: ADDR2: 英文、中文可任意输入.但是,code1、code2的数必须是0-f且必须有32个.code1的第21到24位数,假设它为A(1)A(2)A(3)A(4),那么A(3)A(4)A(1)A(2)应小于0370,或者大于03A2.
打bpx 417dbd
启动winhex,打开内存修改,存盘.中断在下面:
:00417DBD B9BC060000 mov ecx,
000006BC
:00417DC2 8B1578ED4500 mov edx, dword
ptr [0045ED78]
:00417DC8 E823D3FEFF call 004050F0
:00417DCD E826FEFFFF call 00417BF8
<---进入
:00417DD2 BAB8654600 mov edx,
004665B8
:00417DD7 8D442428 lea
eax, dword ptr [esp+28]
* Possible Ref to Menu: MenuID_0001, Item: "Sicherung laden..."
|
:00417DDB B910000000 mov ecx,
00000010
进入417dcd: call 417bf8中:
:00417D27 E8CCDCFEFF call 004059F8
:00417D2C 8BD8
mov ebx, eax
:00417D2E 6A00
push 00000000
:00417D30 BAB8654600 mov edx,
004665B8
:00417D35 8BC3
mov eax, ebx
* Possible Ref to Menu: MenuID_0001, Item: "Sicherung laden..."
|
:00417D37 B910000000 mov ecx,
00000010
:00417D3C E8A3DDFEFF call 00405AE4
<----进入
* Possible Ref to Menu: MenuID_0001, Item: "Hex-Werte Strg+Shift+C"
|
:00417D41 BA2C000000 mov edx,
0000002C
:00417D46 8BC3
mov eax, ebx
进入417d3c:call 405ae4中:
:00405B2A 8B45FC
mov eax, dword ptr [ebp-04]
:00405B2D E8AAFDFFFF call 004058DC
:00405B32 0FB7C8
movzx ecx, ax
:00405B35 C1E908
shr ecx, 08
:00405B38 24FF
and al, FF
:00405B3A 32C8
xor cl, al
:00405B3C 8B45F8
mov eax, dword ptr [ebp-08]
:00405B3F 03C6
add eax, esi
:00405B41 3208
xor cl, byte ptr [eax] <---此处打bpx,每次停在这里,cl中的数据和下面的一组16个字节数据依次xor后,存入[eax]中,这个数一定要记下来,最后记下来的一组16个字节数即为code2.
既:cl xor 5b == ? ,将?存入[eax]中,同时记下?,这是code2的第一个数据,
第二次中断在这里,将cl与0e xor,结果存入[eax],并记下,此为code2的第二个数据,依此类推.一共中断16次,得到16个数据,既为code2。
<< 这一组16个字节数据如下:
5b 0e 44 2c 80 f2 0c d3 b4 ad 22 97 da ce 3f 6d >>
这样找到的注册码适用winhex9.74到9.92.
winhex的加密做的真的很好,连\\.\SICE字符串也加了密.
user.txt如下,它适合winhex9.74到9.92的任何版本:
User: yourname
Addr1: aaaa
Addr2: aa
Code1: 0123456789abcdef0123456789abcdef
Code2: 9b8be3627af62ab02fb7c4b793766410
User: 中国四川
Addr1: 看雪论坛
Addr2: 看雪学院
Code1: 88888888888888888888888888888888
Code2: 93e853c64441aeaf93c4b1c805b90ca9