渗透之OllyDbg逆向分析动态调试工具使用
文章目录
- 一.OllyDbg界面介绍和配置
- 二.经常使用快捷键
- 三.OllyDbg动态爆破软件演示
- 四.总结
PS:本文参考了B站漏洞银行、安全网站和参考文献中的文章(详见参考文献),并结合本身的经验和实践进行撰写,也推荐你们阅读参考文献,在此感谢这些大佬们。git
作者的github资源:
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其余工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
逆向分析:https://github.com/eastmountyxz/Reverse-Analysis-Case
一.OllyDbg界面介绍和配置
OllyDbg是一个动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,很是容易上手,是当今最为流行的调试解密工具之一。它还支持插件扩展功能,是目前最强大的调试工具之一。shell
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动态爆破软件演示