OD(OllyDbg)和IDA Pro这两款工具分别是调试逆向的两款重要工具。虽然两者都兼容动态和静态的调试方式,但就动态调试而言,OD更为灵活和强大,而静态调试工具的王者理所应当是功能极为强大的IDA Pro。
建议下载地址 https://down.52pojie.cn/Tools/Debuggers/
反汇编窗口
显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。
寄存器窗口
显示当前所选线程的 CPU 寄存器内容。同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式。
信息窗口
显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。
数据窗口
显示内存或文件的内容。右键菜单可用于切换显示方式。
堆栈窗口
显示当前线程的堆栈。
菜单窗口
顾名思义,一些命令以及操作、显示等都在这里。
命令行窗口
用来下断点等相关命令。
od开始调试方法一般有2种:
1.直接文件–打开(F3),进行调试
2.文件-附加 ,进行调试,附加必须是已经运行的程序才可以。
F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点。
F8:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。
F7:单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。
F9:运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。
F4:运行到选定位置。作用就是直接运行到光标所在位置处暂停。
CTR+F9:执行到返回。此命令在执行到一个 ret (返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空。
ALT+F9:执行到用户代码。可用于从系统领空快速返回到我们调试的程序领空。
上面提到的几个快捷键对于一般的调试基本上已够用了。要开始调试只需设置好断点,找到你感兴趣的代码段再按 F8 或 F7 键来一条条分析指令功能就可以了
现在有一个 CRACKME.EXE 程序,将其打开出现如下
关闭EXE文件
在命令行输入
bp MessageBoxA
bp即breakpoint缩写
F9运行
.exe文件运行
再次随意输入
在堆栈区—>选中------>右键---->反汇编 ,找到该函数的反汇编代码
可以判断出[0040 1362]处为判断调用什么函数的入口
在 [0040 1362]处下断点,并禁掉原先的断点
再次运行程序
查看堆栈窗口,反汇编跟随(单步步入)
通过分析反汇编代码,发现程序做了一个比较[0040 1241] 和 je跳转[0040 1243]
此时程序运行到了此行
0040124A jmp short CRACKME.004011E6
可以判断出
00401245 call CRACKME.00401362 调用的是输入错误的函数
而
0040124C call CRACKME.0040134D 调用的才是我们想要的函数
1、如果修改ZF的值,那么就可以使程序可以跳转到第二个call中
2、我们可以在在[0040 1243] 处打断点,待到运行到此处时,修改ZF的值