首页 > 代码库 > OllyDbg 使用笔记 (四)

OllyDbg 使用笔记 (四)

OllyDbg 使用笔记 (四)


参考

书:《加密与解密》

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


RegisterMe程序下载地址:http://pan.baidu.com/s/1gd3l4XH


这个RegisterMe程序,运行前和运行后都会有neg窗口。破解目标,去除这个两个窗口。



用OD直接打开这个程序,我们会发现出错。也可能OD会卡死。


因为这个程序的PE文件被故意修改了。


我们先到 选项---> 调试设置 --> 事件 --> 选择系统断点。


图片1



这样用OD打开就不会卡死。



按 alt + M 来到 memory界面,你可以看到“PE文件头”。注意是地址00开头的,如果是7xx看到的,那些PE文件头是dll的。


图片2




但这个PE文件头 大小是5000,一般情况是1000。所以肯定有问题,双击它,查看PE文件头。



来到PE文件头,我们可以看到有很多地方数字被故意设置的很大,所以我们会调试出错。


图片3



SizeOfCode = 40000400 太大了,选中右键点击修改整数,改成400。

SizeOfInitializedData = http://www.mamicode.com/40000A00 也太大了,改成A00

BaseOfCode = 40001000 也太大了,一般都是1000,改成1000 。

BaseOfData = http://www.mamicode.com/40002000 也太大了,改成2000

NumberOfRvaAndSizes = 40000004 也太大了,这个值一般都是10

这个程序没有输出,没有输出表,所以

Export Table address = 500000  改成 0

Export Table size = 50000 改成 0


改好后,在这个页面我们是保存不了的,记住我们修改的地方是从 00400DC 开始到0040013C。

按Ctrl+C 切换到CPU窗口,在数据面板按Ctrl+G 输入00400DC,选中我们修改的地方 右键 复制到可执行文件,在弹出的窗口中右键选择  备份-->保存数据到文件即可



在调试选项中把设置第一次暂停 改回 WinMAin。再用OD打开修改后的程序,运行就正常了。


要去掉这个程序的两个neg窗口方法有好多种:


第一种:


直接把弹出窗口的全代码改成nop。方法是选中代码,右键-->二进制-->用nop填充,即可


第二种:

看MessageBox的函数说明,第一个参数hWnd,表示MessageBox的父窗口。


int MessageBox(

    HWND hWnd,	// handle of owner window
    LPCTSTR lpText,	// address of text in message box
    LPCTSTR lpCaption,	// address of title of message box  
    UINT uType 	// style of message box
   );

我们可以把这个参数改成一个非法的句柄,让MessageBox运行出错。例如

我们可以把下面代码中的push 0 改成 push 1,MessageBox就不会显示了

00401039  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
0040103B  |.  68 7D304000   push    0040307D                         ; |Title = "Register Me"
00401040  |.  68 89304000   push    00403089                         ; |Text = "Oops! I am not registered !!"
00401045  |.  6A 00         push    0                                ; |hOwner = NULL
00401047  |.  E8 9E010000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA