通过一个例子来介绍OD的简单使用
OllyDbg是一个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
中,然后进行一些比较。
下面是一些常用快捷键的总结:
快捷键 | 功能 |
---|---|
F2 | 设置或取消无条件断点 |
Ctrl+G | 显示指定内存地址的数据 |
F7 | 单步步进,遇到call指令跟进 |
Ctrl+F7 | 重复按F7,指定按ESC、F12或者遇到其他断点时停止 |
F8 | 单步步过,遇到call指令路过,不跟进 |
Ctrl+F8 | 重复按F8,指定按ESC、F12或者遇到其他断点时停止 |
Ctrl+F9 | 直到出现ret指令时中断 |
Alt+F9 | 若进入系统领空,此命令可瞬间回到应用程序领空 |
F9 | 运行程序 |
双击EIP寄存器 | 让光标回到当前EIP所指向的语句 |
-(减号) | 回看之前单步跟踪的代码 |
Alt+B | 打开断点窗口 |
F4 | 执行到当前光标所选中的指令 |
使用OD分析程序的一般步骤:找特殊字符串或者API,下断点,运行调试。当然如果对汇编不熟悉的话可能分析很费劲,可以与静态分析工具IDA pro一起结合使用。IDA pro的使用介绍可以参考通过一个例子来介绍IDA的简单使用
参考书籍:《加密与解密》
通过一个例子来介绍OD的简单使用相关推荐
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介...
委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见 ...
- 通过一个例子介绍 IDA pro 的简单使用
From:通过一个例子介绍IDA pro的简单使用 - 知乎 IDA pro 7.6 绿色便携版:http://www.ddooo.com/softdown/215615.htm 配置IDA使用Ana ...
- Jena的简单理解和一个例子
本文简单介绍Jena(Jena 2.4),使用Protégé 3.1(不是最新版本)创建一个简单的生物(Creature)本体,然后参照Jena文档中的一个例子对本体进行简单的处理,输出本体中的Cla ...
- 趣味python教程_Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...
原标题:Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python, ...
- 小程序工程化实践(上篇)-- 手把手教你撸一个小程序 webpack 插件,一个例子带你熟悉 webpack 工作流程...
本文基于 webpack 4 和 babel 7,Mac OS,VS Code 小程序开发现状: 小程序开发者工具不好用,官方对 npm 的支持有限,缺少对 webpack, babel 等前端常用工 ...
- 基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子
这是 Jerry 2021 年的第 61 篇文章,也是汪子熙公众号总共第 338 篇原创文章. 短歌行 曹操 对酒当歌,人生几何! 譬如朝露,去日苦多. 慨当以慷,忧思难忘. 何以解忧?唯有杜康. 青 ...
- [机器学习]一个例子完美解释朴素贝叶斯分类器
何为"朴素":属性条件独立性假设 如果已知条件不止一个属性,二是多个呢,这个时候贝叶斯公式可以写作 上述公式假设特征属性 a1,a2⋯ 相互独立,这也是"朴素" ...
- 一个iOS 框架介绍:MKNetworkKit
2019独角兽企业重金招聘Python工程师标准>>> ASIHTTPRequest (作者:BenCopsey) 是一个使用简单,可用于各种从简单到复杂的 HTTP 请求,或者可用 ...
- linux2.6.28内核对bio完成通知的改进--集中走向分离的另一个例子
本文介绍一个例子,linux软中断是谁触发谁执行,这有点各司其职的意思,可是到了触发软中断的时候往往已经丢失触发这个"触发软中断"事件的源头,因此这种各司其职不是那么完善,于是2. ...
最新文章
- 贪心、递归、递推以及动态规划算法的分析与对比
- 使用windows调用Linux远程桌面
- 音频处理四:(音频的分帧)
- 吴恩达家免费NLP课程上线啦!
- VMware Data Recovery备份恢复vmware虚拟机
- 《那些年啊,那些事——一个程序员的奋斗史》——61
- java或异运算_java中与运算,或运算,异或运算,取反运算
- oracle左连接数据会对不上吗,一周工作总结–左连接造成的一些问题-Oracle
- 【原创】为什么 Redis 重启后没有正确恢复之前的内存数据
- 昆仑通态9针通讯口定义_昆仑通态触摸屏与常见PLC的连接方法(3)——OmronHostLink...
- 手机计算机的冷知识,重度手机控也未必知道的冷知识!现在智能手机都一个样?...
- java学习4-Maven的发布war并部署到tomcat
- oracle数据库中sql语句性能提升之to_char改造
- 看漫画学python 电子书_看漫画学Python电子版(mobi azw3 epub)
- (转)DB2下载地址总结
- 插入新题注变乱了_Word 自动更改题注章节编号格式“图一.1”为“图1.1”
- 如何使用chevereto自建图床
- gcj编译java_GCJ编译java程序的头痛问题
- [工业互联-6]:PLC工业控制系统快速概览
- Python 基于 uiautomator2 实现《全民开喵铺》自动收币,自动签到,自动浏览得喵币