您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

作者前文介绍了微软证书漏洞CVE-2020-0601,并讲解ECC算法、Windows验证机制,复现可执行文件签名证书的例子。这篇文章将详细讲解逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe案例分析。 这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了B站漏洞银行、安全网站和参考文献中的文章(详见参考文献),并结合自己的经验和实践进行撰写,在此感谢这些大佬们。

文章目录

  • 一.OllyDbg界面介绍和配置
  • 二.常用快捷键
  • 三.OllyDbg动态爆破软件演示
  • 四.总结

从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

  • 推荐前文:网络安全自学篇系列-100篇

作者的github资源:

  • 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
  • 网络安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study

前文分析:

  • [系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向
  • [系统安全] 二.如何学好逆向分析及吕布传游戏逆向案例
  • [系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战
  • [系统安全] 四.OllyDbg动态分析工具基础用法及Crakeme逆向
  • [系统安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏
  • [系统安全] 六.逆向分析之条件语句和循环语句源码还原及流程控制
  • [系统安全] 七.逆向分析之PE病毒原理、C++实现文件加解密及OllyDbg逆向
  • [系统安全] 八.Windows漏洞利用之CVE-2019-0708复现及蓝屏攻击
  • [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度提权
  • [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现
  • [系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析
  • [系统安全] 十二.熊猫烧香病毒IDA和OD逆向分析(上)病毒初始化
  • [系统安全] 十三.熊猫烧香病毒IDA和OD逆向分析(中)病毒释放机理
  • [系统安全] 十四.熊猫烧香病毒IDA和OD逆向分析–病毒释放过程(下)
  • [系统安全] 十五.Chrome浏览器保留密码功能渗透解析、蓝屏漏洞及某音乐软件漏洞复现
  • [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)
  • [系统安全] 十七.Windows PE病毒概念、分类及感染方式详解
  • [系统安全] 十八.病毒攻防机理及WinRAR恶意劫持漏洞(脚本病毒、自启动、定时关机、蓝屏攻击)
  • [系统安全] 十九.宏病毒之入门基础、防御措施、自发邮件及APT28宏样本分析
  • [系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解
  • [系统安全] 二十一.PE数字签名之(中)Signcode、PEView、010Editor、Asn1View工具用法
  • [系统安全] 二十二.PE数字签名之(下)微软证书漏洞CVE-2020-0601复现及Windows验证机制分析
  • [系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)


一.OllyDbg界面介绍和配置

OllyDbg是一个动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,是当今最为流行的调试解密工具之一。它还支持插件扩展功能,是目前最强大的调试工具之一。

OD和IDA可以说是逆向分析的“倚天”和“屠龙”,一个动态分析,一个静态分析。

该系列文章参考B站漏洞“游戏逆向交流”大佬的视频,主要内容包括:

  • OllyDbg界面介绍和配置
  • 常用快捷键
  • OllyDbg基本操作
  • 常用断点INT 3断点原理解析
  • INT 3断点的反调试与反反调试
  • 常用断点之硬件断点原理解析
  • 常用断点之内存断点原理解析
  • 常用断点之消息断点原理解析
  • 常用断点之条件断点原理解析
  • 内存访问一次性断点和条件记录断点
  • 插件
  • Run trace 和Hit trace
  • 调试符号
  • OllyDbg的常见问题

推荐大家学习,参考网址:https://www.bilibili.com/video/BV1cE411f7sE

OllyDbg是逆向分析常用的调试工具,打开主界面如下图所示,包括反汇编窗口、寄存器窗口、信息窗口、数据窗口、堆栈窗口。

  • 常见动态调试工具:OllyDbg、WinDbg、x64Dbg
  • 常用静态调试工具:IDA

如果我们打开的界面很乱像下图一样,可以点击顶部快捷键C,然后主窗口最大化即可优化布局。

接着随便打开一个EXE程序,显示如下图所示:

下面先讲解各个窗口的含义:

  • 反汇编窗口: 显示被调试程序的反汇编代码,包括地址、HEX数据、反汇编、注释
  • 寄存器窗口: 显示当前所选线程的CPU寄存器内容,点击标签可切换显示寄存器的方式
  • 信息窗口: 显示反汇编窗口中选中的第一个命令的参数及跳转目标地址、字符等
  • 数据窗口: 显示内存或文件的内容,右键菜单可切换显示方式
  • 堆栈窗口: 显示当前线程的堆栈,记录传递的参数或局部变量
  • 子窗口的快捷方式

接着补充界面选项知识点,点击 “选项” -> “界面”,设置UDD路径和插件路径。

UDD路径用于保存我们调试的信息。

插件路径包含了各种插件,并且可以直接使用。

如果你想选中一个EXE文件,右键直接能够用OllyDbg打开,怎么设置呢?

点击 “选项” -> “添加到浏览器”,添加OllyDbg到系统资源管理器菜单。

如果我们每次运行OD都提示管理员权限运行,则可以进行快捷键简单的设置。

设置方式如下:兼容性中选择“以管理员身份运行此程序”。


二.常用快捷键

下面简单讲解常用的快捷键调试方式。

F2:设置断点
设置断点,只要在光标定位的位置按下F2键即可,再按一次F2键会删除断点。如下图所示的红色位置,程序运行到此处会暂停。

F9:运行
按下F9键运行程序,如果没有设置相应的断点,被调试的程序直接开始运行。

F8:单步步过
单步步过,每按一次这个按键,将执行反汇编窗口中的一条指令,遇到CALL等子程序不进入其代码。

F7:单步步入
单步步入,功能通单步步过(F8)类似,区别是遇到CALL等子程序时会进入其中,进入后首先停留在子程序的第一条指令上。如下图进入CALL子程序。

CALL表示进入函数,RETN表示返回。

F4:运行到选定位置
运行到选定位置,作用就是直接运行到光标所在位置处暂停。比如光标在0x00401034位置,我们接着从0x00401027运行,这会直接跳转到光标处。当我们调试过程中遇到循环,可以调至光标跳过循环。

CTRL+F9:执行到返回
执行到返回,按下此键会执行到一个返回指令时暂停,常用于从系统领空返回到我们调试的程序领空。在调试程序时,按下CTRL+F9会一直运行程序,直到一个RETURN返回,比如我们进入下图所示的子程序,会运行至RETN 10。

再在RETN 10位置按下F8,则会返回如下图所示的位置,执行完CALL函数进入下一句。

CTRL+F2:重新开始
当程序想重新调试时,按下CTRL+F2即可。

ALT+F9:执行到用户代码
执行到用户代码,从系统领空快速返回我们调试的程序领空。


三.OllyDbg动态爆破软件演示

下面以《加密与解密》的“TraceMe.exe”程序为例。程序下载地址:

  • https://github.com/eastmountyxz/Reverse-Analysis-Case

当我们输入错误的用户名和序列号,点击“Check”按钮会显示输入错误。

接下来我们需要用OD爆破,该程序的基本流程如下图所示,只有输入正确的用户名和序列号才能显示正确对话框。

接着通过OD打开该程序,它会自动定位到模块入口点0x004013A0位置。作者github资源提供了各种OD版本供读者使用。

第一步,首先按下F9程序就会运行起来,并且弹出对话框

第二步,我们需要知道输入对话框输入值的函数都有哪些
点击 “API断点设置工具” -> “常用断点设置”。

勾选获取对话框的输入值的两个函数“GetWindowTextA”和“GetDlgItemTextA”,这意味着给这两个函数下断点,当程序运行到某个函数即会停止。如果读者不确定对应的函数,可以勾选所有的函数。

第三步,输入用户名和序列号并点击“Check”按钮
此时程序进入0x75CA4390位置,并且显示调用GetDlgItemTextA函数。

我们先按下F2将断点去掉,再按下F9执行代码,可以看到“序列号错误,再来一次!”的弹框。从而证明我们刚才的断点是有效果的。

GetDlgItemTextA的四个参数:对话框句柄,控件标识(ID号),缓冲区指针,缓冲区最大字符数,参考Win32.API手册。

接着我们再勾选“GetDlgItemTextA”函数,再点击“Check”按钮,它会继续定位到0x75CA4390位置,如下图所示。

第四步,接着按下Ctrl+F9执行到返回位置。
此时显示地址0x75CA43C1。

第五步,再按下F8键执行返回
此时我们看到了GetDlgItemTexeA函数执行的位置,它会返回调用函数的下一行代码,注意是下一行。我们程序是有两个对话框值,所以会有两个GetDlgItemTexeA函数的调用。

接着我们继续按F8往下走,这两个值获取完成,接下来应该会是计算序列的过程,再进行判断是否正确。

继续往下走,来到0x004011E4位置,我们可以看到右上角EDX和EAX的值就是我们输入的“eastmount”和“123456”。同时,右下角显示两个值都已经压到栈里面了。

  • EAX:123456
  • EDX:eastmount

第六步,访问TraceMe.00401340函数
我们可以猜测调用的“call TraceMe.00401340”函数是做判断,并添加如下注释。但也可能不是,我们在进行软件逆向分析或爆破时,通常需要依靠逻辑能力和编程能力来推测。

按下F7进入该程序,位置0x00401340。

再按F8执行,可以发现这里存在一个循环,判断输入的值是否与它原始的值一致。

循环完之后,继续执行可以看到一些序列号“123456”的判断信息。

最终它会返回一个值放到EAX中,该值等于0,然后继续执行返回该值。

返回值就是0,然后继续执行。

第七步,跳转函数分析
如果这个函数就是判断函数的话,那么下面这个跳转很可能就是关键跳转。就是我们需要修改的跳转,利用其来进行爆破。位置:0x004011F5

增加断点,接着按F8继续运行。

发现其直接跳转至0x0040122E,然后提示“序列号错误,再来一次!”。

再按下F9运行,后面果然弹出错误对话框,从而确定上面为关键跳转。

第八步,按下Ctrl+F2重新运行程序
接着按F9执行程序,在弹出的对话框中输入内容,点击“check”。

继续按下F9运行程序跳转到我们刚刚下断点的“关键跳转”位置。

关键步骤:修改汇编代码,JE是实现跳转,修改为JNZ不跳转。

继续按F8执行,或者直接按下F9,可以提示“恭喜你,成功”的对话框。这就是爆破的基本流程。

第九步,保存爆破软件
选择修改的几行内容,然后右键鼠标,点击“复制到可执行文件”。

选择“TraceMe.exe”文件右键保存文件,如“TraceMe_PO2.exe”。

保存成功后,随便输入用户名和序列号,都提示成功!

同时,该程序输入长度还有一个判断,我们也可以尝试进行爆破。

但其原理是什么呢?后续的文章我们会继续介绍。


四.总结

写到这里,这篇文章就介绍完毕,希望您喜欢~

  • OllyDbg界面介绍和配置
  • 常用快捷键
  • OllyDbg动态爆破软件演示

这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。

欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。

  • 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
  • 网络安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study

2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

(By:Eastmount 2021-02-22 中午12点写于武汉 http://blog.csdn.net/eastmount/ )


参考资料:
[1] 动态调试工具之OllyDbg(OD)教程 - B站yxfzedu
[2] [逆向笔记] OD工具使用-逆向TraceMe.exe- 17bdw随手笔记
[3]《加密与解密》段钢等著
[4]《OllyDBG入门教程》看雪学院 - CCDebuger
[5] 160个Crackme006 - 鬼手56大佬

[系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析相关推荐

  1. IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总

    IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总 ********************************** 案例一: 使用IDA PRO+OllyDbg+PEview 追踪w ...

  2. [网络安全自学篇] 七十二.逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步.前文分享了外部威胁防护和勒索病毒对抗.这篇文章将讲解逆向分析OllyDbg动态调试 ...

  3. matlab案例分析总结,MATLAB统计分析与应用:40个案例分析

    第章编程简介 1.1MATLAB工作界面布局与路径设置 1.1.1MATLAB工作界面布局 1.1.2MATLAB路径设置 1.2变量的定义与数据类型 1.2.1变量的定义与赋值 1.2.2MATLA ...

  4. 逆向路由器固件之动态调试

    原文地址:http://xdxd.love/2016/09/20/逆向路由器固件之动态调试/ 本文根据devttyS0的教程Exploiting Embedded Systems – Part 2和E ...

  5. 专科段《工商企业管理》课程复习资料(5)——案例分析题

    小编黑板青云寄语: 1.为了方便打印,答案放在了最后. 2.黑板青云已经为大家尽力校对,难免疏漏,如有疏漏请留言更正. 3.判断题见"专科段<工商企业管理>课程复习资料(1)-- ...

  6. OllyDbg动态调试与逆向破解TraceMe.exe

    文章目录 前言 OllyDbg 基础介绍 快捷操作 TraceMe 调试分析 破解校验 总结 前言 OllyDbg 是一个新的动态追踪工具,是将 IDA 与 SoftICE 结合起来的产物,Ring3 ...

  7. 安卓逆向分析中常用动态调试方法总结

    安卓逆向之----常用动态调试方法 一. 前言 逆向分析中常用的分析方法有:静态分析.动态调试.HOOK等.动态调试的好处是:1)可以在调试的过程中知道参数或者局部变量的值以及变化过程,2)可以快速履 ...

  8. 安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置

    教我兄弟学Android逆向04 动态调试smali代码:https://www.52pojie.cn/thread-658865-1-1.html From:Android Studio 3.6 调 ...

  9. c语言程序大型案例分析,C语言程序设计习题解析与应用案例分析(第2版)

    摘要: <C语言程序设计习题解析与应用案例分析(第2版)>从C语言程序设计的基本原理及程序设计的基本思想出发,贯穿"基础-应用"这一主线.<C语言程序设计习题解析 ...

最新文章

  1. b站看那个的python_用Python获取B站播放历史记录 !男友居然天天背着我看这些!...
  2. 测试工具–super-mack
  3. Android之给图片添加水印效果
  4. OpenCV学习笔记之掩码操作
  5. 【c基础】之 文件及其操作
  6. Right Here Waiting
  7. http 使用curl发起https请求 error 60 51
  8. 计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值.
  9. VC2013同一个工程生成的exe文件显示不同的图标
  10. 麦子学院3天带你学会Apple Watch开发
  11. Exadata X8发布
  12. C语言读bin文件内容
  13. excel 中出现了 1048576删不掉的解决方法
  14. 计算某个日期是一年的第几天
  15. DDPG本质:将策略网络和价值网络分开 || 经验池作用、目标网络作用、DDQN简介
  16. 的欧美HTML游戏,国外十大HTML5、JavaScript 3D游戏引擎和框架
  17. 【DP练习】月饼盒(提高版)(vijos1255)
  18. typora生成目录
  19. 二值化最佳阈值选取方法以及matlab实现
  20. 中心对称图形——平行四边形·复习整理

热门文章

  1. 大数据NoSQL技术之Couchbase Server数据库详解
  2. 使用movetable收缩表空间
  3. 实施工程师或技术支持应该熟悉的技能
  4. 使用 Apache Atlas 进行数据治理
  5. StrutsPreparedAndExcuteFilter与Interceptor
  6. [bzoj3131]淘金[sdoi2013][数位DP]
  7. 我的编程学习日志(1)--进制转换
  8. 在Java、C#和C++中遍历集合
  9. 2021巢湖第一中学高考成绩查询,2021年巢湖高中录取分数线是多少及高中排名榜...
  10. linux怎么取消文件隐藏命令,Linux基础命令:显示隐藏的文件