安全中国首页 > 文章中心 > 基础知识
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

商朝子的破解教学第六章--爆破软件

更新时间:2007-9-27 19:39:39
责任编辑:池天
热 点:
第六章--爆破软件 
爆破其实很简单,最起码比你能一下把你家的牙膏给全挤出来要容易多了。你只要先到大街上买几根雷管,然后放到你的显示器上再点着就OK了(不难吧,记的点着后跑远点儿)  
爆破的原理我也说过了,相信你很容易就能理解了。我们今天就具体讲一下如何找到那个关键跳转以及如何才能买到即便宜又好用的雷管...  
爆破一个软件一般只需要很少的几个步骤,首先先看一下其有无加壳,有的话是用何工具加的壳,知道了以后用相应的工具将其脱掉或进行手工脱壳,参考以有教程。接着我们就可以对脱过壳之后的软件来开刀了。你有两种选择,用W32Dasm或调试器,一般如果你遇上的是那种很菜的软件的话,用W32Dasm就可以搞定了。如果遇上的不是那种比较菜的,就买股票吧,因为股票是你如胶似漆的妻子!当!快醒醒啊...哦,一般如果你遇上的不是那种很菜的软件的话,就用调试器吧。先来说W32Dasm:我们首先用W32Dasm来进行反汇编(废话!)之后在串式参考中找到错误提示信息或可能是正确的提示信息双击鼠标左键来到相应的地址处。在W32Dasm的主窗口中分析相应汇编代码,找出关键跳转和关键call。绿色光条停在关键跳转,在W32Dasm主窗口底部找到关键跳转的偏移地址(实际修改地址)。用ultraedit找到偏移地址(实际修改地址)修改机器码(或放上一根雷管),保存(点火)!而用调试器也同样简单,等会儿会详细说明。 
道理废话了那么多,来实例动手说明吧: 
首先讲解用W32Dasm来进行爆破: 
【软件名称】中华压缩(ChinaZip) 
【软件版本】7.0 
【文件大小】1041KB 
【适用平台】Win9x/Me/NT/2000 
【软件简介】ChinaZip(中华压缩)是一款压缩、解压各种压缩文档的工具软件,它支持包括ZIP格式文件在内的各种常见压缩格式如:ARJ、CAB、GZIP、JAR、LHA、TAR、ZOO、ARC、LZH、Pak等等。 
软件的出处是电脑报2001年的合订本配套光盘,7.0时的保护做的很那个,目前最新版应该好多了... 
好的,我们开始吧,首先第一步是你得把它装上(引来野狼N头),之后先随便找个字符串填上去注册一下,会看到一个错误对话框,提示"注册码不正确,无法注册"。接着我们用FI来看一下它用的是什么壳。ASPack 2.001,caspr出场。脱过壳后我们用W32Dasm花上半分钟或半小时的时间来对它进行反汇编。我们以经反汇编完毕。之后在串式参考中(字符串数据参考)中找刚才你看到的那个错误提示,找到之后双击几次,发现其只有一处调用。我们会来到004F0E64处,我把具体代码给贴上(请你从代码的最下边开始看): 
:004F4DD1 E84EE1F3FF              call 00432F24 
:004F4DD6 8B55F0                  mov edx, dword ptr [ebp-10] 
:004F4DD9 8D4DF4                  lea ecx, dword ptr [ebp-0C] 
:004F4DDC 8BC3                    mov eax, ebx 
:004F4DDE E8C9010000              call 004F4FAC 
:004F4DE3 8B55F4                  mov edx, dword ptr [ebp-0C] 
:004F4DE6 58                      pop eax 
:004F4DE7 E830F3F0FF              call 0040411C 
:004F4DEC 7576                    jne 004F4E64                    <--这个就是传说中的男人,Stop!这个就是传说中的关键跳转    
:004F4DEE B201                    mov dl, 01 
:004F4DF0 A158254500              mov eax, dword ptr [00452558] 

* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:004F4D86(C) 

:004F4DF5 E85ED8F5FF              call 00452658 
:004F4DFA 8945FC                  mov dword ptr [ebp-04], eax 
:004F4DFD 33C0                    xor eax, eax 
:004F4DFF 55                      push ebp 
:004F4E00 685D4E4F00              push 004F4E5D 
:004F4E05 64FF30                  push dword ptr fs:[eax] 
:004F4E08 648920                  mov dword ptr fs:[eax], esp 
:004F4E0B B101                    mov cl, 01 

* Possible StringData Ref from Code Obj ->"Software\XDZHAN\ChinaZip" 
                                 | 
:004F4E0D BAA84E4F00              mov edx, 004F4EA8 
:004F4E12 8B45FC                  mov eax, dword ptr [ebp-04] 
:004F4E15 E822DAF5FF              call 0045283C 

* Possible StringData Ref from Code Obj ->"Real Programmers Use Pascal!" 
                                 | 
:004F4E1A B9CC4E4F00              mov ecx, 004F4ECC 

* Possible StringData Ref from Code Obj ->"Key" 
                                 | 
:004F4E1F BAF44E4F00              mov edx, 004F4EF4 
:004F4E24 8B45FC                  mov eax, dword ptr [ebp-04] 
:004F4E27 E854DEF5FF              call 00452C80 

* Possible StringData Ref from Code Obj ->"软件注册成功,谢谢您的支持!"     <--我们向上看会在这里发现注册成功后的正确信息。正确信息处向上找第一个跳转就是我们要找的关键跳转。 
                                 | 
:004F4E2C B8004F4F00              mov eax, 004F4F00 
:004F4E31 E8563DF6FF              call 00458B8C 
:004F4E36 A16C305000              mov eax, dword ptr [0050306C] 
:004F4E3B 8B00                    mov eax, dword ptr [eax] 

* Possible StringData Ref from Code Obj ->"中华压缩(ChinaZip)-注册版"   
                                 | 
:004F4E3D BA244F4F00              mov edx, 004F4F24 
:004F4E42 E80DE1F3FF              call 00432F54 
:004F4E47 33C0                    xor eax, eax 
:004F4E49 5A                      pop edx 
:004F4E4A 59                      pop ecx 
:004F4E4B 59                      pop ecx 
:004F4E4C 648910                  mov dword ptr fs:[eax], edx 
:004F4E4F 686E4E4F00              push 004F4E6E 

* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:004F4E62(U) 

:004F4E54 8B45FC                  mov eax, dword ptr [ebp-04] 
:004F4E57 E868E2F0FF              call 004030C4 
:004F4E5C C3                      ret 


:004F4E5D E9C2E9F0FF              jmp 00403824 
:004F4E62 EBF0                    jmp 004F4E54 

* Referenced by a (U)nconditional or (C)onditional Jump at Address: 
|:004F4DEC(C) 


* Possible StringData Ref from Code Obj ->"注册码不正确,无法注册!"  <--这个就是出错的信息了,那正确信息也就在附近,上下看看。     
                                 | 
:004F4E64 B8484F4F00              mov eax, 004F4F48                         <--双击来到这里 
:004F4E69 E81E3DF6FF              call 00458B8C 
:004F4E6E 33C0                    xor eax, eax 
:004F4E70 5A                      pop edx 
:004F4E71 59                      pop ecx 
:004F4E72 59                      pop ecx 
:004F4E73 648910                  mov dword ptr fs:[eax], edx 
:004F4E76 689B4E4F00              push 004F4E9B 
你可能有点不明白,为什么我说它就是关键跳转呢?还记的在破解原理中我举的例子吗? 
我再给你讲一遍好了,通常我们会遇到两种关键跳转,我分别举例说明: 
(1) 
je (jne,jz,jnz) 19870219 
........  XXXXXXXXXX 
........  XXXXXXXXXX 
........  软件注册正确的相关信息 
 ... 
 ... 
19870219 软件的出错信息 
....... 
....... 
也就是说这第一种情况是先判断注册码是否正确,如果不正确就跳到19870219处,正确的话就不跳转,一直执行下去,直至注册正确处。 
对于这种情况,我们要找的关键跳转,就是正确信息上面的第一个跳转。我们可能对其作相应修改或将其给nop掉就万事OK了。 
(2) 
je (jne,jz,jnz) 19870219 
........  XXXXXXXXXX 
........  XXXXXXXXXX 
........  软件的出错信息 
 ... 
 ... 
19870219 软件注册正确的相关信息 
....... 
....... 
而这第二种情况就是先判断注册码正确与否,如果正确就跳到19870219处,不正确的话就不跳转,一直执行下去,直至出错处。 
对于这种情况,我们要找的关键跳转就是出错信息上面的第一个跳转。将其做相应修改或改为jmp后我们就可以为所欲为了  
呵呵,道理也都给你讲明白了,我们来改一下试试吧。我们在W32Dasm中选中关键跳转,在右下角的状态栏中看到相应的偏移地址为000F41EC。好的,我们用UltraEdit来打开它。Ctrl+G,接着输入0xF41EC,回车后便会跳到相应的位置。相应的机器码是75(jne),我们将其改为74(jz)后存盘退出。 
好了,运行一下看看,我们来随便输入一个注册码注册一下试试。呵呵,注册成功! 
用W32Dasm我们就讲到这里,呵呵,很简单的,你下去之后自己找些保护简单的软件上上手吧。 
我们接着来讲用调试器来进行爆破。 
如果你真的试图用W32Dasm去爆破几个软件的话,用不了多少时间你就会发现一些问题。比如说有的软件你用W32Dasm反汇编后串式参考根本就不能用。或者串式参考中没有出错或正确的信息。还有就是有的软件就算你通过串式参考来到了相应的地方,刚想去找关键跳转你就会发现眼前的东西比你想像中的要乱的多...虽然你有可能通过认真仔细地找,仍会找到,但我不认为那是一件聪明的事情。毕竟,有一些动静是只有在程序执行期间才能看出来的。好的,如果你用W32Dasm遇到了找不到关键跳转的软件,就去用调试器吧!(你用调试器前可先用W32Dasm打开一遍看个先,如果很容易就让你找到了。那就没必要了) 
在开始之前我们有必要讲一下用调试器来爆破的步骤(我知道你一定会用调试器的  ):首先,我们当然还是要把你要Crack的软件给装上(我挡我挡我挡,不要乱丢东西嘛!)然后来到输入注册码的地方,仍旧随便输入一个,接着不要按确定,待我们把调试器叫出来先。还记的我前面跟你讲的API的事情吗?软件要得到你输入的注册码,就一定会调用某个API函数来达到目的。我们就在调试器中用相应的API来做断点,这样的话,只要一有程序调用这个API,就会被调试器给拦截下来。 
GetDlgItemInt、GetDlgItemText、GetDlgItemTextA这三个函数可能会有用。但是如果你用的是98,那为什么不用hmemcpy呢?那真的是一个不错的主意。当我们下完断点后就返回到你要注册的那个软件中,点确定这类的按钮。如果被调试器给断了下来,就说明你刚才下的断点有用,如果没有被断下来,就换个断点试试。接下来我们在调试器中来取消刚才你下的那个断点,我们以TRW2000为例(SoftICE与其操作大体相同)取消断点用bc *指令。然后我们就输入pmodule指令来返回到程序的领空(而在SoftICE中由于没有相应指令,呵呵,狂按F12吧)。现在我们把话题岔开一下,什么是领空呢?举个例子吧,你的程序要得到你输入的那个注册码,就会去调用相应的函数。比如调用GetDlgItemTextA,而GetDlgItemTextA本身又会去调用Hmemcpy这个函数,而这些函数都是存在于系统中的某个DLL文件中的。那么当这个程序调用相应的API函数的话,程序的领空就会转到这个相应的DLL文件中去执行这个API函数。(你就这样理解就行了)我前边也说过了,Hmemcpy这个函数应用程序本身并不直接调用,而是由其它的API函数来调用。那么,你就可以理解为你的程序调用了一个API函数,调用的同时程序的领空会转到这个API所在的DLL文件里,而这个API又调用了Hmemcpy函数,那么此时领空就会又转到了Hmemcpy所在的DLL文件中,之后当Hmemcpy执行完毕,就会返回到调用它的API的领空中去,而当这个API执行完毕的后就会返回到调用它的应用程序的领空中去。比如说我们用Hmemcpy这个函数来当断点,当我们输入完注册码按确定后,程序就会去调用某个API来得到你输入的那些数据,而这“某个API”又会去调用Hmemcpy,所以程序就被断到了。当然此时程序的领空也就不会在应用程序中了,但是当我们输入过pmodule指令之后我们就可以反回到应用程序本身的领空中去了。这样的话你看到的就是应用程序自身的代码了,而不是API的!好了,我接着刚才的说(到哪儿了来着?)当我们返回到程序自身的领空中去后就一直狂按F12吧,F12的作用是一直执行程序,直到遇上ret等指令。也就是一大坨一大坨地来执行程序^_^你一直按F12,直到程序出现注册错误对话框。然后记下刚才你按的次数,接着从头做起,这一次按F12的次数是你刚才按的次数-1,也就是说比上一次要少按一次。而后按键由F12换至F10(怎么没有F4?),还是一路狂按,直到软件提示出错,这次记下你按F10的次数。好的,再从头来一遍,我们再次按F10的时候,要一步一步慢慢来,一般你按F10的次数离你上次按的次数相差五六步的时候,一般就会看见一个CALL,接着是一个跳转指令。你一步一步地来,看过了这个跳转指令之后会不会跳走,如果跳走了,那一般你不会再过两三步就应该出错了。当然也有可能是你没有跳走,而过了两三步就出错了。这个应该不难理解,因为基本上它和我前边跟你介绍过的是一个道理。然而另外一种情况是你一路按F10下来,到了最后会发现根本没什么跳转指令,呵呵,别害怕,这个很常见的。遇上这种情况,我们只要把F10的次数变换为上次按F10的次数-1,这样的话你一般就会停在一个CALL处,而这个CALL,就是程序中的关键CALL,我们之后要吃点儿苦,要按F8追进去分析它,程序注册的成功与失败,就在这个CALL中,也就是说我们要修改的关键跳转,也在这个CALL中。呵呵,其实也很好理解的,就是把我上边说的那些个判断什么地放到了一个CALL里面。我们按F8追进去之后便仍旧按F10来一步一步执行,过不了多长时间你就会发现关键跳转了,找关键跳转的方法跟我前边说的一样,即按F10的次数跟上一次差五六步的时候慢下来,就会看到了。 
你应该明白,程序是很灵活的东西,并没有那么多公式化的东西在里边,大概的分析方法就是这个样子,一切都要靠你自己去掌握,别人跟你讲,也只是讲一个分析的方法而以,我相信随着你以后经验的提高,你慢慢地就能应付各种情况了。 
现在,我们再用调试器来对CHINAZIP这个软件进行分析,希望你能够掌握这个并不难的方法。 
首先,你要把刚才爆破过了的再改回来,或直接重装一遍。之后我们打开它,任意输入注册码,接着按Ctrl+N呼出TRW,下断点hmemcpy。下过后按F5退出(它就是不用F4,我也没办法^_^)然后我们点击确定。好的,程序被断了下来: 
KERNEL?HMEMCPY 
0147:9e62  push     bp 
0147:9e63  mov      bp,sp 
0147:9e65  push     ds 
0147:9e66  push     edi 
0147:9e68  push     esi 
0147:9e6a  cld 
0147:9e6b  mov      ecx,[bp+06] 
0147:9e6f  jcxz     9ee9 
……以下N多代码省略…… 
我们输入bc *来取消断点,然后用pmodule来返回到程序的领空: 
0167:00436d13  mov      [ebx+0c],eax 
0167:00436d16  mov      eax,[ebx] 
0167:00436d18  cmp      eax,byte +0c 
0167:00436d1b  jnz      00436d38 
0167:00436d1d  mov      edx,[ebx+08] 
0167:00436d20  push     edx 
0167:00436d21  mov      ecx,[ebx+04] 
0167:00436d24  mov      edx,eax 
0167:00436d26  mov      eax,esi 
0167:00436d28  call     00432b24 
……N多代码仍旧省略…… 
按7下F12另加1下F10来到0167:004f4dc4处,我们接着一下一下来按F10,大概按了10多下,就可以看到004f4dec处有一个跳转,我们执行到004f4dec处后果然跳走了。会跳到004f4e64处,我们跳过去之后按不了三下,程序就提示出错了。呵呵,明白过来了吧,004f4dec处的那个跳转jnz 004f4e64就是关键跳转,嘿嘿,找到了之后不用我说了吧  
0167:004f4dc4  mov      eax,[ebp-08]       
0167:004f4dc7  push     eax               
0167:004f4dc8  lea      edx,[ebp-10] 
0167:004f4dcb  mov      eax,[ebx+02e0] 
0167:004f4dd1  call     00432f24           
0167:004f4dd6  mov      edx,[ebp-10]       
0167:004f4dd9  lea      ecx,[ebp-0c] 
0167:004f4ddc  mov      eax,ebx 
0167:004f4dde  call     004f4fac         
0167:004f4de3  mov      edx,[ebp-0c]     
0167:004f4de6  pop      eax               
0167:004f4de7  call     0040411c           
0167:004f4dec  jnz      004f4e64                    <--关键跳转!!           
0167:004f4dee  mov      dl,01 
0167:004f4df0  mov      eax,[00452558] 
0167:004f4df5  call     00452658 
0167:004f4dfa  mov      [ebp-04],eax 
0167:004f4dfd  xor      eax,eax 
0167:004f4dff  push     ebp 
0167:004f4e00  push     dword 004f4e5d 
0167:004f4e05  push     dword [fs:eax] 
0167:004f4e08  mov      [fs:eax],esp 
0167:004f4e0b  mov      cl,01 
0167:004f4e0d  mov      edx,004f4ea8 
0167:004f4e12  mov      eax,[ebp-04] 
0167:004f4e15  call     0045283c 
0167:004f4e1a  mov      ecx,004f4ecc 
0167:004f4e1f  mov      edx,004f4ef4 
0167:004f4e24  mov      eax,[ebp-04] 
0167:004f4e27  call     00452c80 
0167:004f4e2c  mov      eax,004f4f00 
0167:004f4e31  call     00458b8c 
0167:004f4e36  mov      eax,[0050306c] 
0167:004f4e3b  mov      eax,[eax] 
0167:004f4e3d  mov      edx,004f4f24 
0167:004f4e42  call     00432f54 
0167:004f4e47  xor      eax,eax 
0167:004f4e49  pop      edx 
0167:004f4e4a  pop      ecx 
0167:004f4e4b  pop      ecx 
0167:004f4e4c  mov      [fs:eax],edx 
0167:004f4e4f  push     dword 004f4e6e 
0167:004f4e54  mov      eax,[ebp-04] 
0167:004f4e57  call     004030c4 
0167:004f4e5c  ret     
0167:004f4e5d  jmp      00403824 
0167:004f4e62  jmp      short 004f4e54 
0167:004f4e64  mov      eax,004f4f48      <---由上面的0167:004f4dec处跳来,出错!; 
0167:004f4e69  call     00458b8c 
0167:004f4e6e  xor      eax,eax 
再来给你举另一个例子: 
【软件名称】天网防火墙 
【软件版本】2.46 Beta 
【文件大小】1289KB 
【适用平台】Win9x/Me/NT/2000 
【软件简介】天网防火墙个人版是一套给个人电脑使用的网络安全程序,它可以帮你抵挡网络入侵和攻击,防止信息泄露,并可与我们的网站相配合,根据可疑的攻击信息,来找到攻击者。同时天网防火墙个人版把网络分为本地网和互联网,可以针对来自不同网络的信息,来设置不同的安全方案,它适合于在拨号上网的用户,也适合通过网络共享软件上网的用户。 
该软件仍旧是我从电脑报2001年合订本的配套光盘中找的,软件的注册码可以到其网站免费获得... 
我们还是要先把它装上(某民工:你小子敢再说一句废话试试!^_^)之后我们用FI看一下它有没有加壳,呵呵,BC++编译,没有加壳,爽!运行它,在注册对话框中随便输入点什么,比如说这星期又出了几部新电影,都叫什么名字等等...  
好的,我们接下来请TRW2000出场。先胡乱输入两个字符串,比如第一个输入“英雄的导演是?”第二个输入“可能是赵本山”:) 
接下来就按Ctrl+N把TRW2K叫出来,下bpx hmemcpy,之后按F5退出。 
接着可以按确定就成了,程序会被TRW2K断掉,我们紧接着输入bc *以及pmodule。 
下面可以开始按F12了,一共按8下程序就会报错,我们第二次就按7下然后开始按F10,按70下F10程序就又报错了(呵呵,一定要有耐心哦)。 
好的,我把反汇编后的代码给你贴出来: 
0167:0041c617  lea      edx,[ebp-04]                              <--7下F12后按一下F10来到这里 
0167:0041c61a  mov      ecx,[0052ae7c] 
0167:0041c620  mov      eax,[ecx] 
0167:0041c622  mov      eax,[eax+0318] 
0167:0041c628  add      eax,byte +2c 
0167:0041c62b  call     00517740 
0167:0041c630  dec      dword [ebp-20] 
0167:0041c633  lea      eax,[ebp-04] 
0167:0041c636  mov      edx,02 
0167:0041c63b  call     00517710 
0167:0041c640  mov      word [ebp-2c],14 
0167:0041c646  lea      eax,[ebp-08] 
0167:0041c649  call     00401d60 
0167:0041c64e  mov      edx,eax 
0167:0041c650  inc      dword [ebp-20] 
0167:0041c653  mov      ecx,[ebp-40] 
0167:0041c656  mov      eax,[ecx+02e0] 
0167:0041c65c  call     004b9f14 
0167:0041c661  lea      edx,[ebp-08] 
0167:0041c664  mov      ecx,[0052ae7c] 
0167:0041c66a  mov      eax,[ecx] 
0167:0041c66c  mov      eax,[eax+0318] 
0167:0041c672  add      eax,byte +30 
0167:0041c675  call     00517740 
0167:0041c67a  dec      dword [ebp-20] 
0167:0041c67d  lea      eax,[ebp-08] 
0167:0041c680  mov      edx,02 
0167:0041c685  call     00517710 
0167:0041c68a  lea      eax,[ebp-10] 
0167:0041c68d  call     00401d60 
0167:0041c692  mov      edx,eax 
0167:0041c694  inc      dword [ebp-20] 
0167:0041c697  mov      ecx,[ebp-40] 
0167:0041c69a  mov      eax,[ecx+02e0] 
0167:0041c6a0  call     004b9f14 
0167:0041c6a5  lea      edx,[ebp-10] 
0167:0041c6a8  push     dword [edx] 
0167:0041c6aa  mov      word [ebp-2c],20 
0167:0041c6b0  lea      eax,[ebp-0c] 
0167:0041c6b3  call     00401d60 
0167:0041c6b8  mov      edx,eax 
0167:0041c6ba  inc      dword [ebp-20] 
0167:0041c6bd  mov      ecx,[ebp-40] 
0167:0041c6c0  mov      eax,[ecx+02d4] 
0167:0041c6c6  call     004b9f14 
0167:0041c6cb  lea      edx,[ebp-0c] 
0167:0041c6ce  mov      edx,[edx] 
0167:0041c6d0  mov      eax,[0052ae7c] 
0167:0041c6d5  mov      eax,[eax] 
0167:0041c6d7  pop      ecx 
0167:0041c6d8  call     0040525c 
0167:0041c6dd  mov      [ebp-45],al 
0167:0041c6e0  dec      dword [ebp-20] 
0167:0041c6e3  lea      eax,[ebp-10] 
0167:0041c6e6  mov      edx,02 
0167:0041c6eb  call     00517710 
0167:0041c6f0  dec      dword [ebp-20] 
0167:0041c6f3  lea      eax,[ebp-0c] 
0167:0041c6f6  mov      edx,02 
0167:0041c6fb  call     00517710 
0167:0041c700  cmp      byte [ebp-45],00 
0167:0041c704  jz       0041c750                       <--按了60多下F10后会在这里发现一个跳转,嘿嘿,就是它了!!! 
0167:0041c706  mov      ecx,[0052ae7c] 
0167:0041c70c  mov      eax,[ecx] 
0167:0041c70e  mov      eax,[eax+0318] 
0167:0041c714  call     00411fd0 
0167:0041c719  mov      word [ebp-2c],2c 
0167:0041c71f  mov      edx,00521b50 
0167:0041c724  lea      eax,[ebp-14] 
0167:0041c727  call     005175b0 
0167:0041c72c  inc      dword [ebp-20] 
0167:0041c72f  mov      eax,[eax] 
0167:0041c731  call     004b41b0 
0167:0041c736  dec      dword [ebp-20] 
0167:0041c739  lea      eax,[ebp-14] 
0167:0041c73c  mov      edx,02 
0167:0041c741  call     00517710 
0167:0041c746  mov      eax,[ebp-40] 
0167:0041c749  call     004a81d0 
0167:0041c74e  jmp      short 0041c77d 
0167:0041c750  mov      word [ebp-2c],38 
0167:0041c756  mov      edx,00521b6b 
0167:0041c75b  lea      eax,[ebp-18] 
0167:0041c75e  call     005175b0 
0167:0041c763  inc      dword [ebp-20] 
找到了关键跳转之后就别闲着了,呵呵,放雷管吧!(你可以用W32Dasm打开这个文件,然后按Shift+F12,之后输入0041c704,这样就可以在右下角看到相应的偏移地址了) 
小技巧:在TRW中,如果你觉的某处可能是关键跳转的话,可以用r fl z这个指令来进行测试,该指令可使以成立的条件取反,比如说本来JZ XXXXXXXX成立,可以跳走了,用r fl z指令后该条指令就不成立了,即就不会跳走了。以上也是,你可以在0041c704处输入r fl z,呵呵,再执行几步看看,是不是成功了?还有就是如果你只是想达到注册软件的目的,且该软件只在注册的时候验证一次的话,用这个方法就可以代替雷管了!  
呵呵,最后还是要说一句,爆破只是一些雕虫小技。刚入门时玩几次就够了,切莫就此不前... 
后话:你可能慢慢就会发现,有一些软件其实并没有你想象中那么简单,你甚至连找到它的关键跳转都找不到。这很正常,你要做的便是多动手多练习,慢慢你就会明白过来的。我今天之所以给你举这两个例子,就是因为它们两个都比较简单,且能说明重点,给你讲那些比较那个的软件的爆破,反而会让你看的一头雾水...  
<本章完> 

 
相关文章
一日一文章
 
一日一软件
一日一动画