一次性付费进群,长期免费索取资料。
ID:Computer-network
在逆向分析中,调试工具可以说是非常重要的。调试器能够跟踪一个进程的运行时状态,在逆向中称为动态分析工具。动态调试会用在很多方面,比如漏洞的挖掘、游戏外挂的分析、软件加密解密等方面。本文介绍应用层下最流行的调试工具OllyDbg。
OllyDbg缩写为OD,是由一款具有可视化界面的运行在应用层(或者R3)的一款32位的反汇编逆向调试分析工具。OD是所有做逆向分析者都离不开的工具。它的流行,究其原因,是操作简单、参考文档相当丰富、支持插件功能。
1.OD的版本
调试、反调试、反反调试,对于新接触调试的爱好者来说容易混淆。简单来说,反调试是阻止使用OD进行调试,而反反调试是突破反调试继续进行调试。而OD的修改版本之所以很多,就是为了能够更好地突破软件的反调试。从OD存在着众多的修改版本可以看出,软件的保护与软件的破解一直在进行着“攻”和“防”的突破当中。
因此,如果从学习的角度来讲,建议选择原版的OD进行使用。在使用的过程中,除了会掌握很多调试的技巧,也会学到很多反调试的技巧,从而掌握反反调试的技巧。而如果在实际的应用中,则可以直接使用修改版的OD,避免OD被软件反调试,从而提高逆向调试分析的速度。
2.OD主界面
OD的发行是一个压缩包,解压即可运行使用。运行OD解压目录中的ollydbg.exe程序,会出现一个分布恰当、有菜单有版面和能输入命令的一个看似强大的软件窗口,如图1所示。
图1 OD调试主界面
在图1中,工作区可以分为6部分,从左往右、从上往下,这6部分分别是反汇编窗口、信息窗口、数据窗口、寄存器窗口、栈窗口和命令窗口。下面分别介绍各个窗口的用法。
反汇编窗口:该窗口用于显示反汇编代码,调试分析程序主要就是在这个窗口中进行,这也是进行调试分析的主要工作窗口。
信息窗口:该窗口用于显示与反汇编窗口上下文相关的内存或寄存器信息。
数据窗口:该窗口用于以多种格式显示内存中的内容,可以使用的格式有Hex、文本、短型、长型、浮点和反汇编等。
寄存器窗口:该窗口用于显示各个寄存器的内容,包括前面介绍的通用寄存器、段寄存器、标志寄存器、浮点寄存器,另外,还可以在寄存器窗口中的右键菜单选择显示MMX寄存器、3DNow!寄存器和调试寄存器。
命令窗口:该窗口用于输入命令来简化调试分析的工作,该窗口并非基本窗口,而是由OD的插件提供的功能,几乎所有的OD使用者都会使用该控件,因此必须掌握该窗口的使用。
3.OD功能窗口
OD中的主窗口是OD众多窗口中的一个,主要是用来显示CPU相关内容的窗口,主窗口也被称为CPU窗口。除了CPU窗口外,OD还有功能非常多的其他窗口。可以通过菜单栏的“查看(V)”项目打开这些窗口进行使用,或者通过工具栏上的“窗口切换”工具来选择使用不同的功能窗口。工具栏的“窗口切换”如图2所示。
图2 “窗口切换”选项工具栏
(1)“内存”窗口
图3 “内存”窗口
在内存窗口中,可以用鼠标选中某个模块的节区,然后按下F2键来下断点。一旦代码访问到这个段,OD就会相应断点断下。
(2)“调用堆栈”窗口
“调用堆栈”用来显示当前代码所属函数的调用关系。“调用堆栈”窗口如图4所示。
图4 “调用堆栈”窗口
Func 01004565(){……010045CA: call 010040BA}Func 010040BA(){}
(3)“断点”窗口
“断点”窗口显示了设置的所有的软断点,如图5所示。
图5 “断点”窗口
4.常用断点的设置方法
在OD中,常用的设置断点的方法有命令法、菜单法和快捷键法。无论通过哪种方法设置断点,其实断点的类型不外乎有3种,分别是INT3断点、内存断点和硬件断点。
(1)通过命令设置断点
关于硬件断点,这里介绍4条命令,具体如下。
硬件断点最多只能设置4个,这是跟CPU相关的。可以用于设置断点的调试寄存器只有4个,分别是DR0、DR1、DR2和DR3。通过命令设置好硬件断点后,可以在菜单的“调试(D)”项中打开“硬件断点(H)”,查看设置好的硬件断点,如图6所示。
图6 硬件断点
(2)通过快捷键设置断点
通过快捷键设置断点的方法非常简单,在需要设置断点的代码行处按下F2键即可设置一个INT3断点,在设置好的INT3断点处再次按下F2键即可取消设置好的断点。
除了可以在代码处通过F2键设置断点外,还可以在内存窗口中,在指定的节上按下F2键来设置断点。这里设置的断点是一次性断点,即断点被触发后设置的断点自动被删除。
(3)通过菜单设置断点
通过菜单设置断点的方法比较简单,如图7所示。
图7 通过菜单设置断点
在菜单中可以看到设置内存断点的选项,分别是“内存访问”和“内存写入”。内存断点通常对数据部分设置断点,如果要找到某块内存中数据是由哪块代码进行处理的,通过设置内存断点可以很容易找到。
对于动态调试分析来说,合理设置断点非常重要。在OD中,有很多设置断点的方法和技巧,请大家在使用和学习的过程中慢慢学习和摸索。
5.OD调试快捷键
① F8键:单步步过,依次执行每一条代码,遇到CALL不进入,遇到REP不重复。
② F7键:单步步入,依次执行每一条代码,遇到CALL则进入,遇到REP则重复。
③ F4 键:执行到功能的代码处(前提条件是选中的代码在程序的流程中一定会被执行到)。
④ F9键:运行程序,直到遇到断点才停止。
⑤ Ctrl F9组合键:返回调用处(在Win7及更高的版本的操作系统下,该快捷键失灵了)。
⑥ Alt F9组合键:执行到函数的结尾处。
参考文献:C 黑客编程揭秘与防范(第3版)
ID:Computer-network