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

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了外部威胁防护和勒索病毒对抗。这篇文章将讲解逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe案例分析。基础性文章,希望对您有所帮助,如果存在错误或不足之处,还望告知,加油!

作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~

PS:本文参考了B站漏洞银行、安全网站和参考文献中的文章(详见参考文献),并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献,在此感谢这些大佬们。

作者的github资源:
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其他工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
逆向分析:https://github.com/eastmountyxz/Reverse-Analysis-Case


声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。

前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通信(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防御初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防御原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防御原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(三)
[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
[网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
[网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
[网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
[网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
[网络安全自学篇] 三十七.Web渗透提高班之hack the box在线靶场注册及入门知识(一)
[网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
[网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
[网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
[网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
[网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
[网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
[网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制作(自启动、修改密码、定时关机、蓝屏、进程关闭)
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客常用DOS命令
[网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取
[网络安全自学篇] 五十五.Windows漏洞利用之构建ROP链绕过DEP并获取Shell
[网络安全自学篇] 五十六.i春秋老师分享小白渗透之路及Web渗透技术总结
[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
[网络安全自学篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反弹shell
[网络安全自学篇] 五十九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及shell深度提权
[网络安全自学篇] 六十.Cracer第八期——(2)五万字总结Linux基础知识和常用渗透命令
[网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
[网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
[网络安全自学篇] 六十三.hack the box渗透之OpenAdmin题目及蚁剑管理员提权(四)
[网络安全自学篇] 六十四.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现及详解
[网络安全自学篇] 六十五.Vulnhub靶机渗透之环境搭建及JIS-CTF入门和蚁剑提权示例(一)
[网络安全自学篇] 六十六.Vulnhub靶机渗透之DC-1提权和Drupal漏洞利用(二)
[网络安全自学篇] 六十七.WannaCry勒索病毒复现及分析(一)Python利用永恒之蓝及Win7勒索加密
[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析
[网络安全自学篇] 六十九.宏病毒之入门基础、防御措施、自发邮件及APT28样本分析
[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向
[网络安全自学篇] 七十一.深信服分享之外部威胁防护和勒索病毒对抗


前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差异备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包



一.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动态爆破软件演示

在这里插入图片描述

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

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

(By:Eastmount 2020-04-30 中午12点写于贵阳 http://blog.csdn.net/eastmount/ )


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

原创文章 459 获赞 6628 访问量 517万+

猜你喜欢

转载自blog.csdn.net/Eastmount/article/details/105843983