逆向动态调试之Ollydbg的使用

admin 2021年5月26日03:35:46评论135 views字数 1886阅读6分17秒阅读模式

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

下面是OD的界面:

逆向动态调试之Ollydbg的使用


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


逆向动态调试之Ollydbg的使用

 

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

也就是这一部分:

逆向动态调试之Ollydbg的使用


使用OD打开目标程序后,OD会打开多个子窗口,单击各个标签按钮可以在各个子窗口之间切换,这些按钮依次对应Log窗口,Executable modules窗口,Memory窗口,Threads窗口,Windows窗口,Handles窗口,CPU窗口,Patches窗口,Callstack窗口,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列:显示相对被单击地址的地址,再次双击返回到标准地址模式。

      hexdump列:设置或取消无条件断点,对应的快捷键是F2。

     disassembly列:条用汇编器,可直接修改汇编代码。

      comment列:允许增加或编辑注释,对应的快捷键是“;”键。

(3)寄存器面板窗口,也就是我们对应的第3个标号的地方.

       这里显示CPU各寄存器的值,支持浮点,MMX和3DNow!寄存器,可以单击鼠标右键或单击窗口标题切换显示寄存器的方式。

(4)信息面板窗口。

       动态跟踪时,显示与指令相关的各寄存器值,API函数调用提示和跳转提示信息。

逆向动态调试之Ollydbg的使用


(5)堆栈面板窗口。

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

逆向动态调试之Ollydbg的使用



(6)数据面板窗口。

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

逆向动态调试之Ollydbg的使用



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

 


本文始发于微信公众号(盾山实验室):逆向动态调试之Ollydbg的使用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年5月26日03:35:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   逆向动态调试之Ollydbg的使用http://cn-sec.com/archives/380751.html

发表评论

匿名网友 填写信息