好文档 - 专业文书写作范文服务资料分享网站

适合入门的软件破解教程 - 鄙视要太多分的 

天下 分享 时间: 加入收藏 我要投稿 点赞

: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

适合入门的软件破解教程 - 鄙视要太多分的 

:004F4E705Apopedx:004F4E7159popecx:004F4E7259popecx:004F4E73648910movdwordptrfs:[eax],edx:0
推荐度:
点击下载文档文档为doc格式
7w6882x74s2b61z989ic
领取福利

微信扫码领取福利

微信扫码分享