OllyDbg 使用笔记 (十四)

OllyDbg 使用笔记 (十四)


参考

书:《加密与解密》

视频:小甲鱼 解密系列 视频


示例程序下载地址:http://pan.baidu.com/s/1hqqYZ6c


此程序运行前会有一个nag窗口,运行结束后也有一个nag窗口。破解目的要去除这两个nag窗口。


用OD加载这个程序,按F9运行,当第一个nag窗口出现时,按下暂停。查看 堆栈调用

图片1



观察这些调用,查找产生这个nag窗口的调用,此程序是用VC6.0++写的,使用MFC,可以发现此次dialog非常关键

图片2



点击它的“调用来自”  可以看到下面代码:

图片3



在0042039A处下断点,重新运行程序。可以发现程序运行前的nag窗口,程序窗口,和程序运行后的nag窗口都是由0042039A处的

call    <jmp.&MFC42.#2514_CDialog::DoMod>产生,所以只要第一次跟第三次让程序跳过0042039A处的call    <jmp.&MFC42.#2514_CDialog::DoMod>,让第二次运行0042039A处的call    <jmp.&MFC42.#2514_CDialog::DoMod>。再仔细观察它前后的代码,可以发现je      short 004203BA 很关键,它可以跳过call    <jmp.&MFC42.#2514_CDialog::DoMod>。 我们可以把它改成一个程序对一个变量计数,当变量为1或3时跳过call    <jmp.&MFC42.#2514_CDialog::DoMod>,为2使执行call    <jmp.&MFC42.#2514_CDialog::DoMod>。


我们可以用内嵌补丁,可以在程序代码最后面找到一片空白的区域,例如这里就用00437D70。

先把je      short 004203BA 改成    jmp     00437D70 ,由于原来的代码只占2个字节,改后的代码占用5个字节,lea ecx, dword ptr [esp+4C] 会被覆盖。 在00437D70敲入代码,因为敲 的代码表多,一行一行的改没有效率,可以用NonaWrite这个插件来写代码(下载地址:http://tools.pediy.com/Debuggers/ollydbg/ollydbg1/plugin/NonaWrite/NonaWrite1.2.rar,下载后,直接解压到od目录下的plugin文件夹中),打开插件,敲入

0x00437D70:
lea ecx, dword ptr [esp+4C]
inc byte ptr  [445EE0] 
cmp byte ptr [445EE0],2
je 0042037F
jmp 004203BA


图片4



点击Assemble再点击Done(不要忘记点Done,否则运行会有问题),保存修改,即可完成破解。代码中[445EE0]被当做一个变量,相当于 i ,445EE0 这个地址是随便选的,只要是程序的数据区中空白的切不会再运行中用到的地方即可。按alt+M从内存映射表中点击 .data 即可查看数据区,在数据区后面的地方,就可以看到大片空白的地方。如果不缺定空白的地方是否会在程序运行时被使用,只要在想要用的地方下硬件写入断点,运行程序观察是否被断下即可。














郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。