OllyDbgOD反汇编调试器
OllyDbg下载后调试小程序很顺手,OllyDbg的反汇编窗口跟着指令走一遍就能理清逻辑,推荐给需要分析程序的朋友。 发表评论
- 软件类别:开发编程
- 软件大小:3.7M
- 更新时间:2026-09-11 09:03
- 软件版本:v2.1.0.2动态追踪调试
- 软件语言:简体中文
- 软件等级:

- 软件厂商:
- 官方网址:暂无
- 备案号:
- 评分
- 立即下载
手机扫描下载
应用介绍
如果你平时会接触到Windows平台下的可执行文件分析,或者偶尔需要对某个小程序做逆向研究,那大概率听说过OllyDbg这个名字。它不是那种装完就放在角落吃灰的软件,而是当你遇到一个没有源码的exe、想知道它内部逻辑到底怎么跑的时候,能真正派上用场的工具。很多做安全分析、软件汉化、破解学习的用户,电脑里都会备一份。笔者第一次接触它是在分析一个老游戏的存档加密逻辑,当时用其他调试器总感觉操作路径太长,换成OllyDbg之后,界面虽然朴素,但反汇编窗口、寄存器窗口、堆栈窗口一字排开,跟着CPU指令一步步走,很快就定位到了关键比较跳转。它的定位是Ring3级调试器,意味着不需要进入内核层就能完成大部分用户态程序的动态分析,对普通PC环境来说省去了很多驱动安装的麻烦。同时它支持插件扩展,社区里有人写了大量辅助脚本,能自动识别常见壳的特征、批量下断点、导出函数列表,这些在实际使用中比单纯看反汇编效率高不少。软件体积不大,解压出来直接运行,不用写注册表,放在U盘里带着走也行。
OllyDbg怎么查看程序有没有加壳
1.打开OllyDbg之后,先别急着按F9运行。点击菜单栏的“文件”→“打开”,选中你要分析的exe文件,这时候软件会停在入口点位置。但入口点不一定就是程序原本的代码起点,很多加壳程序会把入口点改到壳的代码段。
2.这时候看反汇编窗口的第一条指令。如果入口点附近出现pushad、popad成对出现,或者有大量push指令连续压栈,紧接着一个call跳向远处,那大概率是加了压缩壳。另一种常见情况是入口点的代码看起来像一堆无意义的字节,右键→“分析”→“分析代码”,如果OllyDbg提示无法识别或者识别出来的代码乱七八糟,也说明入口点被壳处理过。
3.更直接的办法是看区段名称。点击菜单“查看”→“内存”,在弹出的内存映射窗口里看各个区段的名称。正常编译的程序区段名一般是.text、.data、.rsrc这类标准命名。如果看到区段名是UPX0、UPX1、.aspack、.themida这类,那加壳基本没跑了。另外区段权限也有参考价值,比如一个区段同时有可写和可执行权限,正常程序很少这样设置。
4.还有一个经验判断:看入口点所在区段的虚拟大小和物理大小差距。加壳程序通常物理大小远小于虚拟大小,因为壳代码运行时需要解压出原始代码。在内存窗口里能看到这两列数值,如果虚拟大小比物理大小大好几倍,结合前面的特征,就能确认加壳类型。知道壳的种类之后,才能决定下一步是手动脱壳还是找对应的脱壳脚本。
OllyDbg断点所有API调用的操作路径
1.很多人分析程序时想一次性监控所有API调用,比如想看看程序启动时到底访问了哪些文件、读了哪些注册表项。OllyDbg本身没有一键断所有API的按钮,但可以通过插件实现。比较常用的做法是使用命令行插件或者API断点插件。先确认插件目录下有没有对应dll,没有的话去社区下载放到插件文件夹,重启OllyDbg。
2.另一种不依赖插件的做法是手动在常用API上下断点。点击菜单“查看”→“断点”,或者直接在反汇编窗口右键→“查找”→“当前模块中的名称”,找到kernel32.dll和user32.dll里的关键函数,比如CreateFileA、RegOpenKeyExA、MessageBoxA,逐个按F2下断。这个方法适合目标明确的场景,比如你只想看文件操作,那就只断文件相关API。
3.如果程序调用的是序号导出的API,或者经过转发,名字可能显示不出来。这时候可以在命令窗口输入bp followed by函数名,不过更稳妥的方式还是用插件。笔者实测下来,手动下断点虽然麻烦,但胜在稳定,不会因为插件版本不匹配导致OllyDbg崩溃。另外注意断点数量不要太多,几十个API同时断会让程序几乎卡死,建议分批下断,先断最可疑的那一组。
4.下完断点按F9运行,每当程序调用到断点处的API,OllyDbg就会暂停,这时候看堆栈窗口能知道调用来自哪个模块,看寄存器窗口能知道传入的参数值。比如CreateFileA断下来之后,看堆栈里第一个参数就是文件名指针,右键跟随到数据窗口就能看到具体路径字符串。这个流程在排查程序行为时很直观。
OllyDbg实操专题:基础调试流程与常用操作
下面用一个简单的场景串一下OllyDbg的基础操作流程。假设你拿到一个程序,想找到它弹出注册失败提示的位置,然后看看能不能跳过这个判断。
| 操作步骤 | 具体路径 | 注意事项 |
|---|---|---|
| 载入程序 | 文件→打开→选择exe | 程序会停在系统断点,按F9继续到入口点 |
| 查找字符串 | 右键→查找→所有参考文本字符串 | 中文程序选ASCII,Unicode程序选Unicode |
| 定位关键跳转 | 双击字符串→来到反汇编位置 | 往上找条件跳转指令,通常是je/jne/jz/jnz |
| 修改跳转 | 选中跳转指令→空格键→修改汇编 | je改成jmp或nop填充,改完右键→复制到可执行文件 |
这个流程走下来,快的话几分钟就能定位到关键判断点。但要注意,修改之后的程序保存出来可能无法运行,因为有些程序有校验机制。这时候需要配合其他手段,比如找到校验位置一并跳过。另外OllyDbg的反汇编引擎在遇到花指令时可能会识别错误,需要手动按Ctrl+A重新分析,或者用NOP填充干扰字节。笔者遇到过几次花指令导致反汇编窗口显示乱码,按Ctrl+A之后部分代码恢复正常,但仍有几处需要手动调整。这类情况在分析经过混淆的程序时比较常见,耐心一点逐段处理就行。
OllyDbg里搜索不到MessageBox怎么办
1.搜索不到MessageBox字符串,通常有三种可能。第一种是程序用了Unicode编码,而你在查找窗口选了ASCII。OllyDbg的查找文本字符串功能默认是ASCII模式,如果目标程序是宽字符编译的,MessageBox会以U+0000间隔存储,ASCII模式下搜不到。解决办法是在查找窗口把编码切换成Unicode,再搜一次。
2.第二种可能是字符串被加密或者动态拼接了。有些程序为了防止静态搜索,把提示文本拆成多个字符逐个赋值,或者运行时才解密到内存。这种情况下静态搜索找不到,需要在MessageBoxA或MessageBoxW函数上下断点,等程序调用时看堆栈参数,参数指向的内存地址里就是真正的文本内容。
3.第三种是程序用了自己封装的弹窗函数,内部可能调用的是MessageBoxIndirect或者TaskDialogIndirect,字符串不在常规位置。这时候可以尝试搜索其他特征字符串,比如按钮上的“确定”“取消”,或者窗口标题。另外OllyDbg的字符串搜索范围默认是当前模块,如果弹窗来自某个dll,需要在模块列表里切换到对应dll再搜。
实测下来,Unicode编码问题占大多数。笔者建议拿到程序先按Ctrl+A分析一遍,然后分别在ASCII和Unicode模式下各搜一次,能覆盖大部分情况。如果还是找不到,就转动态断点方案,虽然慢一点但更可靠。
同类PC调试分析软件横向参考
| 软件名称 | 评分 | 简要说明 |
|---|---|---|
| x64dbg | ★★★★★ | 64位调试器,界面现代,插件生态活跃 |
| IDA Pro | ★★★★★ | 静态反汇编标杆,支持多平台处理器架构 |
| WinDbg | ★★★★☆ | 微软官方内核调试工具,适合驱动分析 |
| Cheat Engine | ★★★★☆ | 内存扫描与修改,游戏修改场景常用 |
| Ghidra | ★★★★☆ | NSA开源逆向套件,反编译功能突出 |
| dnSpy | ★★★★☆ | .NET程序反编译调试,C#逆向首选 |
| Radare2 | ★★★☆☆ | 命令行逆向框架,脚本化能力强 |
运行OllyDbg的硬件配置参考
| 硬件项目 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | Pentium4 1.6GHz | 双核2.0GHz以上 |
| 内存 | 512MB | 2GB及以上 |
| 显卡 | 支持1024×768分辨率 | 支持1920×1080分辨率 |
| 硬盘空间 | 50MB可用空间 | 200MB可用空间 |
| 操作系统 | WindowsXP SP3 | Windows7/10/11 |
OllyDbg常用快捷键速查
| 快捷键 | 功能说明 |
|---|---|
| F2 | 在光标所在行设置/取消断点 |
| F3 | 打开文件对话框,载入新程序 |
| F7 | 单步步入,遇到call进入函数内部 |
| F8 | 单步步过,call当作一条指令执行 |
| F9 | 运行程序,直到遇到断点或异常 |
| Ctrl+F2 | 重新开始调试,重置所有状态 |
| Ctrl+G | 跳转到指定地址或API函数 |
| Alt+B | 打开断点管理窗口,查看所有断点 |
| Alt+M | 打开内存映射窗口,查看区段信息 |
| 空格键 | 修改当前选中行的汇编指令 |
用户答疑专区
OllyDbg在Win10上运行提示兼容性问题怎么办?
OllyDbg2.1.0.2在Win10下确实会遇到一些兼容性提示,尤其是加载某些老程序时。实测下来,右键OllyDbg主程序→属性→兼容性→勾选“以兼容模式运行这个程序”,选择WindowsXP SP3,同时勾选“以管理员身份运行”。如果还是不行,尝试关闭系统的数据执行保护。另外注意,部分Win10版本对调试器附加进程有限制,需要在设置里关闭“内核隔离”的内存完整性选项,否则附加到进程会失败。
OllyDbg调试时程序跑飞了怎么恢复?
程序跑飞一般是因为断点没下对,或者单步跟踪时误入了系统领空。这时候先按Ctrl+F2重新开始,程序会回到初始状态。如果按Ctrl+F2没反应,说明OllyDbg本身卡住了,只能强制结束进程重新打开。为了避免跑飞,建议在单步跟踪时注意观察反汇编窗口的地址变化,如果地址突然跳到7xxxxxxx这种系统dll区域,立刻按F8步过或者Ctrl+F2重来。另外可以在关键位置先下断点再运行,比盲目单步效率高很多。
OllyDbg打开某些程序提示无法附加是什么原因?
无法附加通常有几个原因。一是程序有反调试保护,检测到调试器就拒绝运行或者直接退出。二是程序以管理员权限运行,而OllyDbg没有以管理员身份启动,权限不对等导致附加失败。三是64位程序,OllyDbg2.1.0.2本身是32位调试器,无法附加64位进程,这种情况需要换用x64dbg。四是程序被其他调试器占用了调试端口,同一时间一个进程只能被一个调试器附加。
OllyDbg吃内存厉害吗?低配电脑能用吗?
OllyDbg本身内存占用不算大,空载时大概几十MB。但调试大型程序时,特别是加载了符号文件或者开了多个插件之后,内存占用会明显上升,实测调试一个中型exe时占用可以到300MB左右。低配电脑如果只有2GB内存,同时开着浏览器和其他工具,可能会感觉卡顿。建议调试时关掉不必要的插件和无关程序。另外OllyDbg的反汇编分析过程比较吃CPU,老赛扬处理器分析大程序时会有明显等待。
OllyDbg的插件加载了但不显示菜单怎么办?
插件不显示菜单,先检查插件dll是否放在了OllyDbg目录下的plugin文件夹里。放好之后重启OllyDbg,点击菜单“选项”→“界面”,看看插件选项卡里有没有勾选启用插件。如果插件列表里能看到但菜单没出来,可能是插件版本和OllyDbg版本不匹配,有些老插件只支持1.10版本,在2.1.0.2下会静默失败。另外注意插件dll的位数要和OllyDbg一致,32位调试器只能用32位插件。
应用信息
- 包名:OllyDbg
- 名称:OllyDbg
- 版本:0
- MD5值:5cb7c0f893f27149c65af1bf7660b4b3
热门专题
本类最新
网友评论
热门推荐
本类排行
- 1LabVIEW 2021永久激活版v2021免费版2.33G
- 2LabVIEW 2022破解版v2022专业开发版2.76G
- 3Visual Studio Code 2025中文最新版v1.96纯净版100.3M
- 4Visual Studio Code 2024激活版v1.98官方版93.9M
- 5Visual Studio Code 2023中文版v1.98官方版88.4M
- 6Visual Studio Code 2022中文解锁版v1.96纯净版75.4M
- 7R语言最新版本下载Windows版v4.5.0官方版85M
- 8JetBrains GoLand 2020中文版v2020.3.5最新版366M
- 9Maplesoft Maple 2022中文破解版v2022最新版3.91G
- 10Maplesoft Maple2021最新版v2021官方原版2.33G
















