逆向动态调试之Ollydbg的使用

动态分析技术中最重要的工具是调试器,分为用户模式和内核模式两种类型。用户模式调试器是指用来调试用户模式应用程序的调试器,它们工作在Ring 3级,如OllyDbg、Visual C++等编译器自带的调试器。

OllyDbg简称OD,是一款具有可视化界面的用户模式调试器,结合了动态调试和静态分析,具有强大的反汇编引擎,能够识别数千个被C和Windows所使用的函数,并能将其参数注释出,能自动分析函数过程,循环语句,代码中的字符串等,非常容易上手,并且对异常的跟踪处理相当灵活,这些特性使得OllyDbg成为调试ring3级程序的首选工具,爱好者不断地修改,扩充OllyDbg,脚本执行能力和开发插件接口使得其变得越来越强大。

下面是OD的界面:

image.png

我们先对它的重要部分进行编号,然后详细介绍,

image.png

(1)首先我们介绍一下第一部分:

也就是这一部分:

image.png

使用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函数调用提示和跳转提示信息。

image.png


(5)堆栈面板窗口。

       显示了堆栈的内容,即ESP指向地址的内容,堆栈窗口非常重要,各API函数和子程序等都利用它传递参数和变量等。

image.png


(6)数据面板窗口。

       以十六进制和字符方式显示文件在内存中的数据,要显示数据可点击鼠标右键“go to expression”命令或按“Ctrl+G”键打开地址窗口,输入地址。

image.png


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函数的定义,还要弄明白那些汇编程序代码的具体含义。


本期就介绍到这里了,下一期我们开始讲解实战部分。

4

发表评论

已有 3 条评论

取消
Loading...

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php