OD介绍以及使用

OD介绍以及使用
foresta.yangOllyDbg是一个32位
的动态调试器,在平常做逆向的题中用的比较多,下面用bugku一个简单的例子Eazy-Re来介绍一下OllyDbg的使用。
首先打开程序,看一下是干什么的,他提示你输入flag,这里我随便输入几个字母,提示我不正确。
我们用OD打开程序,会看到下面的这个样子,如果没接触过OD的人可能直接被劝退了,这是啥乱七八糟的,别急,一点点来看,打开程序后会出现5个面板(我更喜欢称之为窗口),分别是反汇编窗口,信息窗口,寄存器窗口,数据窗口,栈窗口。
-
反汇编窗口
反汇编窗口显示被调试程序的代码,总共有4列,分别是地址,十六进制的机器码,反汇编代码和注释。在最后一列注释中显示了相关API参数或运行简表,非常有用。
在反汇编窗口的列中,默认情况下,双击可以完成如下操作: -
- 地址列:显示被双击行地址的相对地址,再次双击返回标准地址模式
- 十六进制机器码列:设置或取消断点,对应的快捷键是
F2
- 反汇编代码列:调用汇编器,可以直接修改汇编代码,对应的快捷键是
空格键
。 - 注释列:允许增加或编辑注释,对应的快捷键是
;
。
-
信息窗口
在进行动态跟踪时,信息窗口将显示与指令相关的各寄存器的值、API函数调用提示和跳转提示等信息。 -
数据窗口
数据窗口以十六进制和字符方式显示文件在内存中的数据。要查看指定位置的数据,可以使用快捷键Ctrl+G,输入地址,进行跳转。 -
寄存器窗口
寄存器窗口显示CPU各寄存器的值,支持浮点、MMX和3DNow!寄存器。可以单击右键或窗口标题切换显示寄存器的方式。 -
栈窗口
栈窗口显示栈的内容,即ESP指向地址的内容。栈窗口非常重要,各API函数和子程序都利用它传递参数和变量等。
介绍完各个窗口后开始进行分析这道题,在一开始运行这个程序的时候,他有一些提示字符,忘记的可以翻回去看看,我们在反汇编窗口的空白处右击-->中文搜索引擎-->搜索ASCII
,可以查看程序中出现的字符,然后Ctrl+F
搜索你之前看到的提示字符(或者部分提示字符),比如这里我搜的是’flag’,就找到了提示字符的部分,然后上下翻一翻有什么其他值得注意的字符,就看到了真正的flag,这道题到这里就结束了,但是为了介绍OD的使用,我们继续往下分析。
我们假设没看到flag,但我们看到了关于正确或者错误的提示,比如我们一开始随便输入了几个a,提示的是“flag不太对……”,我们双击跟进去,找到对应反汇编代码的位置。
可以看到,提示正确和错误的位置距离不远,并且可以看到一个有一个jnz
判断,跳转到提示错误的地方(在十六进制列有一个红色的箭头)。我们在这个判断下个断点,快捷键F2
。
然后运行程序,注意刚才我们只是打开了一个程序,也就是加载了程序,并没有运行它,可以看到左上角有个黄底红字提示我们是暂停状态。我们可以通过调试->运行
或者快捷键F9
来运行程序,也可以用快捷图标(那个红色的三角)来运行。
注意看,左上角已经变成运行了,而且程序给出正常提示,如果想让光标回到当前EIP所指向的语句,双击右边寄存器窗口中的EIP
就可以了。
我们还是输入一下有特征的字符串,方便我们跟踪,比如还是几个a,然后回车,发现程序到达我们的断点了。
首先可以看到信息栏提示跳转已实现,依旧是说我们的输入错了,然后看右边寄存器发现了真正的flag,为什么,因为比较的时候会将你输入的字符串和真正的flag放在寄存器中。
我们把断点下在前面一点的位置,比如0x47105F
这个地址。然后重新运行程序,快捷键Ctrl+F2
,或者点快捷图标,X左边的那个双三角。重新输入aaaaaaa,回车,程序运行到断点位置。然后F8
单步执行。
根据信息窗口我们知道他把我们输入的字符串地址放在了eax
寄存器中,继续单步执行
可以看到寄存器窗口已经有了我们的输入,同理,下面的命令是把真正的flag地址放入ecx
中,然后进行一些比较。
下面是一些常用快捷键的总结:
使用OD分析程序的一般步骤:找特殊字符串或者API,下断点,运行,跟踪调试。当然如果对汇编不熟悉的话可能分析很费劲,可以与静态分析工具IDA pro一起结合使用。IDA pro的使用介绍可以参考通过一个例子来介绍IDA的简单使用