首页 > 代码库 > OllyDbg 使用笔记 (十四)
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 即可查看数据区,在数据区后面的地方,就可以看到大片空白的地方。如果不缺定空白的地方是否会在程序运行时被使用,只要在想要用的地方下硬件写入断点,运行程序观察是否被断下即可。
OllyDbg 使用笔记 (十四)