OllyDBG新手使用说明书(3)

2018-12-19 21:44

分析器不能区分不同类的名称[different kinds of names]. 。如果您将某些函数指定为已知的名称, OllyDbg将会解码所有到该地址的调用。这是几个预定义的特殊名称WinMain, DllEntryPoint and WinProc。您可能使用这些标签标记主程序、DLL的的入口以及窗口过程(注意:OllyDbg不检查用户自定义的标签是否唯一)。另外,假定预定义参数assume predefined arguments是一种更好的方法。不幸的是,没有一般规则能够做到100%的准确分析。在某些情况下,例如当模块包含了P-Code或代码段中包换了大量的数据,分析器可能将一些数据解释成代码。如果统计分析显示代码部分很可能是压缩包或者经过加密了,分析器会发出警告。如果您想使用Hit跟踪[Hit trace],我建议您不要使用模糊分析[fuzzy analysis],因为设置断点的地方可能正是数据部分。 自解压文件[Self-extractable files] 通常有一个自提取器,在“正式”代码段之外。如果您选择自解压选项[SFX option]中的“扩展代码段,包含提取器[Extend code section to include self-extractor]”,OllyDbg将会扩展代码段,形式上允许分析它,并可以使用Hit跟踪[Hit] trace和Run跟踪[Run trace]。

OLLYDBG完全教程(五)

五,Object扫描器[Object scanner]

扫描器将特定的目标文件或者目标库(包括OMF和COFF两种格式),提取出代码段,然后将这些段定位在当前模块的代码节[Code section]中.如果段定位好了,扫描器将从目标文件中的调试信息提取名称(也就是所谓的库标签[library labels])。这极大的增加了代码与数据的可读性。 扫描器并不会对已识别的目标文件进行标签匹配,所以它不能识别非常小或相似的函数(比如:两个函数只是在重定位有区别)。因此要经常检查扫描器发送到登陆窗口的警告列表!

六,Implib扫描器 [Implib scanner]

某些DLL的输出符号仅仅是一个序号。许多符号都是井号加数字(比如:MFC42.#1003),这非常不便于理解。

幸运的是,软件零售商提供了输入连接库(implibs),它与序号符号名相关。使用implib扫描器的方法:从主菜单中选择调试[Debug]|选择输入链接库[Select import libraries]。

当您加载应用程序时,OllyDbg会读取链接库并从内置表格[internal tables]中提取符号名。每次遇到序号符号,而对应的链接库已经注册到OllyDbg中时,这个序号符号会被替换。

OLLYDBG完全教程(六)

七,如何开始调试[How to start debugging session]

最简单的方法是:运行 OllyDbg,点击菜单上的文件[File]|打开[Open],选择您想调试的程序。如果程序需要命令行参数,您可以在对话框底部的输入栏中,输入参数或者选择以前调试时输入过的一条参数。

OllyDbg 能够调试独立的DLL[stand-alone DLLs]。在这种情况下,OllyDbg 会创建并运行一个小的应用程序来加载链接库并根据您的需要调用输出函数。 如果您想重新启动上一次调试的程序,只要按一下 Ctrl+F2(这是重启程序的快捷键),这样 OllyDbg 会以同样的参数运行这个程序。另一种做法是在菜单中选择文件[File],从历史列表中选择程序。您也可以在Windows 资源管理器中将可执行文件或 DLL 文件拖拽到 OllyDbg 中。

当然,您可以在 OllyDbg 启动时,运行指定带有运行参数的被调试程序。例如:您可以在桌面创建一个OllyDbg 的快捷方式,右击并选择“属性”,在“快捷方式”中的“目标”中添加调试的程序的全路径。这样,您每次双击快捷方式时,OllyDbg 将自动运行被调试程序。注意:DLL文件不支持这种方式。

您可以把正在运行的进程挂接到 OllyDbg 中。在菜单中打开文件[File]|挂接[Attach],从进程列表中选择要挂接的进程。注意:在您关闭 OllyDbg 的同时,这个进程也会被关闭。不要挂接系统进程,否则可能会导致整个操作系统的崩溃。(事实上在大多数情况下,操作系统禁止您挂接敏感进程)。

OllyDbg 可以作为即时[just-in-time]调试器。这需要在系统注册表中注册。在菜单中选择选项[Options]|即时调试[Just-in-time debugging],并在弹出的对话框中单击按钮“设置OllyDbg为即时调试器”[Make OllyDbg just-in-time debugger]。今后,如果某个应用程序发生了非法操作,系统将提示您是否用OllyDbg 调试这个程序。操作系统会启动 OllyDbg 并直接停在发生异常的地方。如果您选择了“挂接时不询问”[attaching without confirmation],则在即时调试时OllyDbg不会弹出询问对话框。如果想恢复成以前的即时调试器[Restore old just-in-time debuger],按相应的按钮即可。 另一种方法是把 OllyDbg 添加到与可执行文件关联的快捷菜单中(这个想法是 Jochen Gerster 提出的)。

在主菜单中,选择选项[Options]|添加到资源管理器中[Add to Explorer]。以后您可以在所有的文件列表中,右击可执行文件或DLL,在快捷菜单中选择OllyDbg。这个功能会创建四个注册表键值:

HKEY_CLASSES_ROOT\\exefile\\shell\\Open with OllyDbg

HKEY_CLASSES_ROOT\\exefile\\shell\\Open with OllyDbg\\command HKEY_CLASSES_ROOT\\dllfile\\shell\\Open with OllyDbg

HKEY_CLASSES_ROOT\\dllfile\\shell\\Open with OllyDbg\\command OllyDbg能够调试控制台程序(基于文字的)。

OllyDbg不能调试.NET应用程序。.NET程序是由微软的中间语言这种伪指令组成的,或是on-the-fly to native ?6 commands编译的。

注意:如果您运行的是Windows NT、2000 或XP操作系统,您应该拥有管理员权限以便能够调试程序。

OLLYDBG完全教程(七)

八,CPU 窗口[CPU window]

对于用户来说,CPU窗口在OllyDbg中是最重要的窗口。您调试自己程序的绝大部分操作都要在这个窗口中进行。它包括以下五个面板(这五个面板的大小都是

可以调节的):

反汇编[Disassembler] 信息[Information] 数据[Dump] 寄存器[Registers] 栈[Stack]

按TAB键,可以切换到下一个CPU面板中(顺时针方向)。 按Shift+TAB,可以切换到前一个CPU面板(逆时针方向)。 九,断点[Breakpoints]

OllyDbg支持数种不同类型的断点:

- 一般断点[Ordinary breakpoint], 将您想中断的命令的第一个字节,用一个特殊命令INT3(调试器陷阱)来替代。您可以在反汇编窗口中选中要设断点的指令行并按下 F2 键就可以设定一个此类型的断点。也可以在快捷菜单中设置。再次按下 F2 键时,断点将被删除。注意,程序将在设断指令被执行之前中断下来。

INT3断点的设置数量是没有限制的。当您关闭被调试程序或者调试器的时候,OllyDbg将自动把这些断点保存到硬盘中,永远不要试图在数据段或者指令的中间设置这种断点,如果您试图在代码段以外设置断点, OllyDbg将会警告。您可以在安全选项[Security options]中永远关闭这个提示,在某些情况下调试器会插入自带的临时INT3断点。

- 条件断点[Conditional breakpoint] (快捷键 Shift+F2)是一个带有条件表达式的普通INT3断点。当调试器遇到这类断点时,它将计算表达式的值,如果结果非零或者表达式无效,将暂停被调试程序,当然,由条件为假的断点引起的开销是非常高的(主要归因于操作系统的反应时间)。在Windows NT、奔腾Ⅱ/450处理器环境下OllyDbg每秒最多处理2500个条件为假的断点。条件断点的一个典型使用情况就是在Windows消息上设置断点(比如 WM_PAINT)。为此,您可以将伪变量 MSG 同适当的参数说明联合使用。如果窗口被激活,参考一下后面的消息断点描述。

- 条件记录断点 [Conditional logging breakpoint](Shift+F4)是一种条件断点,每当遇到此类断点或者满足条件时,它将记录已知函数表达式或参数的值。例如,您可以在一些窗口过程函数上设置记录断点并列出对该函数的所有调用。或者只对接收到的WM_COMMAND消息标识符设断,或者对创建文件的函数(CreateFile)设断,并且记录以只读方式打开的文件名等,记录断点和条件断点速度相当,并且从记录窗口中浏览上百条消息要比按上百次F9轻松的多,您

可以为表达式选择一个预先定义好的解释说明。

您可以设置通过的次数 - 每次符合暂停条件时,计数器就会减一。如果通过计数在减一前,不等于零, OllyDbg就会继续执行。如果一个循环执行100次(十进制),在循环体内设置一个断点,并设置通过次数为99(十进制)。OllyDbg将会在最后一次执行循环体时暂停。

另外,条件记录断点允许您传递一个或多个命令给插件[plugins]。例如,您需要使用命令行插件改变一个寄存器的内容,然后继续执行程序。

- 消息断点[Message breakpoint]和条件记录断点基本相同,除了OllyDbg会自动产生一个条件,这个条件允许在窗口过程的入口处设置某些消息(比如WM_PSINT)断点,您可以在窗口[Windows]中设置它。

- 跟踪断点[Trace breakpoint] 是在每个选中命令上设置的一种特殊的INT3断点。如果您设置了Hit跟踪[hit trace],断点会在命令执行后移除,并在该地址处做一个标记。如果您使用的是Run跟踪[run trace],OllyDbg会添加跟踪数据记录并且断点仍然是保持激活状态。

- 内存断点[Memory breakpoint] OllyDbg每一时刻只允许有一个内存断点。您可以在反汇编窗口、CPU窗口、数据窗口中选择一部分内存,然后使用快捷菜单设置内存断点。如果有以前的内存断点,将被自动删除。您有两个选择:在内存访问(读,写,执行)时中断,或内存写入时中断。设置此类断点时,OllyDbg将会改变所选部分的内存块的属性。在与80x86兼容的处理器上将会有4096字节的内存被分配并保护起来。即使您仅仅选择了一个字节,OllyDbg 也会将整个内存块都保护起来。这将会引起大量的错误警告,请小心使用此类断点。某些系统函数(特别是在Windows95/98下)在访问受保护的内存时不但不会产生调试事件反而会造成被调试程序的崩溃。

- 硬断点[Hardware breakpoint](仅在Windows ME,NT或2000下可用)在80x86兼容的处理器上,允许您设置4个硬件断点。和内存断点不同,硬件断点并不会降低执行速度,但是最多只能覆盖四个字节。在单步执行或者跟踪代码时,OllyDbg能够使用硬断点代替INT3断点。

- 内存访问一次性断点[Single-shot break on memory access] (仅在Windows NT或2000下可用)。您可以通过内存窗口的快捷菜单(或按F2),对整个内存块设置该类断点。当您想捕捉调用或返回到某个模块时,该类断点就显得特别有用。中断发生以后,断点将被删除。

- 暂停Run跟踪[Run trace pause] (快捷键:Ctrl+T)是在每一步Run跟踪[run trace]时都要检查的一个条件集.您可以在EIP进入某个范围或超出某个范围时暂停,某个条件为真时暂停,或者命令与指定的模式匹配时暂停,或者当命令可疑的时候暂停。注意,这一选择会极大的(高达20%)降低Run跟踪的速度。

OllyDbg也可以在一些调试事件[debugging events]上暂停程序执行。比如加

载或卸载DLL,启动或终止线程,或者程序发出调试字符串的时候。

OLLYDBG完全教程(八)

10,数据窗口[Dump]

数据窗口用于显示内存或文件的内容。您可以从以下预处理格式[predefined formats]中选择一种显示方式:字节[byte]、文本[text]、整数[integer]、浮点数[float]、地址[address],反汇编[disassembly]、 PE头[PE Header]。 所有的dump窗口支持备份[backup]、搜索和编辑操作。CPU 窗口[CPU window]的Dump面板允许您对可执行代码的数据和可执行文件(.exe,或.dll)的内存映射做如下操作:定义标签[labels]、设置内存断点[memory breakpoints], 查找参考[references]。数据菜单[Dump menu]只显示与选中部分相关的命令。

如果 备份[backup]可用,则单击第一个列标题栏,会在地址[Address]/备份[Backup] 两种显示模式之间切换。点击其他列标题栏,会改变Dump模式。 像反汇编窗口一样,数据窗口也保存了大量查看内存地址的历史记录。您可以通过“+”和“-”键来访问您过去查看过的数据地址空间。 要翻动一字节的数据,可以按住Ctrl l键并按上/下方向键。

可执行模块窗口[Executable modules window]:可执行模块窗口(快捷键:Alt+E)列出了当前被调试进程加载的所有可执行模块。它也显示了很多有用的信息,比如模块大小、入口地址、模块版本、以及可执行文件路径等。一些信息,如以十进制显示的模块大小、入口地址的符号名、是否为系统模块等,通常是被隐藏的。如果想看,可以增加相应栏的宽度。快捷菜单支持以下操作:

刷新[Actualize] - 重新扫描模块并去除对新加载模块的高亮显示。在大多数情况下,OllyDbg会自动完成该操作。 查看内存[View memory] - 打开内存窗口,并定位到属于该模块镜像的第一个内存块处。

在CPU窗口中查看代码[View code in CPU] (快捷键:回车键) - 在反汇编窗口中显示模块的可执行代码。

跟进到入口[Follow entry] - 在反汇编窗口中跟进到模块的入口处。

在CPU窗口中查看数据[Dump data in CPU] -在CPU窗口的数据面板中显示模块的数据段。块代码段。

显示名称[View names] (快捷键:Ctrl+N) -显示当前模块定义或使用的全部名称[names](包括输出表、引入表、链接库、用户自定义)。 标记为系统DLL[Mark as system DLL],标记为非系统DLL[Mark as non-system DLL] - 将选中模块标记为系统或非系统属性。如果设置为系统属性,则在Run跟踪[Run trace]时会直接执行(不进行跟踪)这个模块,从而大大加快跟踪速度。默认情况下,所有驻留在系统目录(通常在Windows 95/98下为c:\\windows\\system ,在WinNT/2000/XP下为c:\\winnt\\system32)的模块都认为是系统模块。

立即更新.udd文件[Update .udd file now] -向文件“<模块名>.udd”写入模块相关的全部数据,udd文件保存了在调试期间设置的断点、标签、注释、监视、分析等信息。当模块卸载时OllyDbg会自动创建.udd文件。


OllyDBG新手使用说明书(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:声屏障施工技术交底

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: