图解Ollydbg简单逆向操作案例

1 Ollydbg调试helloworld程序

调试用VC++编写的helloworld程序,在反汇编代码中查找main函数,MessageBox函数;

#include "windows.h"
#include "tchar.h"

int _tmain(int argc, TCHAR * argv[])
{
	MessageBox(NULL,"Hello World!","bcbobo21cn",MB_OK);
	return 0;
}

在调试工具条上右击,选择 组建;

图解Ollydbg简单逆向操作案例_第1张图片

在弹出的 组建 对话框中,选择 Win32 Release;

图解Ollydbg简单逆向操作案例_第2张图片

把HelloWorld编译为release版本。

启动Ollydbg汉化版;启动失败;

图解Ollydbg简单逆向操作案例_第3张图片

改用英文原版;打开前面的helloworld程序;

图解Ollydbg简单逆向操作案例_第4张图片

停留在00401020处;

图解Ollydbg简单逆向操作案例_第5张图片

调试器停止的地点是EP代码,EP即入口点;再往下找找;

图解Ollydbg简单逆向操作案例_第6张图片

再往下,看到了调用GetVersion函数,GetCommandLineA函数;获取命令行参数之后,应该就到main函数了;

图解Ollydbg简单逆向操作案例_第7张图片

看到上面CALL 00401000;

查看00401000;

图解Ollydbg简单逆向操作案例_第8张图片

看到了VC程序中给出的参数;00401000处先PUSH了4个参数入栈,然后调用了USER32中的MessageBoxA;


2 捕获Windows计算器显示输入数字的动作

相关资料显示,Windows计算器显示用户输入是使用了SetWindowText函数;用PE信息查看工具打开看下;

图解Ollydbg简单逆向操作案例_第9张图片

计算器的基地址是01000000;

图解Ollydbg简单逆向操作案例_第10张图片

该工具会给出详细PE信息;

图解Ollydbg简单逆向操作案例_第11张图片

在工具条上按 I 键,才能看到PE导入表;

图解Ollydbg简单逆向操作案例_第12张图片

看到了User32中的SetWindowText;VA是进程虚拟内存的绝对地址,RVA是从某个基准位置开始的相对地址;

下面开始捕获计算器显示输入数字的动作;

打开calc.exe,停留在003D2D6C;

图解Ollydbg简单逆向操作案例_第13张图片

右击,选择如下菜单;

图解Ollydbg简单逆向操作案例_第14张图片

在所有SetWindowText处设置断点;

图解Ollydbg简单逆向操作案例_第15张图片

执行计算器,看下面代码,TranslateMessage、DispatchMessage、GetMessage;此处是计算器窗口的消息循环部分;

图解Ollydbg简单逆向操作案例_第16张图片

在计算器中输入数字,程序中断在了00BC3678处的SetWindowText;

图解Ollydbg简单逆向操作案例_第17张图片


图解Ollydbg简单逆向操作案例_第18张图片

看右下角的栈窗口,发现了输入的数字;8957;输入了4次数字;在此中断了4次;

3 捕获记事本保存文件的动作和保存的文本

打开Windows自带记事本,

图解Ollydbg简单逆向操作案例_第19张图片

不能打开;Ollydbg不支持64位程序;本机为64位;

图解Ollydbg简单逆向操作案例_第20张图片

看下本机的notepad.exe,它确实是64位的;

图解Ollydbg简单逆向操作案例_第21张图片

网上重新下一个notepad.exe;打开看看,是32位的;下面调试此程序;

图解Ollydbg简单逆向操作案例_第22张图片

根据资料;notepad.exe保存文件是调用了WriteFile,位于Kernel32中;

图解Ollydbg简单逆向操作案例_第23张图片

执行记事本,排序以后,在所有WriteFile处设置断点;

图解Ollydbg简单逆向操作案例_第24张图片

程序停留处是0100739D;

图解Ollydbg简单逆向操作案例_第25张图片

运行,记事本窗口出现;输入“AAAA”;然后保存;点击 保存 按钮后,程序中断在01004C2A处的WriteFile;

图解Ollydbg简单逆向操作案例_第26张图片


图解Ollydbg简单逆向操作案例_第27张图片

看右下角的栈窗口,发现了输入的文本“AAAA”;

你可能感兴趣的:(逆向,OllyDbg,入口点代码)