:004860B5 3C41 cmp al, 41
:004860B7 7204 jb 004860BD
:004860B9 3C5A cmp al, 5A
:004860BB 7610 jbe 004860CD
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004860B7(C)
|
:004860BD 3C61 cmp al, 61
:004860BF 0F824DFFFFFF jb 00486012
:004860C5 3C7A cmp al, 7A
:004860C7 0F8745FFFFFF ja 00486012
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004860BB(C)
|
:004860CD 3C61 cmp al, 61
:004860CF 7202 jb 004860D3
:004860D1 2C20 sub al, 20
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004860CF(C)
|
:004860D3 8D5301 lea edx, dword ptr [ebx+01]
:004860D6 C1E204 shl edx, 04
:004860D9 32D0 xor dl, al
:004860DB 8BF3 mov esi, ebx
:004860DD 81E6FF000000 and esi, 000000FF
:004860E3 46 inc esi
:004860E4 8BC6 mov eax, esi
:004860E6 C1E004 shl eax, 04
:004860E9 88907BBD4800 mov byte ptr [eax+0048BD7B], dl
循环结果 ====>DL=①48 ②73 ③76 ④09 ⑤18 ⑥26 ⑦3D ⑧C3
:004860EF 33C0 xor eax, eax
:004860F1 8AC3 mov al, bl
:004860F3 40 inc eax
:004860F4 C1E004 shl eax, 04
:004860F7 8D0476 lea eax, dword ptr [esi+2*esi]
:004860FA 3A907BBD4800 cmp dl, byte ptr [eax+0048BD7B]
:00486100 7511 jne 00486113
:00486102 33C0 xor eax, eax
:00486104 8AC3 mov al, bl
:00486106 83C005 add eax, 00000005
:00486109 8D0480 lea eax, dword ptr [eax+4*eax]
:0048610C C6807BBD480001 mov byte ptr [eax+0048BD7B], 01
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00486100(C)
|
:00486113 43 inc ebx
:00486114 80FB08 cmp bl, 08
:00486117 0F85F1FEFFFF jne 0048600E
====>大循环8次,得出8个值!
:0048611D 33C0 xor eax, eax
:0048611F 5A pop edx
:00486120 59 pop ecx
:00486121 59 pop ecx
:00486122 648910 mov dword ptr fs:[eax], edx
:00486125 6850614800 push 00486150
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048614E(U)
|
:0048612A 8D45F4 lea eax, dword ptr [ebp-0C]
:0048612D E842E3F7FF call 00404474
:00486132 8D45F8 lea eax, dword ptr [ebp-08]
* Possible StringData Ref from Code Obj ->".3"
|
:00486135 8B15EC5E4800 mov edx, dword ptr [00485EEC]
:0048613B E8F8F9F7FF call 00405B38
:00486140 8D45FC lea eax, dword ptr [ebp-04]
:00486143 E82CE3F7FF call 00404474
:00486148 C3 ret
—————————————————————————————————
【求 逆】:
现在我已知道程序首先对试炼码进行简单的异或处理得出新的值;设为S1。
然后,程序通过对用户名和序列号的运算再次得出一组值;设为S2
只要S1=S2,则OK!
所以我们可以通过K2简单求逆就可得出真正的注册码!
这是K1的生成过程:
:004863EE 32CB xor cl, bl
1、 ====>CL=31 XOR 10=21
2、 ====>CL=33 XOR 20=13
3、 ====>CL=35 XOR 30=05
4、 ====>CL=37 XOR 40=77
5、 ====>CL=32 XOR 50=62
6、 ====>CL=34 XOR 60=54
7、 ====>CL=36 XOR 70=46
8、 ====>CL=38 XOR 80=B8
现在我的S2=①48 ②73 ③76 ④09 ⑤18 ⑥26 ⑦3D ⑧C3
所以注册码的求逆过程为:
1、 ====>K1=48 XOR 10=58 即:字符X
2、 ====>K2=73 XOR 20=53 即:字符S
3、 ====>K3=76 XOR 30=46 即:字符F
4、 ====>K4=09 XOR 40=49 即:字符I
5、 ====>K5=18 XOR 50=48 即:字符H
6、 ====>K6=26 XOR 60=46 即:字符F
7、 ====>K7=3D XOR 70=4D 即:字符M
8、 ====>K8=C3 XOR 80=43 即:字符C
所以,我的注册码为:XSFIHFMC
另外,再多说一点,如果仅仅是在验证外的某处爆破的话,会显示“已注册”,但是合并后的文件是会非法操作的。
呵呵,即便如此,却也比 开山文件合并器 要“温柔”的多了。
—————————————————————————————————
【注册信息保存】:
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\exebind\reg]
"user"="fly0"
"regcode"="XSFIHFMC"
—————————————————————————————————
【整 理】:
序列号:211C1E09
用户名:fly0
注册码:XSFIHFMC
—————————————————————————————————
Cracked By 巢水工作坊——fly【OCN】
2003-04-04 11:01:11


