当前位置: 移动技术网 > 网络运营>安全>加解密 > Ollydbg破解教学之万能断点篇

Ollydbg破解教学之万能断点篇

2018年04月11日  | 移动技术网网络运营  | 我要评论

终于有一点时间总结一下OD破解的经验,有许多大侠们都认为OD不能下万能断点,可是有些软件的破解需要用到万能断点,以前一直没有这方面的资料,有的只是OD不能下万能断点的断言,一时心恢之极,可是我原来用TRW和SICE用的挺好,谁知系统又跟我闹矛盾,一用TRW和SICE就死机,没办法我现在只能用OD,我写的一些破解文章都是用OD破的,反复试验,我终于发现OD也能下万能断点,在我以前写的一些文章中好象有一篇简单提到过,但没有说的很详细,这次静下心,想写一点东西,送给我心爱的组织DFCG吧,我的破解是从DFCG组织起步的,很感谢DFCG的高手们的帮助,在此说声谢谢!为了更明确,这次破解所使用的调试器OD是从看雪临时下载的OD1.09的汉化版,没有使用我自己手头经过改造的OD,在此也感谢看雪论坛,这里真的有很多高手,在这个论坛我也学到了很多.这次破解的对象是超级XX王,为保护国产软件我隐去了软件相关信息,我不想给自己带来麻烦,现在工作很忙,能少一点麻烦就尽量少一点吧.
    破解作者
             yzez[DFCG]
    破解工具
             ollydbg1.09汉化版,看雪论坛下载.
    破解目的
             本不为破解而破解,只因为技术而破解
    破解环境
             WINDOWS XP,这个我已经在98和XP下各做了两次,贴图和我这篇文章是在XP系统下完成的.
    破解过程
1.检查了一下,该程序无壳,C++编译,用W32DSM反汇编一堆乱码,我倒!那就动态调试吧!用ollydbg1.09载入程序,这次我将教
你们如何用OD下万能断点,过程我尽可能详细一点,下面请看.载入程序选OD菜单栏上的插件-----命令行(快捷键是ALT+F1),
在弹出的窗口中输入万能断点命令:bpx hmemcpy,按ENTER键,结果又出现一个对话框:
Intermodular calls
00401164 CALL DWORD PTR DS:[<&USER32.GetWindowRect>]  USER32.GetWindowRect
0040118F CALL DWORD PTR DS:[<&USER32.GetClientRect>]  USER32.GetClientRect
00401279 CALL DWORD PTR DS:[<&USER32.GetClientRect>]  USER32.GetClientRect
004013E1 CALL DWORD PTR DS:[<&USER32.GetClientRect>]  USER32.GetClientRect
0040190A CALL DWORD PTR DS:[<&KERNEL32.GetThreadLocale>]   kernel32.GetThreadLocale
0040191C CALL DWORD PTR DS:[<&KERNEL32.GetLocaleInfoA>]    kernel32.GetLocaleInfoA
    还有很多,我就省略了,在这个框里右键单击,出现一个对话框,选中在每个命令中设置断点(热键是S),单击,你看每一行
都变成了红色吧,这表示全部设下断点了,后面的过程很烦燥,你要一边按F9,边按F2把一些无用的断点去掉,有一点耐心吧,
当然也可以不这样做,但遇到断点跳不过的时候,你就得按F2把这个断点去掉.
感觉在这一点上OD比不上TRW和SICE,到出现注册信息框后,你要输入注册信息,然后按确定,程序被断下来,我的序列号是:
GK342QZ0C6RE03L,我输入试验码:123456789098765.程序中断在下面:

00471F71  CALL DWORD PTR DS:[<&USER32.GetWindowTex>****按确定后回到OD程序中断在此,按F8走,在此还没有到关键处!
*****************************************************注意这里会循环两次,分别处理序列号和试验码,按F8走
00471F77  LEA ECX,DWORD PTR DS:[EAX+1]
00471F7A  PUSH ECX
00471F7B  MOV ECX,DWORD PTR SS:[EBP+10]
00471F7E  PUSH EAX
00471F7F  CALL SuperPIM.0043E15D
00471F84  PUSH EAX                                
00471F85  PUSH ESI                                
00471F86  CALL DWORD PTR DS:[<&USER32.GetWindowTex>
00471F8C  MOV ECX,DWORD PTR SS:[EBP+10]
00471F8F  PUSH -1
00471F91  CALL SuperPIM.00401D6A
00471F96  JMP SHORT SuperPIM.00471FA3
00471F98  MOV EAX,DWORD PTR SS:[EBP+10]
00471F9B  PUSH DWORD PTR DS:[EAX]                 
00471F9D  PUSH ESI                                
00471F9E  CALL SuperPIM.00470B61                 
00471FA4  POP ESI
00471FA5  POP EBP
00471FA6  RETN 0C*************************************程序第二次循环后最后会返回到0040FE99下面看代码:
----------------------------------------------------------------------------------------------------------
0040FE99  LEA EAX,DWORD PTR SS:[EBP-14]****第二次循环后会返回到这里,注意这就是我们要找的关键地方,按F8往下!
0040FE9C  PUSH EAX
0040FE9D  CALL SuperPIM.00433D92***********这就是关键CALL,按F7追进,一定要进,因为算法就在这里面!
0040FEA2  POP ECX
0040FEA3  AND DWORD PTR SS:[EBP-4],0
0040FEA7  LEA ESI,DWORD PTR DS:[EDI+74]
0040FEAA  MOV EAX,DWORD PTR DS:[ESI]******试验码入EAX
0040FEAC  CMP DWORD PTR DS:[EAX-C],0******比较试验码输入了吗?
0040FEB0  JE SHORT SuperPIM.0040FF2F******没有输入就跳走,一跳就失败!
0040FEB2  PUSH 28
0040FEB4  LEA EAX,DWORD PTR SS:[EBP-18]
0040FEB7  PUSH ESI
0040FEB8  PUSH EAX
0040FEB9  CALL SuperPIM.0042CEC8**********此CALL对输入的注册码进行处理,得到一个40位的长字符串,有兴趣自己跟,
******************************************我已是头晕的很,不想跟进!
0040FEBE  LEA ECX,DWORD PTR SS:[EBP-14]
0040FEC1  PUSH ECX
0040FEC2  PUSH EAX
0040FEC3  CALL SuperPIM.0040F9B7**********此CALL对序列号处理,也是得到一个40位的长字符串
0040FEC8  MOV ECX,DWORD PTR SS:[EBP-18]
0040FECB  ADD ESP,14
0040FECE  ADD ECX,-10
0040FED1  MOV BYTE PTR SS:[EBP-D],AL
0040FED4  CALL SuperPIM.00401B5D**********此CALL进行比较,注册码不对,值为0
0040FED9  CMP BYTE PTR SS:[EBP-D],0*******比较是0吗?
0040FEDD  JE SHORT SuperPIM.0040FF2F******相等就跳,跳就失败,所以一定不能跳!
0040FEDF  PUSH 0**************************不跳往下你就成功了!下面代码省略!
...............................................................省略若干代码!.........................
==============================================
************************************关键CALL的代码!*******************************************************

00433D92  MOV     EAX, SuperPIM.0049844E****追进关键CALL后我们来到这里!
00433D97  CALL    SuperPIM.00450900
00433D9C  PUSH    ECX
00433D9D  PUSH    ECX
00433D9E  AND     [LOCAL.5], 0
00433DA2  LEA     EAX, [LOCAL.5]
00433DA5  PUSH    EAX
00433DA6  CALL    SuperPIM.00433CA9********此CALL根据电脑硬件信息得到你的序列号,有兴趣跟吧!我是没有兴趣!
00433DAB  AND     [LOCAL.1], 0
00433DAF  PUSH    14
00433DB1  LEA     EAX, [LOCAL.5]
00433DB4  PUSH    EAX
00433DB5  LEA     EAX, [LOCAL.4]
00433DB8  PUSH    EAX
00433DB9  CALL    SuperPIM.0042CEC8*******算法CALL(1),按F7跟进!
00433DBE  PUSH    28
00433DC0  LEA     EAX, [LOCAL.4]
00433DC3  PUSH    EAX
00433DC4  PUSH    [ARG.1]                         
00433DC7  MOV     BYTE PTR SS:[EBP-4], 1
00433DCB  CALL    SuperPIM.0042CEC8
00433DD0  MOV &nb

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网