ollydbg中文版简称为OD,是一款专门针对编程开发人员推出的强大的反编译工具。ollydbg 64位拥有直观简洁的可视化界面,结合了动态调试和静态分析,集分析函数过程、循环语句、选择语句等功能于一体,其强大的反汇编引擎,能够快速识别数千个被C和Windows所使用的函数,可以运行在任意Windows x86架构的平台下,具有极强的实用性!

您可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直接拖放到OllyDbg中,或者重新启动上一个被调试程序,或是挂接[Attach]一个正在运行的程序。OllyDbg支持即时调试,根本不需要安装,可直接在软盘中运行!
2、线程
OllyDbg可以调试多线程程序。因此您可以在多个线程之间转换,挂起、恢复、终止线程或是改变线程优先级。并且线程窗口将会显示每个线程的错误(就像调用 GETLASTERROR 返回一样)。
3、调试DLLs
您可以利用OllyDbg调试标准动态链接库(DLLs)。OllyDbg 会自动运行一个可执行程序。这个程序会加载链接库,并允许您调用链接库的输出函数。
4、源码级调试
OllyDbg可以识别所有 Borland 和 Microsoft 格式的调试信息。这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。
5、代码高亮
OllyDbg的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是无效的指令)和不同的操作数(常规[general]、FPU/SSE、段/系统寄存器、在栈或内存中的操作数,常量)。您可以定制个性化高亮方案。
6、名称
OllyDbg可以根据 Borland 和 Microsoft 格式的调试信息,显示输入/输出符号及名称。Object 扫描器可以识别库函数。其中的名称和注释您可任意添加。如果DLL中的某些函数是通过索引号输出的,则您可通过挂接输入库[import library]来恢复原来的函数名称。不仅如此,OllyDbg还能识别大量的常量符号名(如:窗口消息、错误代码、位域[bit fields]…)并能够解码为已知的函数调用。
7、已知函数
OllyDbg可以识别 2300 多个C 和Windows API 中的常用函数及其使用的参数。您可以添加描述信息、预定义解码。您还可以在已知函数设定 Log断点并可以对参数进行记录。
8、函数调用
OllyDbg可以在没有调试信息或函数过程使用非标准的开始部分[prolog]和结尾部分[epilog]的情况下,对递归调用进行回溯。
9、配置
有多达百余个选项用来设置OllyDbg 的外观和运行。
数据格式:OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCⅡ、UNICODE、 16/32位有/无符号/HEX整数、32/64/80位浮点数、地址、反汇编(MASM、IDEAL或是HLA)、PE文件头或线程数据块。
10、运行环境
OllyDbg可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统中工作,但我们强烈建议您采用300-MHz以上的奔腾处理器以达到最佳效果。还有,OllyDbg 是极占内存的,因此如果您需要使用诸如追踪调试[Trace]之类的扩展功能话,建议您最好使用128MB以上的内存。
11、支持的处理器
OllyDbg 支持所有 80x86、奔腾、MMX、3DNOW!、Athlon扩展指令集、SSE指令集以及相关的数据格式,但是不支持SSE2指令集。
F8:单步步过,每按一次这个键执行一条反汇编窗口中的一条指令,遇到call等子程序不进入其代码。
F7:单步步入:功能同单步步过(F8)类似,区别是遇到call等子程序会进入其中,进入后首先会停留在子程序的第一条指令上。
F4:运行到选定位置,作用就是直接运行到光标所在位置处暂停。
F9:运行,按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。
ctrl+F9:执行到返回,此命令在执行到一个ret(返回指令)指令时暂停,常用于从系统部分返回到我们调试的程序部分。
alt+F9:执行到用户代码,可用于从系统部分快速返回到我们调试的程序部分。

OllyDBG 中各个窗口的功能如上图。
反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。
寄存器窗口:显示当前所选线程的 CPU 寄存器内容。同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式。
信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。
数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。
堆栈窗口:显示当前线程的堆栈。
要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下 OllyDBG 就可以生效了。
启动后我们要把插件及 UDD 的目录配置为绝对路径,点击菜单上的 选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签:
因为我这里是把 OllyDBG 解压在 F:\OllyDBG 目录下,所以相应的 UDD 目录及插件目录按图上配置。还有一个常用到的标签就是上图后面那个字体,在这里你可以更改 OllyDBG 中显示的字体。上图中其它的选项可以保留为默认,若有需要也可以自己修改。修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动 OllyDBG。在这个对话框上点确定,重新启动一下 OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。有人可能知道插件的作用,但对那个 UDD 目录不清楚。我这简单解释一下:这个 UDD 目录的作用是保存你调试的工作。比如你调试一个软件,设置了断点,添加了注释,一次没做完,这时 OllyDBG 就会把你所做的工作保存到这个 UDD 目录,以便你下次调试时可以继续以前的工作。如果不设置这个 UDD 目录,OllyDBG 默认是在其安装目录下保存这些后缀名为 udd 的文件,时间长了就会显的很乱,所以还是建议专门设置一个目录来保存这些文件。
另外一个重要的选项就是调试选项,可通过菜单 选项->调试设置 来配置:

新手一般不需更改这里的选项,默认已配置好,可以直接使用。建议在对 OllyDBG 已比较熟的情况下再来进行配置。上面那个异常标签中的选项经常会在脱壳中用到,建议在有一定调试基础后学脱壳时再配置这里。
除了直接启动 OllyDBG 来调试外,我们还可以把 OllyDBG 添加到资源管理器右键菜单,这样我们就可以直接在 .exe 及 .dll 文件上点右键选择”用Ollydbg打开”菜单来进行调试。要把 OllyDBG 添加到资源管理器右键菜单,只需点菜单 选项->添加到浏览器,将会出现一个对话框,先点击”添加 Ollydbg 到系统资源管理器菜单”,再点击”完成”按钮即可。要从右键菜单中删除也很简单,还是这个对话框,点击”从系统资源管理器菜单删除 Ollydbg”,再点击”完成”就行了。
OllyDBG 支持插件功能,插件的安装也很简单,只要把下载的插件(一般是个 DLL 文件)复制到 OllyDBG 安装目录下的 PLUGIN 目录中就可以了,OllyDBG 启动时会自动识别。要注意的是 OllyDBG 1.10 对插件的个数有限制,最多不能超过 32 个,否则会出错。建议插件不要添加的太多。
到这里基本配置就完成了,OllyDBG 把所有配置都放在安装目录下的 ollydbg.ini 文件中。
打开ollydbg,会看到这几个基本界面,我的定制化了一些插件,会有些出入。不过基本一致的。

可以看到ollydbg的经典四个布局,反汇编区域、寄存器区域、内存区域、堆栈区域。

可以通过file->open的方法打开需要查看的程序或者是dll文件

如下如所示,建议最好有一些8086的汇编基础,ollydbg支持动态反汇编,所以您可以修改一些程序指令。

反汇编中的第一列是指令在内存中存放的地址。

反汇编中的第二列是所谓的汇编语言中的操作码。只有CPU能对它唯一识别,ollydbg的作用就是根据操作码解读出易于人类阅读的汇编语言。

第三列就是我们研读的目标了,它是我们需要学习型的汇编语言。

第四列是强大的ollydbg为我们提供的注释功能,能看到一些windows api,或者是一些可读的信息。当然你也可以自己写注释。

如何在ollydbg中设置断点和重新加载程序
打开ollydbg,加载需要调试的程序,如下图。

找到我们需要下断点的地方,点击F2,这时在地址处就有红色表示,即为断点,如下图。

下完断点后,我们点击运行,工具栏上的三角符号,这时程序将运行到我们下断点的位置,这时我们可以看到内存数据和寄存器都有变化,如下图。

再次点击f2,可以取消断点,如下图。

如果我们想重新加载程序,我们可以点击工具栏的额后退按钮,如下图。

点击后,ollydbg会提示重新加载可执行文件,我们点击yes,如下图。

稍等片刻,将会加载完成,程序停在程序执行的入口,如下图。

调试菜单->;选择符号路径 然后在弹出的对话框设置路径即可。注意调试文件为udd格式,,当被调试文件路径发生变化时调试信息不再可用,,比如:你在C盘有一个文件用ollydby调试并加入注视或断点后,,把这个文件移到别的路径下,再用ollydbg打开调试信息注视和断点不被显示。
注意:断点和注释窗口只能查看到当前模块的断点和注释,且当前被ollydbg分析为代码的断点和注释才能被看到。|
OllyDBG怎么添加插件?
将你收集的插件放在OD\Plugin 这个目录下就ok啦。

【基本介绍】
OllyDbg是一种具有可视化界面的32位汇编分析调试器,是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring3级调试器,非常容易上手,己代替SoftICE成为当今最为流行的调试解密工具了。同时还支持插件扩展功能,是目前最强大的调试工具。【软件特点】
ollydbg反汇编工具支持插件扩展功能,最擅长分析函数过程、循环语句、选择语句、表[tables]、常量、代码中的字符串、欺骗性指令[tricky constructs]、API调用、函数中参数的数目和import表等等,这些分析增加了二进制代码的可读性,减少了出错的可能性,使得我们的调试工作更加容易。【软件功能】
1、启动您可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直接拖放到OllyDbg中,或者重新启动上一个被调试程序,或是挂接[Attach]一个正在运行的程序。OllyDbg支持即时调试,根本不需要安装,可直接在软盘中运行!
2、线程
OllyDbg可以调试多线程程序。因此您可以在多个线程之间转换,挂起、恢复、终止线程或是改变线程优先级。并且线程窗口将会显示每个线程的错误(就像调用 GETLASTERROR 返回一样)。
3、调试DLLs
您可以利用OllyDbg调试标准动态链接库(DLLs)。OllyDbg 会自动运行一个可执行程序。这个程序会加载链接库,并允许您调用链接库的输出函数。
4、源码级调试
OllyDbg可以识别所有 Borland 和 Microsoft 格式的调试信息。这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。
5、代码高亮
OllyDbg的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是无效的指令)和不同的操作数(常规[general]、FPU/SSE、段/系统寄存器、在栈或内存中的操作数,常量)。您可以定制个性化高亮方案。
6、名称
OllyDbg可以根据 Borland 和 Microsoft 格式的调试信息,显示输入/输出符号及名称。Object 扫描器可以识别库函数。其中的名称和注释您可任意添加。如果DLL中的某些函数是通过索引号输出的,则您可通过挂接输入库[import library]来恢复原来的函数名称。不仅如此,OllyDbg还能识别大量的常量符号名(如:窗口消息、错误代码、位域[bit fields]…)并能够解码为已知的函数调用。
7、已知函数
OllyDbg可以识别 2300 多个C 和Windows API 中的常用函数及其使用的参数。您可以添加描述信息、预定义解码。您还可以在已知函数设定 Log断点并可以对参数进行记录。
8、函数调用
OllyDbg可以在没有调试信息或函数过程使用非标准的开始部分[prolog]和结尾部分[epilog]的情况下,对递归调用进行回溯。
9、配置
有多达百余个选项用来设置OllyDbg 的外观和运行。
数据格式:OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCⅡ、UNICODE、 16/32位有/无符号/HEX整数、32/64/80位浮点数、地址、反汇编(MASM、IDEAL或是HLA)、PE文件头或线程数据块。
10、运行环境
OllyDbg可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统中工作,但我们强烈建议您采用300-MHz以上的奔腾处理器以达到最佳效果。还有,OllyDbg 是极占内存的,因此如果您需要使用诸如追踪调试[Trace]之类的扩展功能话,建议您最好使用128MB以上的内存。
11、支持的处理器
OllyDbg 支持所有 80x86、奔腾、MMX、3DNOW!、Athlon扩展指令集、SSE指令集以及相关的数据格式,但是不支持SSE2指令集。
【常用快捷键】
F2:设置断点,只要在光标定位的位置按F2键即可,在按一次F2键则会删除断点。F8:单步步过,每按一次这个键执行一条反汇编窗口中的一条指令,遇到call等子程序不进入其代码。
F7:单步步入:功能同单步步过(F8)类似,区别是遇到call等子程序会进入其中,进入后首先会停留在子程序的第一条指令上。
F4:运行到选定位置,作用就是直接运行到光标所在位置处暂停。
F9:运行,按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。
ctrl+F9:执行到返回,此命令在执行到一个ret(返回指令)指令时暂停,常用于从系统部分返回到我们调试的程序部分。
alt+F9:执行到用户代码,可用于从系统部分快速返回到我们调试的程序部分。
【安装配置】
OllyDBG发布版本是个 ZIP 压缩包,只要解压到一个目录下,运行 OllyDBG.exe 就可以了。汉化版的发布版本是个RAR压缩包,同样只需解压到一个目录下运行 OllyDBG.exe 即可:
OllyDBG 中各个窗口的功能如上图。
反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。
寄存器窗口:显示当前所选线程的 CPU 寄存器内容。同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式。
信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。
数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。
堆栈窗口:显示当前线程的堆栈。
要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下 OllyDBG 就可以生效了。
启动后我们要把插件及 UDD 的目录配置为绝对路径,点击菜单上的 选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签:
因为我这里是把 OllyDBG 解压在 F:\OllyDBG 目录下,所以相应的 UDD 目录及插件目录按图上配置。还有一个常用到的标签就是上图后面那个字体,在这里你可以更改 OllyDBG 中显示的字体。上图中其它的选项可以保留为默认,若有需要也可以自己修改。修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动 OllyDBG。在这个对话框上点确定,重新启动一下 OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。有人可能知道插件的作用,但对那个 UDD 目录不清楚。我这简单解释一下:这个 UDD 目录的作用是保存你调试的工作。比如你调试一个软件,设置了断点,添加了注释,一次没做完,这时 OllyDBG 就会把你所做的工作保存到这个 UDD 目录,以便你下次调试时可以继续以前的工作。如果不设置这个 UDD 目录,OllyDBG 默认是在其安装目录下保存这些后缀名为 udd 的文件,时间长了就会显的很乱,所以还是建议专门设置一个目录来保存这些文件。
另外一个重要的选项就是调试选项,可通过菜单 选项->调试设置 来配置:

新手一般不需更改这里的选项,默认已配置好,可以直接使用。建议在对 OllyDBG 已比较熟的情况下再来进行配置。上面那个异常标签中的选项经常会在脱壳中用到,建议在有一定调试基础后学脱壳时再配置这里。
除了直接启动 OllyDBG 来调试外,我们还可以把 OllyDBG 添加到资源管理器右键菜单,这样我们就可以直接在 .exe 及 .dll 文件上点右键选择”用Ollydbg打开”菜单来进行调试。要把 OllyDBG 添加到资源管理器右键菜单,只需点菜单 选项->添加到浏览器,将会出现一个对话框,先点击”添加 Ollydbg 到系统资源管理器菜单”,再点击”完成”按钮即可。要从右键菜单中删除也很简单,还是这个对话框,点击”从系统资源管理器菜单删除 Ollydbg”,再点击”完成”就行了。
OllyDBG 支持插件功能,插件的安装也很简单,只要把下载的插件(一般是个 DLL 文件)复制到 OllyDBG 安装目录下的 PLUGIN 目录中就可以了,OllyDBG 启动时会自动识别。要注意的是 OllyDBG 1.10 对插件的个数有限制,最多不能超过 32 个,否则会出错。建议插件不要添加的太多。
到这里基本配置就完成了,OllyDBG 把所有配置都放在安装目录下的 ollydbg.ini 文件中。
【软件特点】
使用Ollydbg看反汇编代码打开ollydbg,会看到这几个基本界面,我的定制化了一些插件,会有些出入。不过基本一致的。

可以看到ollydbg的经典四个布局,反汇编区域、寄存器区域、内存区域、堆栈区域。

可以通过file->open的方法打开需要查看的程序或者是dll文件

如下如所示,建议最好有一些8086的汇编基础,ollydbg支持动态反汇编,所以您可以修改一些程序指令。

反汇编中的第一列是指令在内存中存放的地址。

反汇编中的第二列是所谓的汇编语言中的操作码。只有CPU能对它唯一识别,ollydbg的作用就是根据操作码解读出易于人类阅读的汇编语言。

第三列就是我们研读的目标了,它是我们需要学习型的汇编语言。

第四列是强大的ollydbg为我们提供的注释功能,能看到一些windows api,或者是一些可读的信息。当然你也可以自己写注释。

如何在ollydbg中设置断点和重新加载程序
打开ollydbg,加载需要调试的程序,如下图。

找到我们需要下断点的地方,点击F2,这时在地址处就有红色表示,即为断点,如下图。

下完断点后,我们点击运行,工具栏上的三角符号,这时程序将运行到我们下断点的位置,这时我们可以看到内存数据和寄存器都有变化,如下图。

再次点击f2,可以取消断点,如下图。

如果我们想重新加载程序,我们可以点击工具栏的额后退按钮,如下图。

点击后,ollydbg会提示重新加载可执行文件,我们点击yes,如下图。

稍等片刻,将会加载完成,程序停在程序执行的入口,如下图。

【相关问题】
怎样保存ollydbg的调试信息以便下次使用?调试菜单->;选择符号路径 然后在弹出的对话框设置路径即可。注意调试文件为udd格式,,当被调试文件路径发生变化时调试信息不再可用,,比如:你在C盘有一个文件用ollydby调试并加入注视或断点后,,把这个文件移到别的路径下,再用ollydbg打开调试信息注视和断点不被显示。
注意:断点和注释窗口只能查看到当前模块的断点和注释,且当前被ollydbg分析为代码的断点和注释才能被看到。|
OllyDBG怎么添加插件?
将你收集的插件放在OD\Plugin 这个目录下就ok啦。