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的简单使用相关推荐

  1. C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介...

    委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见 ...

  2. 通过一个例子介绍 IDA pro 的简单使用

    From:通过一个例子介绍IDA pro的简单使用 - 知乎 IDA pro 7.6 绿色便携版:http://www.ddooo.com/softdown/215615.htm 配置IDA使用Ana ...

  3. Jena的简单理解和一个例子

    本文简单介绍Jena(Jena 2.4),使用Protégé 3.1(不是最新版本)创建一个简单的生物(Creature)本体,然后参照Jena文档中的一个例子对本体进行简单的处理,输出本体中的Cla ...

  4. 趣味python教程_Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

    原标题:Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python, ...

  5. 小程序工程化实践(上篇)-- 手把手教你撸一个小程序 webpack 插件,一个例子带你熟悉 webpack 工作流程...

    本文基于 webpack 4 和 babel 7,Mac OS,VS Code 小程序开发现状: 小程序开发者工具不好用,官方对 npm 的支持有限,缺少对 webpack, babel 等前端常用工 ...

  6. 基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子

    这是 Jerry 2021 年的第 61 篇文章,也是汪子熙公众号总共第 338 篇原创文章. 短歌行 曹操 对酒当歌,人生几何! 譬如朝露,去日苦多. 慨当以慷,忧思难忘. 何以解忧?唯有杜康. 青 ...

  7. [机器学习]一个例子完美解释朴素贝叶斯分类器

    何为"朴素":属性条件独立性假设 如果已知条件不止一个属性,二是多个呢,这个时候贝叶斯公式可以写作 上述公式假设特征属性 a1,a2⋯ 相互独立,这也是"朴素" ...

  8. 一个iOS 框架介绍:MKNetworkKit

    2019独角兽企业重金招聘Python工程师标准>>> ASIHTTPRequest (作者:BenCopsey) 是一个使用简单,可用于各种从简单到复杂的 HTTP 请求,或者可用 ...

  9. linux2.6.28内核对bio完成通知的改进--集中走向分离的另一个例子

    本文介绍一个例子,linux软中断是谁触发谁执行,这有点各司其职的意思,可是到了触发软中断的时候往往已经丢失触发这个"触发软中断"事件的源头,因此这种各司其职不是那么完善,于是2. ...

最新文章

  1. 贪心、递归、递推以及动态规划算法的分析与对比
  2. 使用windows调用Linux远程桌面
  3. 音频处理四:(音频的分帧)
  4. 吴恩达家免费NLP课程上线啦!
  5. VMware Data Recovery备份恢复vmware虚拟机
  6. 《那些年啊,那些事——一个程序员的奋斗史》——61
  7. java或异运算_java中与运算,或运算,异或运算,取反运算
  8. oracle左连接数据会对不上吗,一周工作总结–左连接造成的一些问题-Oracle
  9. 【原创】为什么 Redis 重启后没有正确恢复之前的内存数据
  10. 昆仑通态9针通讯口定义_昆仑通态触摸屏与常见PLC的连接方法(3)——OmronHostLink...
  11. 手机计算机的冷知识,重度手机控也未必知道的冷知识!现在智能手机都一个样?...
  12. java学习4-Maven的发布war并部署到tomcat
  13. oracle数据库中sql语句性能提升之to_char改造
  14. 看漫画学python 电子书_看漫画学Python电子版(mobi azw3 epub)
  15. (转)DB2下载地址总结
  16. 插入新题注变乱了_Word 自动更改题注章节编号格式“图一.1”为“图1.1”
  17. 如何使用chevereto自建图床
  18. gcj编译java_GCJ编译java程序的头痛问题
  19. [工业互联-6]:PLC工业控制系统快速概览
  20. Python 基于 uiautomator2 实现《全民开喵铺》自动收币,自动签到,自动浏览得喵币

热门文章

  1. 美专家起诉欧洲对撞机可能撞出黑洞毁灭地球
  2. Java中Type接口与Class类的区别联系
  3. 年份必须是4位数 C语言,输入年份(四位数),判断是否是闰年 C语言编程
  4. Dropwizard 开发环境搭建
  5. 2021 年最新的个人录制的前后端真正的免费编程学习视频
  6. 技术名词解释——Camus
  7. vue实例的生命周期详解
  8. 人工智能无法替代的几个职业
  9. ThoughtWorks-2021上半年,请24期技术雷达正式发布!
  10. 35 个非常实用的 Shell 拿来就用脚本实例!