OD新手入门教程,制作辅助必备.pdf
《OD新手入门教程,制作辅助必备.pdf》由会员分享,可在线阅读,更多相关《OD新手入门教程,制作辅助必备.pdf(40页珍藏版)》请在咨信网上搜索。
ODODODOD 新手入门教程,制作辅助必备新手入门教程,制作辅助必备新手入门教程,制作辅助必备新手入门教程,制作辅助必备第一章第一章第一章第一章 概述概述概述概述OllyDbg 是一种具有可视化界面的 32 位汇编分析调试器。它的特别之处在于可以在没有源代码时解决问题,并且可以处理其它编译器无法解决的难题。Version1.10 是最终的发布版本。这个工程已经停止,我不再继续支持这个软件了。但不用担心:全新打造的 OllyDbg2.00 不久就会面世!运行环境:OllyDbg 可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统中工作,但我们强烈建议你采用 300MHz 以上的奔腾处理器以达到最佳效果。还有,OllyDbg 是极占内存的,因此如果你需要使用诸如追踪调试 Trace之类的扩展功能话,建议你最好使用 128MB 以上的内存。支持的处理器:OllyDbg 支持所有 80 x86、奔腾、MMX、3DNOW!、Athlon 扩展指令集、SSE 指令集以及相关的数据格式,但是不支持 SSE2 指令集。配置:有多达百余个选项用来设置 OllyDbg 的外观和运行。数据格式:OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCII、UNICODE、16/32 位有/无符号/HEX 整数、32/64/80 位浮点数、地址、反汇编(MASM、IDEAL 或是 HLA)、PE 文件头或线程数据块。帮助:此文件中包含了关于理解和使用 OllyDbg 的必要的信息。如果你还有 WindowsAPI 帮助文件的话(由于版权的问题 win32.hlpwin32.hlpwin32.hlpwin32.hlp没有包括在内),你可以将它挂在可以将它挂在 OllyDbgOllyDbgOllyDbgOllyDbg中,这样就可以快速获得系统函数的相关帮助中,这样就可以快速获得系统函数的相关帮助。学习各种外挂制作技术,马上去百度搜索学习各种外挂制作技术,马上去百度搜索 魔鬼作坊魔鬼作坊 点击第点击第一个站进入、快速成为做挂达人。一个站进入、快速成为做挂达人。启动:你可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直接拖放到 OllyDbg 中,或者重新启动上一个被调试程序,或是挂接Attach一个正在运行的程序。OllyDbg 支持即时调试。OllyDbg 根本不需要安装,可直接在软盘中运行!调试 DLLs:你可以利用 OllyDbg 调试标准动态链接库(DLLs)。OllyDbg 会自动运行一个可执行程序。这个程序会加载链接库,并允许你调用链接库的输出函数。源码级调试:OllyDbg 可以识别所有 Borland 和 Microsoft 格式的调试信息。这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。1代码高亮:OllyDbg 的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是无效的指令)和不同的操作数(常规general、FPU/SSE、段/系统寄存器、在栈或内存中的操作数,常量)。你可以定制个性化高亮方案。线程:OllyDbg 可以调试多线程程序。因此你可以在多个线程之间转换,挂起、恢复、终止线程或是改变线程优先级。并且线程窗口将会显示每个线程的错误(就像调用GETLASTERROR 返回一样)。分析:OllyDbg 的最大特点之一就是分析。它会分析函数过程、循环语句、选择语句、表tables、常量、代码中的字符串、欺骗性指令tricky constructs、API 调用、函数中参数的数目,import 表等等。这些分析增加了二进制代码的可读性,减少了出错的可能性,使得我们的调试工作更加容易。Object 扫描:OllyDbg 可以扫描 Object 文件/库(包括 OMF 和 COFF 格式),解压代码段codesegments并且对其位置进行定向。Implib 扫描:由于一些 DLL 文件的输出函数使用的索引号,对于人来说,这些索引号没有实际含义。如果你有与 DLL 相应的输入库import library,OllyDbg 就可以将序号转换成符号名称。完全支持 Unicode:几乎所有支持 ASCII 的操作同时也支持 UNICODE,反之亦然。名称:OllyDbg 可以根据 Borland 和 Microsoft 格式的调试信息,显示输入/输出符号及名称。Object 扫描器可以识别库函数。其中的名称和注释你可任意添加。如果 DLL 中的某些函数是通过索引号输出的,则你可通过挂接输入库import library来恢复原来的函数名称。不仅如此,OllyDbg 还能识别大量的常量符号名(如:窗口消息、错误代码、位域bitfields)并能够解码为已知的函数调用。已知函数:OllyDbg 可以识别 2300 多个 C 和 WindowsAPI 中的常用函数及其使用的参数。你可以添加描述信息、预定义解码。你还可以在已知函数设定 Log 断点并可以对参数进行记录。函数调用:OllyDbg 可以在没有调试信息或函数过程使用非标准的开始部分prolog和结尾部分epilog的情况下,对递归调用进行回溯。译者注:004010D0pushebp004010D1movebp,esp|004010D3subesp,10h|prolog004010D6pushebx|004010D7pushesi|004010D8pushedi/004010C5popedi004010C6popesi|004010C7popebx|epilog004010C8movesp,ebp|004010CApopebp|004010CBret/2栈:在栈窗口中,OllyDbg 能智能识别返回地址和栈框架Stack Frames。并会留下一些先前的调用。如果程序停在已知函数上,堆栈窗口将会对其参数进行分析解码。译者注:栈框架Stack Frames是指一个内存区域,用于存放函数参数和局部变量。SEH 链:跟踪栈并显示结构化异常句柄链。全部链会显示在一个单独的窗口中。搜索:方法真是太多了!可精确、模糊搜索命令或命令序列,搜索常数,搜索二进制、文本字符串,搜索全部命令地址,搜索全部常量或地址域addressrange,搜索所有能跳到选定地址的跳转,搜索所有调用和被调用的函数,搜索所有参考字符串,在不同模块中搜索所有调用、搜索函数名称,在全部已分配的内存中搜索二进制序列。如果搜索到多个结果,你可以对其进行快速操作。窗口:OllyDbg 能够列出关于调试程序中的各种窗口,并且可以在窗口、类甚至选定的消息上设置断点。资源:如果 WindowsAPI 函数使用了参考资源串,OllyDbg 可以显示它。其支持显示的类型仅限于附带资源attached resources的列表、数据显示及二进制编辑。断点:OllyDbg 支持各种断点:一般断点、条件断点、记录断点(比如记录函数参数到记录窗口)、内存读写断点、硬件断点(只适用于 ME/NT/2000)等。在 Hit 跟踪情况下,可以在模块的每条命令上都设置 INT3 断点。在使用 500MHZ 处理器的 Windows NT 中,OllyDbg 每秒可以处理高达 5000 个中断。监视与监察器:每个监视都是一个表达式并能实时显示表达式的值。你可以使用寄存器、常数、地址表达式、布尔值以及任何复杂代数运算,你还可以比较 ASCII 和 UNICODE 字符串。监察器inspectors是一种包含了两个的索引序列的监视Watches,它以二维表的形式呈现,可以对数组和结构进行解码分析。Heap walk.:在基于 Win95 的系统中,OllyDbg 可以列出所有的已分配的堆。句柄:在基于 NT 的系统中,OllyDbg 可列出被调试程序的所有系统句柄。执行:.你可以单步执行、步入子程序或者步过子程序。你也可以执行程序直到函数返回时、执行到指定地址处,还可以自动执行。当程序运行时,你仍然可以操纵程序并能够查看内存、设置断点甚至修改代码。你也可以任意的暂停或重启被调试的程序。HitHitHitHit 跟踪:跟踪:.Hit 跟踪可以显示出目前已执行的指令或函数过程,帮助你检验代码的各个分支。Hit 跟踪会在指定指令到达之前设置断点,而在这个指令执行后,会把这个断点清除掉。译者注:Hit 在英文中是“击中”的意思,指令如果运行了就表示这个指令被“击中”了,没有执行的指令就是“未击中”,这样我们就很容易看出被调试程序哪些部分运行了,而哪些没有运行。RunRunRunRun跟踪:跟踪:Run 跟踪可以单步执行程序,它会在一个很大的循环缓冲区中模拟运行程序。这个模拟器包含了除了 SSE 指令集以外的所以寄存器、标志、线程错误、消息、已经函数的参数。你可以保存命令,这样可以非常方便地调试自修改代码(译者注:比如加壳程序)。你可以设置条件中断,条件包括地址范围、表达式、命令。你可以将 Run 跟踪信息保存到一个文件中,这样就可以对比两次运行的差别。Run 跟踪可以回溯分析已执行过的上百万条命令的各种细节。统计:统计Profiler可以在跟踪时计算某些指令出现的次数。因此你就能了解代码3的哪一部分被频繁执行。补丁:内置汇编器能够自动找到修改过的代码段。二进制编辑器则会以 ASCII、UNICODE 或者十六进制的形式同步显示修改后的数据。修改后的数据同其它数据一样,能够进行复制粘贴操作。原来的数据会自动备份,以便数据恢复时使用。你可以把修改的部分直接复制到执行文件中,OllyDbg 会自动修正。OllyDbg 还会记录以前调试过程中使用的所有补丁。你可以通过空格键实现补丁的激活或者禁止。自解压文件:自解压文件:当调试自解压文件时,你往往希望跳过解压部分,直接停在程序的原始入口点。OllyDbg 的自解压跟踪将会使你实现这一目的。如果是加保护的自解压段,自解压跟踪往往会失败。而一旦 OllyDbg 找到了入口点,它将会跳过解压部分,并准确的到达入口点。插件:你可以把自己的插件添加到 OllyDbg 中,以增加新的功能。OllyDbg 的插件能够访问几乎所有重要的数据的结构、能够在 OllyDbg 的窗口中添加菜单和快捷键,能够使用100 个以上的插件 API 函数。插件 API 函数有详细的说明文档。默认安装已经包含了两个插件:命令行插件和书签插件。UDD:OllyDbg 把所有程序或模块相关的信息保存至单独的文件中,并在模块重新加载时继续使用。这些信息包括了标签、注释、断点、监视、分析数据、条件等等更多:这里介绍的功能,仅仅是 OllyDbg 的部分功能。因为其具有如此丰富的功能,以至于 OllyDbg 能成为非常方便的调试器!4第二章第二章第二章第二章 组件组件组件组件一、一、一、一、一般原理一般原理一般原理一般原理GeneralGeneralGeneralGeneral prnciplesprnciplesprnciplesprnciples我希望你能对 80 x86 系列处理器的内部结构有所了解,同时具有一定的编写汇编程序的能力。对于 Microsoft Windows 方面的知识,你也要熟悉。OllyDbg 是运行在 Windows 95、Windows 98、Windows ME、Windows NT 和 Windows2000 系统下的一个单进程、多线程的分析代码级调试工具。它可以调试 PE 格式的执行文件及动态链接库,并可以对其打补丁。“代码级”意味着你可以直接与比特、字节或处理器指令打交道。OllyDbg 仅使用已公开的 Win32 API 函数,因此它可以在所有 Windows 操作系统及后继版本中使用。但是由于我没有对 XP 系统进行彻底测试,因此不能保证 OllyDbg功能的充分发挥。注意:OllyDbg 不支持对.NET 程序的调试。OllyDbg 不是面向编译器的。它没有特别的规则规定必须是哪一个编译器产生的代码。因此,OllyDbg 可以非常好的处理通过编译器生成的代码,或是直接用汇编写入的代码。OllyDbg 可以并行调试程序。你无须暂停执行程序,就可以浏览代码和数据,设置断点、停止或恢复线程,甚至直接修改内存。(这可以视为一种软件调试的模式,与之相对的硬件模式则是当进程在运行时调试器被阻滞,反之亦然)。假使所需的操作比较复杂,OllyDbg会让进程终止一小段时间,但是这种暂停对于用户来说是透明的。有时进程会发生非法操作。你可以把 OllyDbg 设置成即时justintime调试器,它会挂接出错程序,并停在程序产生异常的地方。通过 OllyDbg,你可以调试单独的 DLLstandalone DLLs文件。操作系统不能直接运行 DLL 文件,因此 OllyDbg 将一个可以加载 DLL 的小程序压缩到资源里,这个程序允许你调用最多 10 个参数的输出函数。OllyDbg 是完全面向模块moduleoriented的。模块Module包括可执行文件(扩展名通常为.EXE)和在启动时加载或需要时动态加载的动态链接库(扩展名通常为.DLL)。在在调试期间,调试期间,你你可以设置断点可以设置断点breakpointsbreakpointsbreakpointsbreakpoints、定义新的标签、定义新的标签labelslabelslabelslabels、注释、注释commentcommentcommentcomment汇汇编指令,当某个模块从内存中卸载编指令,当某个模块从内存中卸载unloadunloadunloadunload时,调试器会把这些信息保存在文件中,文时,调试器会把这些信息保存在文件中,文件名就是模块的名称,扩展名为件名就是模块的名称,扩展名为.UDD.UDD.UDD.UDD(表示 用户自定义文件UserDefined Data)当当OllyDbgOllyDbgOllyDbgOllyDbg 下一次加载该模块时下一次加载该模块时,它会自动恢复所有的调试信息它会自动恢复所有的调试信息,而不管是哪一个程序使用这而不管是哪一个程序使用这个模块。个模块。假设你正在调试程序 Myprog1,这个程序使用了 Mydll。你在 Mydll 中设置了一些断点,然后你开始调试 Myprog2,这个程序同样使用了 Mydll。这时你会发现,所有 Mydll中的断点依然存在,即使 Mydll 加载到不同的位置!一些调试器把被调试进程的内存当作一个单一的(并且大部分是空的)大小为 2 32 字节的区域。OllyDbg 采用了与之不同的技术:在这里,内存由许多独立的块组成,任何对内存内容的操作都被限制在各自的块内。在大多数情况下,这种方式工作得很好并且方便了调试。但是,如果模块包含好几个可执行段executablesections,你将不能一次看到全部代码,然而这种情况是非常少见的。OllyDbg 是一个很占用内存的程序 memoryhungry application。它在启动时就需要 3MB,并且当你第一次装载被调试的程序时还需要一到两兆的内存。每一次的分析、备份、5跟踪或者文件数据显示都需要占用一定的内存。因此当你调试一个很大的项目,发现程序管理器显示有 40 或 60 兆内存被占用时,请不要惊慌。为了有效地调试一些不带源码的程序,你必须首先理解它是如何工作的。OllyDbg 包含的大量特性可以使这种理解变得非常容易。首先,OllyDbg 包含一个内置的代码分析器。分析器遍历整个代码,分出指令和数据,识别出不同的数据类型和过程,分析出标准 API 函数(最常用的大约有 1900 个)的参数并且试着猜出未知函数的参数数目。你也可以加入自己的函数说明your own functiondescriptions。它标记出程序入口点和跳转目的地,识别出跳转表tabledriven switches和指向字符串的指针,加入一些注释,甚至标示出跳转的方向等等。在分析结果的基础上,调用树calltree显示哪些函数被指定过程调用(直接或间接)并且识别出递归调用、系统调用和叶子过程leaf procedures。如果需要的话,你可以设置解码提示decoding hints来帮助分析器解析那些不明确的代码或数据。OllyDbg 还包含 Object 扫描器Object Scanner。如果你有库文件libraries或目标文件object files,扫描器会在被调试的程序中定位这些库函数。在全部函数调用中,对标准函数的调用占很重要的一部分(据我估计可达 70%)。如果你知道正要被调用的函数的功能,你就不必把注意力集中在这个函数上,可以简单地单步步过step over这个 call。分析器知道 400 多个标准 C函数,比如 fopen 和 memcpy。然而我必须承认当前版本的 OllyDbg 不能定位很短的函数(比一个 return 命令多不了多少的)或相似的函数(只在重定位上有不同)。Object 扫描器Object scanner也能够识别输入库import libraries。如果某个 DLL 是按序号输出的,你不会看到函数名,只会发现一堆无意义的神秘数字。这种 DLL 的开发者通常会提供一个输入库来实现函数符号名与序号间的对应。让 OllyDbg 使用这个输入库,它就会恢复原始的函数符号名。面向对象的语言(如 C+),使用了一种叫做名称修饰name mangling的技术,把函数类型和参数都加入函数名中。OllyDbg 可以解码 demangle 这种函数名,使程序更易读。译者注:C+的名称修饰是编译器将函数的名称转变成为一个唯一的字符串的过程,这个字符串会对函数的类、其命名空间、其参数表,以及其他等等进行编码。C+的名称修饰适用于静态成员函数,也适用于非静态成员函数。静态函数的名称修饰的一个好处之一,是能够在不同的类里使用同一个名称来声明两个或者更多的静态成员函数而不会发生名称上的冲突。OllyDbg 完全支持 UNICODE,几乎所有对 ASCII 字符串的操作都可以同样应用于UNICODE。汇编指令都是很相似的。你经常会搞不清自己是不是已经跟踪过某一段代码。在OllyDbg 中你可以加入自己的标签labels和注释comments。这些极大地方便了调试。注意一旦注意一旦你你注释了某个注释了某个 DLLDLLDLLDLL,以后每次加载这个以后每次加载这个 DLLDLLDLLDLL 时时,注释和标签都有效注释和标签都有效尽管尽管你你在调试不同的程序在调试不同的程序。OllyDbg 可以跟踪标准的栈帧 stack frames(由 PUSH EBP;MOV EBP,ESP 所创建的)。现代编译器有禁止产生标准栈框架的选项,在这种情况下分配栈stack walk是不可能的。当程序运行到已知的函数时,栈窗口stack window解析它的参数,调用栈Call stack窗口显示到达当前位置所调用函数的序列。6现代的面向对象应用程序广泛地使用了一种叫做结构化异常处理Structured ExceptionHandling,SHE的技术。SHE 窗口SEH window 可以显示异常处理链。多种不同的搜索search选项可以让你找到二进制代码或数据、命令或命令序列、常量或字符串、符号名或在 Run 跟踪中的一条记录。对于任何地址或常量,对于任何地址或常量,OllyDbgOllyDbgOllyDbgOllyDbg 可以找出参考可以找出参考referencingreferencingreferencingreferencing到该地址或常量的全部到该地址或常量的全部命令的列表。然后命令的列表。然后你你可以在这个列表里找出对可以在这个列表里找出对你你来说是重要的参考。举例来说,某个函数来说是重要的参考。举例来说,某个函数可能被直接调用,或者经过编译器优化后把地址放入寄存器间接调用,或者把地址压入堆可能被直接调用,或者经过编译器优化后把地址放入寄存器间接调用,或者把地址压入堆栈作为一个参数栈作为一个参数没问题,没问题,OllyDbgOllyDbgOllyDbgOllyDbg 会找出所有这样的地方。它甚至能找到并列出会找出所有这样的地方。它甚至能找到并列出所有和某个指定的位置有关的跳转。所有和某个指定的位置有关的跳转。OllyDbg 支持所有标准类型的断点breakpoints非条件和条件断点、内存断点(写入或访问)、硬件断点或在整个内存块上下断点(后两项功能只在 WindowME,NT,2000,XP 中有效)。条件表达式可以非常复杂条件表达式可以非常复杂(“当 ESP+8 的第 2 位被设置,并且123456 位置处的字word小于 10,或者 EAX 指向一个以“ABC”开头的 UNICODE 字串,但跳过前 10 次断点而在第 11 次中断”)。你可以设定一条或多条指令,当程序暂停时由OllyDbg 传递给插件插件plugins。除了暂停,你还可以记录某个表达式的值(可以带有简短的说明),或者记录 OllyDbg 已知的函数的参数。在 Athlon 2600+、Windows2000 环境下,OllyDbg 可以每秒处理多达 25000 个条件断点。另一个有用的特性是跟踪。OllyDbg 支持两种方式的跟踪:hit 和 run。在第一种情况下,它对指定范围内的每条指令上设置断点(比如在全部可执行代码中)。当到达设断的指令后,OllyDbg 清除断点并且把该指令标记为hit。这种方法可以用来检测某段代码是否被执行。Hit 跟踪速度惊人的快,在一个很短时间的启动后程序几乎达到了全速(译者注:这应该是与不进行调试时速度相比而言)。因为 INT3 断点可能对数据有灾难性的影响,所以我建议不要使用模糊识别过程。当代码没有被分析时当代码没有被分析时 HitHitHitHit 跟踪是不可以使用跟踪是不可以使用的。的。Run 跟踪Run trace是一步一步地执行程序,同时记录精确的运行历史和所有寄存器的内容、已知的参数和可选的指令(当代码是自修改时会有帮助)。当然,这需要大量的内存(每个指令需要 15 至 50 个字节,取决于调试的模式)但是可以精确地回溯和分析。你可以只在选定的一段代码甚至是一条指令中进行 Run 跟踪,或者你可以跳过无关紧要的代码。对于每个地址,OllyDbg 能够计算这个地址在 Run 跟踪日志中出现的次数,虽然会导致执行缓慢但是可以得到代码执行的统计。比如说,某命令让你在每个已识别的过程入口处进行Run 跟踪,那么统计profile就会给你每个过程被调用的次数。在到达某条指令、某个地址范围或指令计数器达到某一数值时 Run 跟踪可以自动地暂停pause。在多线程程序里 OllyDbg 可以自动管理线程threads,如果你单步调试或跟踪程序,它会自动恢复当前线程而挂起其它线程。如果你运行程序,OllyDbg 会恢复先前的线程状态。你可以为内存块建立快照(叫做备份可以为内存块建立快照(叫做备份)。OllyDbg 会高亮显示所有的改动。你可以把备份保存到文件或从文件中读取出来,从而发现两次运行的不同之处。你可以查看备份,搜索下一处改动,恢复全部或选定的改动。补丁管理器Patch manager记录了上次应用到程序中的所有补丁,在下次调试时可以再次应用它们。你可以很容易地把你的补丁加在可执行文件上。OllyDbg 会自动进行修正。你不能在带有 Win32 的 16 位 Windows 下使用 OllyDbg。这种 32 位扩展操作系统无7法实现某些必需的调试功能。你既不能调试不能调试 DOSDOSDOSDOS 程序也不能调试程序也不能调试 16161616 位位 NENENENE(NewNewNewNewExecutableExecutableExecutableExecutable)格式文件)格式文件,我也没有打算在未来的版本中支持这些。二、二、二、二、反汇编器反汇编器反汇编器反汇编器DisassemblerDisassemblerDisassemblerDisassembler反汇编器识别所有的标准 80 x86、保护、FPU、MMX 和 3DNow!指令集(包括 Athlon扩展的 MMX 指令集)。但它不识别 ISSI 命令,尽管计划要在下个版本中支持这种命令。某些过时或者未公开的命令,像 LOADALL,也不支持。反汇编器可以正确解码 16 位地址。但它假设所有的段都是 32 位的(段属性使用 32 位)。这对于 PEPortable Executable格式文件总是正确的。OllyDbg 不支持 16 位的 NENewExecutables格式。如果你熟悉 MASM 或者 TASM,那么反汇编的代码对于你没有任何问题。但是,一些特例也是存在的。以下命令的解码与 Intel 的标准不同:AAD(ASCII Adjust AX BeforeDivision)该命令的解码后的一般形式为:AAD imm8AAM(ASCII AdjustAX After Multiply)该命令(非十进制数)的一般解码形式为:AAMimm8SLDT(Store Local DescriptorTableregister)操作数总被解码为 16 位。这个命令的 32位形式会在目的操作数的低 16 位中存储段选择器,并保留高 16 位不变。SALC(Signextend Carrybitto AL,undocumented)OllyDbg 支持这个未公开指令。PINSRW(Insert Word From Integer Register,Athlon extension to MMX)在 AMD 的官方文档中,这个命令的内存形式使用了 16 位内存操作数;然而寄存器形式需要 32 位寄存器,但只使用了低 16 位。为了方便处理,反汇编器解码寄存器为 16 位形式。而汇编器两种形式都支持。CVTPS2PI and CVTTPS2PI(Convert Packed Single Precision Floating to PackedDoubleword,Convert with Truncation Packed SinglePrecision Floating to Packed Doubleword)在这些命令中,第一个操作数是 MMX 寄存器,第二个或者是 128 位 XMM 寄存器或者是64 位内存区域。为了方便处理,内存操作数也被解码为 128 位。有些指令的助记符要依赖操作数的大小:不分大小的形式 明确的 16 位形式明确的 32 位形式PUSHAPUSHAWPUSHADPOPAPOPAWPOPADLOOPLOOPWLOOPDLOOPELOOPWELOOPDELOOPNELOOPWNELOOPDNEPUSHFPUSHFWPUSHFDPOPFPOPFWPOPFDIRETIRETWIRETD你可以改变解码大小敏感助记符decoding of sizesensitive mnemonics。根据选项,8反汇编器从三种可能中选择之一进行解码。这个选项也会影响汇编器的默认处理方式。解码MMX 和 3DNow!指令总是开启的,尽管你的处理器并不支持这些指令。三、分析器三、分析器三、分析器三、分析器AnalysisAnalysisAnalysisAnalysisOllyDbg 整合了一个快速而强大的代码分析器。你可以从快捷菜单,或者在 CPU 窗口的反汇编面板中按 Ctrl+A,或者在可执行模块中选择“分析全部模块Analyzeallmodules”,来使用它。分析器有很高的启发性。它能区分代码和数据,标记入口和跳转目的地址,识别转换表switch tables,ASCII 和 UNICODE 串,定位函数过程,循环,高阶转换highlevelswitches并且能解码标准 API 函数的参数(示例example)。OllyDbg 的其他部分也广泛的使用了分析后的数据。这是如何实现的?我将为你揭开这一神秘面纱。第一遍,OllyDbg 反汇编代码段中所有可能的地址,并计算调用的每个目的地址的个数。当然,很多调用是假的,但不可能两个错误的调用都指向了相同的命令,当然如果有三个的话,就更不可能了。因此如果有三个或者更多的调用指向了相同的地址,我可以肯定的说这个地址是某个频繁使用的子程序的入口。从定位的入口出发,我继续跟踪所有的跳转和函数调用,等等。按这种方法,我可能准确定位 99.9%的命令。但是,某些字节并不在这个链条上。我再用 20 多种高效的启发方法(最简单的方法,比如“直接访问前 64K 内存是不允许的,像在 MOV 0,EAX 中”)来探测他们。有时,分析器在你感兴趣的地方分析错误。有两种解决方法:或者从选中的部分移除分析从选中的部分移除分析(快快捷键退格键捷键退格键),这样 OllyDbg 将使用默认的解码(反汇编)方式;或者设置解码提示 decodinghints并重新分析。注意:在某些情况下,当分析器认为你的提示是不合适的,或者有冲突,则可能忽略你的设置。探测程序的函数过程也很简单。在分析器眼中看来,程序只是一个连绵不断的代码,从一个入口开始,可能达到(至少从理论上)所有的命令(除了 NOP 以及类似的用于填充间隙的命令)。你可能指定三个识别级别。严格的函数过程要求有准确的一个入口,并且至少有一个返回。在启发级别下,分析器只要求过程有一个入口。而如果你选择模糊模式,差不多连贯的代码都会被识别为单独的过程。现代编译器进行全局代码优化,有可能把一个过程分成几个部份。在这种情况下,模糊模式非常有用。但是也会误识别的机率也就更高。同样地,循环是一个封闭的连续的命令序列,并有一个到开始处的跳转作为一个入口,还有若干个出口。循环与高级操作命令 do,while 和 for 相对应。OllyDbgOllyDbgOllyDbgOllyDbg 能够识别任何复能够识别任何复杂的嵌套循环。他们会在反汇编栏杂的嵌套循环。他们会在反汇编栏DisassemblyDisassemblyDisassemblyDisassembly中用长而粗括号标记中用长而粗括号标记。如果入口不是循如果入口不是循环的第一个命令,环的第一个命令,OllyDbgOllyDbgOllyDbgOllyDbg 会用一个小三角进行标记会用一个小三角进行标记。9为了实现一个转换switch,许多编译器,读取转换变量switch variable到寄存器中,然后减它,像如下的代码序列:MOV EDX,SUB EDX,100JBDEFAULTCASEJECASE100;Case100DEC EDXJNE DEFAULTCASE.;Case 101这个序列可能还包含一到两阶的转换表、直接比较、优化和其他元素。如果在比较或跳转的很深处,这就很难知道哪是一个分支Case。OllyDbg 会帮助你,它会标记所有的分支,包 括 默 认 的,甚 至 尝 试 分 析 每 个 分 支 的 含 义,如 A、WM_PAINT 或 者10EXCEPTION_ACCESS_VIOLATION。如果命令序列没有修改寄存器(也就是仅仅由比较组成),那么这可能不是转换,而很有可能是选择嵌套:if(i=0).elseif(i=5).elseif(i=10).如果需要 OllyDbg 将选择嵌套解码成选择语句,请在分析 1Analysis1中设置相关选项。OllyDbg 包含多达 1900 条常用 API 函数,这些都作为内部预处理资源。这个列表包含了 KERNEL32,GDI32,USER32,ADVAPI32,COMDLG32,SHELL32,VERSION,SHLWAPI,COMCTL32,WINSOCK,WS2_32 和 MSVCRT。你可以添加自己的函数描述add your owndescriptions。如果分析器遇到的调用,使用了已知的函数名(或者跳转到这样的函数),它将在调用之前立即解码 PUSH 命令。因此,你只需略微一看就能明白函数调用的含义。OllyDbg 还包含了大约 400 多种的标准 C 函数。如果你有原始的库文件,我推荐你在分析前扫描目标文件。这样 OllyDbg 将能解码这些 C 函数的参数。如果选项“猜测未知函数的参数个数”开启,分析器将会决定这个调用函数过程使用的长度为双字的参数个数。并且标记他们为参数 1Arg1,参数 2 Arg2,等等。注意:无论如何,寄存器参数是无法识别的,所以不会增加参数的数目。分析器使用了一种比较安全的方法。例如,它不能识别的没有参数的函数过程,或者该过程 POP 命令直接做返回前的寄存器恢复,而不销毁参数。然而,识别出来的函数参数数目通常非常高,这大大加大了代码的可读性。分析器能够跟踪整型寄存器的内容。现代优化编译器,特别是奔腾系列,频繁地使用寄存器读取常量和地址,或使用尽量少的使用内存。如果某个常量读取到寄存器中,分析器会注意它,并尝试解码函数和其参数。分析器还能完成简单的算术计算,甚至可以跟踪压栈和出栈。分析器不能区分不同类的名称different kinds of names。如果你将某些函数指定为已知的名称,OllyDbg 将会解码所有到该地址的调用。这是几个预定义的特殊名称 WinMain,DllEntryPoint and WinProc。你可能使用这些标签标记主程序、DLL 的的入口以及窗口过程(注意:OllyDbg 不检查用户自定义的标签是否唯一)。另外,假定预定义参数 assumepredefined arguments 是一种更好的方法,不幸的是,没有一般规则能够做到 100%的准确分析。在某些情况下,例如当模块包含了 PCode 或代码段中包换了大量的数据,分析器可能将一些数据解释成代码。如果统计分析显示代码部分很可能是压缩包或者经过加密了,分析器会发出警告。如果如果你你想使用想使用 HitHitHitHit 跟踪跟踪HitHitHitHit tracetracetracetrace,我建议,我建议你你不要使用模糊分析不要使用模糊分析fuzzyfuzzyfuzzyfuzzyanalysisanalysisanalysisanalysis,因为设置断点的地方可能正是数据部分,因为设置断点的地方可能正是数据部分。自解压文件Selfextractable files 通常有一个自提取器,在“正式”代码段之外。如果你选择自解压选项SFX option中的“扩展代码段,包含提取器Extend codesection toinclude selfextractor”,OllyDbg 将会扩展代码段,形式上允许分析它,并可以使用Hit跟踪Hit trace 和 Run 跟踪Run trace。11四、四、四、四、ObjectObjectObjectObject扫描器扫描器扫描器扫描器ObjectObjectObjectObject scannerscannerscannerscanner扫描器将特定的目标文件或者目标库(包括 OMF 和 COFF 两种格式),提取出代码段,然后将这些段定位在当前模块的代码节Code section中.如果段定位好了,扫描器将从目标文件中的调试信息提取名称(也就是所谓的库标签library labels)。这极大的增加了代码与数据的可读性。扫描器并不会对已识别的目标文件进行标签匹配,所以它不能识别非常小或相似的函数(比如:两个函数只是在重定位有区别)。因此要经常检查扫描器发送到登陆窗口的警告列表!五、五、五、五、ImplibImplibImplibImplib扫描器扫描器扫描器扫描器 ImplibImplibImplibImplib scannerscannerscannerscanner某些 DLL 的输 出符号 仅仅是 一个序 号。许 多符号 都是井 号加数 字(比 如:MFC42.#1003),这非常不便于理解。幸运的是,软件零售商提供了输入连接库(implibs),它与序号符号名相关。使用 implib 扫描器的方- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OD 新手入门 教程 制作 辅助 必备
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【pc****0】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【pc****0】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【pc****0】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【pc****0】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文