• 标 题:我的第一篇破文,贴出来共同切磋提高。 (5千字)
  • 作 者:音速刺猬
  • 时 间:2002-1-1 13:39:00
  • 链 接:http://bbs.pediy.com

《网页下载专家》破解

这是我从老光盘上找到的,现在早不知还有没有这个软件了。我在这里班门弄斧,望高手们看了以后不要笑的太大声。

点出注册窗口,先得到一个注册码(我的为7FN20LN;)。然后就用此码注册.
按CTRL-D进入SOFT-ICE(都说TRW好,可我试了八九个版本都死机,只好不用,其实两者基本上是一样的)。用万能断点bpx hmemcpy,返回程序后点“注册”,被SOFT-ICE拦住,一直按
F12 十二次(十三次就会跳出失败窗口)。这时汇编代码如下:

:00467FB4 8D55F8                  lea edx, dword ptr [ebp-08]
:00467FB7 E860FEF9FF              call 00407E1C
:00467FBC 8B45F8                  mov eax, dword ptr [ebp-08]
:00467FBF 8D55FC                  lea edx, dword ptr [ebp-04]
:00467FC2 E861FFFFFF              call 00467F28
:00467FC7 8B45FC                  mov eax, dword ptr [ebp-04]
:00467FCA 50                      push eax
:00467FCB 8D45F8                  lea eax, dword ptr [ebp-08]
:00467FCE E855EFFFFF              call 00466F28
:00467FD3 8B55F8                  mov edx, dword ptr [ebp-08]
:00467FD6 58                      pop eax
:00467FD7 E858BDF9FF              call 00403D34                :关键CALL
:00467FDC 7570                    jne 0046804E                :修改后便出现“注册成功”
:00467FDE BA03000080              mov edx, 80000003
:00467FE3 8BC3                    mov eax, ebx
:00467FE5 E82263FEFF              call 0044E30C
:00467FEA B101                    mov cl, 01
:00467FEC BACC804600              mov edx, 004680CC
:00467FF1 8BC3                    mov eax, ebx
:00467FF3 E87064FEFF              call 0044E468
:00467FF8 8D55F4                  lea edx, dword ptr [ebp-0C]
:00467FFB 8B86C8020000            mov eax, dword ptr [esi+000002C8]
:00468001 E8B663FCFF              call 0042E3BC
:00468006 8B45F4                  mov eax, dword ptr [ebp-0C]
:00468009 8D55FC                  lea edx, dword ptr [ebp-04]
:0046800C E817FFFFFF              call 00467F28
:00468011 8B45FC                  mov eax, dword ptr [ebp-04]
:00468014 50                      push eax

* Possible StringData Ref from Code Obj ->"StringTest"
                                  |
:00468015 B918814600              mov ecx, 00468118

* Possible StringData Ref from Code Obj ->"CompletedModifications"
                                  |
:0046801A BA2C814600              mov edx, 0046812C
:0046801F 8BC3                    mov eax, ebx
:00468021 E8BE68FEFF              call 0044E8E4
:00468026 8BC3                    mov eax, ebx
:00468028 E8AF62FEFF              call 0044E2DC
:0046802D 8BC3                    mov eax, ebx
:0046802F E89CADF9FF              call 00402DD0
:00468034 6A30                    push 00000030

* Possible StringData Ref from Code Obj ->"注册成功"
                                  |
:00468036 B944814600              mov ecx, 00468144

* Possible StringData Ref from Code Obj ->"注册成功"
                                  |
:0046803B BA44814600              mov edx, 00468144
:00468040 A1A4DC4600              mov eax, dword ptr [0046DCA4]
:00468045 8B00                    mov eax, dword ptr [eax]
:00468047 E8F421FEFF              call 0044A240
:0046804C EB46                    jmp 00468094

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00467FDC(C)
|
:0046804E 6A30                    push 00000030
:00468050 8D55F4                  lea edx, dword ptr [ebp-0C]
:00468053 8B86C8020000            mov eax, dword ptr [esi+000002C8]
:00468059 E85E63FCFF              call 0042E3BC
:0046805E 8D45F4                  lea eax, dword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->"注册码错误"
                                  |
:00468061 BA58814600              mov edx, 00468158
:00468066 E8C1BBF9FF              call 00403C2C
:0046806B 8B45F4                  mov eax, dword ptr [ebp-0C]
:0046806E E875BDF9FF              call 00403DE8
:00468073 8BD0                    mov edx, eax

* Possible StringData Ref from Code Obj ->"错误"
                                  |
:00468075 B964814600              mov ecx, 00468164
:0046807A A1A4DC4600              mov eax, dword ptr [0046DCA4]
:0046807F 8B00                    mov eax, dword ptr [eax]
:00468081 E8BA21FEFF              call 0044A240                :按F10到这个CALL就完蛋了。

向上看有没有能跳过这个CALL的地方:在0046804C有一句jmp 00468094但程序没有运行到。WHY?再向上看,有了!00467FDC 7570 jne 0046804E 就是它了。程序执行到此句时,下指令 r fl z (把不跳变跳,把跳变不跳),按F5返回,好,“注册成功”。先别高兴,通常仅仅这样是不行的。你看,这不还是“未注册版本”吗?

在467fd3处下d指令可以看到一串代码:5DL02NL9 一个合格Cracker这时应该能迅速发现它和那个本机码 7FN20LN; 有点关系。你能看出来吗?    5  D  L  0  2  N  L  9
            +2  +2  +2  +2  -2  -2  +2  +2  (这个其实没什么用)
            7  F  N  2  0  L  N  ;    
再看其他几个值还有一个6GO31MO:              7  F  N  2  0  L  N  ;
                          -1  +1  +1  +1  +1  +1  +1  -1
                          6  G  O  3  1  M  O  :
然后比较5DL02NL9和6GO31MO:.可见只要把5DL02NL9按-1+1的方法算回去就是注册码了。
                5  D  L  0  2  N  L  9
                -1  +1  +1  +1  +1  +1  +1  -1 
                4  E  M  1  3  O  M  8
注册码为:4EM13OM8

因为功力不够,看不懂那一堆运算,我破解一般都是暴破,很少有这样破解的。因此这样的得意之作一定要贴出来的。这是我的第一篇破文,给各位大哥看看,有什么错误之处,欢迎指正。祝中国所有Cracker元旦快乐!