OllyDebug,简称OD,一种反汇编软件,动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3 级的调试器。OllyDebug的使用界面是可视化操作。
OD有很多民间的版本,菜单栏和和工具栏的配置可能有所差别。比较好用的是吾爱破解和吾爱汇编的中文Ollydbg版本。
深入学习OllyDBG的调试技巧可以看《加密与解密》一书
真正的技术是练习得来的,工具本身的操作并没有多么神秘,常用核心操作很少,使用工具进行实战调试和积累各种正向工程的知识最重要
OD的基本使用不需要有任何基础知识,但是进行调试分析需要有一定的汇编语言基础
热闹中著一冷眼,便省去许多苦心思;冷落处存一热心,便得许多真趣味。
——洪应明
目录
1.光标可以点在任何一行汇编代码,双击EIP寄存器的值,可以回到当前动态调试执行的代码的地址,EIP寄存器的值是不能直接修改的
Ollydbg简介
在逆向分析领域,分析者会利用相关的调试工具来分析软件的行为并验证分析结果
动态分析是随着程序运行,随时中断目标的指令流程
在某些场合不适合运行目标进行动态调试(例如病毒)
静态调试的王者是IDA pro (也可以动态调试)
动态分析的工具就是OD(Ollydbg)
IDA pro和OD是逆向工程中的倚天剑和屠龙刀
壮士愤,雄风生。
安得倚天剑,跨海斩长鲸。
——《临江王节士歌》
此外,还有x64dbg,x64dbg有自己的官方网站,OD非官方的民间修改版本比较流行
x64dbg可以调试64位程序,x32dbg可以调试32位程序,OD只有一个版本,只能调试32位程序
所以在面对64位文件的时候,我们需要使用X64dbg,不能使用OD
逆向工程必备的调试工具有:
- IDA pro
- Ollydbg
- x64dbg

Ollydbg历史
OllyDbg(以其作者Oleh Yuschuk的名字命名)是一个用于直接分析二进制程序的x86调试器,通常应用于找不到源代码的程序的调试。它会跟踪寄存器、过程、API、I/O、表格、常量以及字符串等。它具有友好的GUI,并且可以通过安装第三方插件来扩展它的功能。其1.x版本在1.10开发完毕后终止。
2.0版本于2010年6月发布,该版本并没有延续1.x版本的代码,而是转而重写。尽管OllyDbg到现在为止还不支持反汇编x64处理器编译的二进制文件,但开发人员已经承诺将在以后的版本中支持调试x64处理器的程序。

开发者Oleh Yuschuk
OD界面介绍
脑补一下你想象中的hacker界面
可能是有很多的窗口
或者是影视中常见的字符串雨
这些画面看起来十分炫酷,显示中的hacker工作也需要在大量的数据中进行检索,找到自己需要的关键data或code
我们来看一下OD的界面
OD界面

这是一个英文版的Ollydbg
如图,由5个窗口构成
反汇编窗口显示汇编语言指令
可以使用快捷键单步执行汇编指令
寄存器窗口会显示当前寄存器的值
数据窗口显示当前程序的十六进制表示
反汇编窗口

如图是反汇编窗口的三栏内容
- 地址为虚拟地址,不同系统环境下这个值一般相同
- 机器码,CPU执行的机器码
- 这行机器码所对应的汇编代码,我们知道汇编代码和机器码是一一对应的关系
- 寄存器窗口
寄存器窗口

如图所示,寄存器窗口显示了当前程序执行状态的寄存器的值
就是程序动态调试到这一步时,寄存器中存储的值
信息窗口

会显示程序的一些信息

上图是一款中文版OD的信息窗口
基本操作
我们知道操作一个软件,可以使用菜单栏,工具栏
同时常用操作都有对应的快捷键,效果和菜单栏相同
下面是OD的基本操作和对应的快捷键
| 快捷键 | 操作 |
|---|---|
| F2 | 下断点,指定断点的地址 |
| F3 | 加载一个可执行程序,进行调试分析 |
| F4 | 程序执行到光标位置 |
| F5 | 缩小,还原当前窗口 |
| F7 | 单步步入(执行一个汇编指令,遇到过程调用会进入) |
| F8 | 单步步过(执行一个汇编指令,遇到过程调用会跳过) |
| F9 | 直接运行程序,遇到断点处,程序暂停 |
| Ctrl+F2 | 重新运行程序到起始处,一般用于重新调试程序 |
| Ctrl+F9 | 执行到函数返回处,用于快速跳出函数 |
| Alt+F9 | 执行到用户代码处,用于快速跳出系统函数 |
| Ctrl+G | 输入十六进制地址,快速定位到该地址处 |
| ALT+B | 显示断点编辑器对话框 |
| ; | 添加注释 |
更多详细操作见帮助文档,没必要掌握
基本操作部分演示视频
OD基操演示
在bilibili内观看更清晰
两种断点
动态调试就是让程序运行起来调试,可以一步一步执行代码调试
我们在动态调试的时候,需要打断点,让程序在需要分析的地方停下来
Ollydbg中有两种类型的断点
INT3断点
OD中使用F2快捷键设置的断点就是INT3断点
打INT3断点的时候,断点处就会被CCh(INT3指令的机器码)替换
在Ollydbg中的使用
在指令处右击,按照以下方式选择

好处
可以设置无数个断点
坏处
改变了原程序的指令
为了防止API被下断点,就会判断API的首地址是不是CCh
取函数的第一个字节,进行判断,是否下了断点
硬件断点
硬件断点和DRx调试器有很大关系
从Intel CPU体系架构中可以找到DRx的介绍
原理
使用4个调试寄存器 DR0,DR1,DR2,DR3,设置地址
使用一个寄存器DR7设定状态
最多设置4个硬件断点
优点
速度比较快,在INT3断点容易被发现的地方使用硬件断点
缺点
最多只有三个断点
在Ollydbg中的使用

程序领空和系统领空
程序领空
概念
执行用户编写的程序代码的领空








945

被折叠的 条评论
为什么被折叠?



