前言:
在软件的开发过程中程序员会使用―些调试工具,以便高效地找出软件中存在的错误。而在逆向分析领域,分析者也会利用调试工具来分析软件的行为并验证分析结果。对于有源代码的程序,我们使用Visual Studio2019进行调试,它可以将C++源码反汇编;对于无源码的程序,我们使用OllyDbg进行调试分析,它的调试功能十分强大。
OllyDbg的默认功能界面如下图所示。
1:汇编代码对应的地址窗口。
2:汇编代码对应的十六进制机器码窗口。
3:反汇编窗口。
4:反汇编代码对应的注释信息窗口。
5:寄存器信息窗口。
6:当前执行到的反汇编代码的信息窗口。
7:数据窗口,数据所在的内存地址。
8:数据窗口,数据的十六进制编码信息。
9:数据窗口,数据对应的ASCII 码信息。
10:栈窗口,栈地址。
11:栈窗口,栈地址中存放的数据。
12:栈窗口,对应的说明信息。
基本快捷键及其功能:
熟悉各个窗口后,来试试OD的操作方法,通过实际操作演练,将窗口标题“Hello world ”改为”I Like C.“
1.加载可执行程序
方法:使用快捷键F3选择要调试程序的路径。
在菜单选项中(“文件”→“打开”)选择调试程序路径。
将OllyDbg加入系统资源管理菜单中,鼠标右键“打开”
依次选择OllyDbg菜单“选项”→“添加到浏览器"→“添加OllyDbg到系统资源管理菜单”→“完成”,即可将OllyDbg加人系统资源管理菜单中,如下图所示。
在上图中,代码运行到地址0x00D71801处,对应反汇编指令PUSH 0,此汇编指令对应的机器码为6A00(汇编指令对应的机器码可查询Intel 的指令帮助手册)。在OllyDbg的注释窗口中,已经分析出此汇编指令的含义:OllyDbg根据CALL 指令的地址,得知这个函数的首地址API MessageBoxA的首地址,进而进行分析对应的参数个数是4个和对应的参数功能
2.查看API MessageBoxA的各个参数的功能
MessageBoxA各参数的功能,找到弹出对话框的标题参数(地址D71801),此参数保存了字符串“Hello world”的首地址。
3.定位数据
双击地址D71801的汇编代码PUSH XXX复制地址,使用快捷键CTRL+G,输入查询地址00D77B30点”确定“快速定位到该地址处
4.修改数据
找到需要修改数据的地址的HEX数据,在下图1中,地址00D77B30对应的十六进制数据为0X48。双击HEX数据窗口中”48“处,弹出对应的编辑数据对话框,如下图2所示
图1
图2
去掉“保持大小”的勾选,可向后修改数据。在ASCII文本编辑框中,输入“I Like C.”,由于C\C++中字符串以00结尾,需要将字符串最末尾的数据修改为00。选择十六进制编码文本框,在末尾处插入00。单击“确定”按钮,完成对字符串的修改。
5.调试程序
使用快捷键F8单步调试运行,连续按4次F8键,单步运行4条汇编指令,观察栈窗口变化,。函数 MessageBoxA所需参数都已被保存在栈中。按快捷键F7可跟进到函数MessageBoxA 的实现代码中,这个API为一个间接调用,须再次按快捷键F7,程序运行到函数MessageBoxA 的首地址处。MessageBoxA 的实现代码较多,不适合初学者话框,学习,使用快捷键Alt+F9返回到用户代码处,MessageBoxA运行结束,弹出运行结果对查看是否修改成功。
如上图所示修改成功!!!!