⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 菜鸟破解从头学(全教程).txt

📁 菜鸟破解从头学(全教程)
💻 TXT
📖 第 1 页 / 共 5 页
字号:




* 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,也就是说比上一次

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -