OllyDbg简称OD,是一款具有可视化界面的用户模式调试器,结合了动态调试和静态分析,具有强大的反汇编引擎,能够识别数千个被C和Windows所使用的函数,并能将其参数注释出,能自动分析函数过程,循环语句,代码中的字符串等,非常容易上手,并且对异常的跟踪处理相当灵活,这些特性使得OllyDbg成为调试ring3级程序的首选工具,爱好者不断地修改,扩充OllyDbg,脚本执行能力和开发插件接口使得其变得越来越强大。
下面是OD的界面:
我们先对它的重要部分进行编号,然后详细介绍,
(1)首先我们介绍一下第一部分:
也就是这一部分:
使用OD打开目标程序后,OD会打开多个子窗口,单击各个标签按钮可以在各个子窗口之间切换,这些按钮依次对应Log窗口,Executable modules窗口,Memory窗口,Threads窗口,Windows窗口,Handles窗口,CPU窗口,Patches窗口,Call stack窗口,Breakpoints窗口,References窗口,Run trace窗口,Source窗口。
默认的当前窗口是CPU窗口,他在OD中是最重要的窗口,调试程序的绝大部分操作都要在这个窗口进行。他包含以下5个窗口:
1.反汇编窗口
2.寄存器面板
3.信息面板
4.数据面板
5.堆栈面板
这也是我们接下来将要介绍的2,3,4,5,6部分。
(2)CPU窗口的反汇编面板,也就是我们第2个标号的部分。
反汇编面板窗口显示被调试程序的代码,它有4个列,分别是地址(address),机器码(hex dump),反汇编代码(disassembly),注释(comment)。最后一列注释栏显示相关API参数或运行简表,非常有用。
address列:显示相对被单击地址的地址,再次双击返回到标准地址模式。
hex dump列:设置或取消无条件断点,对应的快捷键是F2。
disassembly列:条用汇编器,可直接修改汇编代码。
comment列:允许增加或编辑注释,对应的快捷键是“;”键。
(3)寄存器面板窗口,也就是我们对应的第3个标号的地方.
这里显示CPU各寄存器的值,支持浮点,MMX和3DNow!寄存器,可以单击鼠标右键或单击窗口标题切换显示寄存器的方式。
(4)信息面板窗口。
动态跟踪时,显示与指令相关的各寄存器值,API函数调用提示和跳转提示信息。
(5)堆栈面板窗口。
显示了堆栈的内容,即ESP指向地址的内容,堆栈窗口非常重要,各API函数和子程序等都利用它传递参数和变量等。
(6)数据面板窗口。
以十六进制和字符方式显示文件在内存中的数据,要显示数据可点击鼠标右键“go to expression”命令或按“Ctrl+G”键打开地址窗口,输入地址。
OD常用快捷键:
F2:设置断点,只要在光标定位的位置按F2键即可,在按一次F2键则会删除断点。
F8:单步步过,每按一次这个键执行一条反汇编窗口中的一条指令,遇到call等子程序不进入其代码。
F7:单步步入:功能同单步步过(F8)类似,区别是遇到call等子程序会进入其中,进入后首先会停留在子程序的第一条指令上。
F4:运行到选定位置,作用就是直接运行到光标所在位置处暂停。
F9:运行,按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。
ctrl+F9:执行到返回,此命令在执行到一个ret(返回指令)指令时暂停,常用于从系统部分返回到我们调试的程序部分。
alt+F9:执行到用户代码,可用于从系统部分快速返回到我们调试的程序部分。
单步步入和单步步过:
F8在调试中用的很频繁,可以一句一句地单步执行汇编指令,遇到call指令不会跟进,而路过。
F7和F8功能键的主要差别就在于若遇到call,loop等指令,F8是路过,而F7是跟进去。
设置断点:
断点是调试器的一个重要功能,它能使程序中断在需要的地方,从而方便对其分析,常用的断点是INT3,其原理是ollydbg将断点处的代码设置为int3指令。
将光标移动到要设置断点的行,按F2键就可以设置了,也可以双击hex数据列。
设置断点可以让软件运行的时候停在设置断点的地方,以方便反复跟踪调试,当程序关闭时,ollydbg会将设置好的断点保存在UDD文件中,下次运行时还有效。
调试分析:
调试分析就是分析程序代码的意义,阅读这些代码时,首先要搞清楚各API函数的定义,还要弄明白那些汇编程序代码的具体含义。