您的位置:首页精文荟萃破解文章 → OllyDbg的help-分析模块介绍(翻译)

OllyDbg的help-分析模块介绍(翻译)

时间:2004/10/15 0:58:00来源:本站整理作者:蓝点我要评论(0)

 说明一下:
本人是菜菜鸟。刚刚接触OllyDbg,发现中文资料很少,于是去啃它的help。
本人英文也不大好,看英文总没中文顺畅,所以尝试翻译一下,加深理解。
顺便也让和我一样英文不佳的人轻松点。多数是意译,有不确的地方,敬请见谅,并指出。
高手和英文通们就不必看了
分析
OllyDbg集成了快速超强的代码分析器。装载它,可以用弹出式菜单或者CPU窗口
的反汇编栏按Ctrl+A或者在执行模块选“Analyze all modules”。
分析器非常有用。它在数据中分辨代码,标记入口点和jump的目标,辨认switch  
tables,ASCII和UNICODE字符串,定位过程、循环、高级switch语句和解码标准
API函数参数(看范例)。OllyDbg的其它部分也广泛用于数据分析。
这怎么可能呢?我稍微介绍一下原理。首先,OllyDbg反汇编代码区所有可能的地
址,记下所有发现的调用及指向的目标。当然,许多这样的调用不正确,但是未
必会有两个错误的调用指向同一条命令,并且三个或三个以上更不可能。这样,
三个或更多调用指向同一地址,我就确信该地址是经常使用的子过程入口。从这
个入口开始,我跟踪所有的跳转和调用,反复操作。这种方法使我99.9%确定所
有命令。然而,某些字节不在这条链中,我采用大约20个更高效的方法(最简单
的如:“MOV [RA],Ra"是无效命令).
过程检测也简单。过程,从分析器的角度看,就是从入口开始的代码的连续区域
,(理论上)可以到达其它命令(除NOP或对齐填充外)。你可以指定三种识别级
。Strict级严格确认一个入口和至少一个出口。heuristical级,分析器尝试确认
入口。如果你选择fuzzy级,或多或少相容的代码区被分离为过程。现代编译器把
过程分成几个部分作公用代码优化。这种情况下,fuzzy级特别有用!然而,误解
的概率也相当高。
类似的,loop是一个封闭的连续命令序列,这里最后的命令跳到开头、一个入口
几个出口。Loop相当于高级操作语言中的do,while和for。OllyDbg能认识任何复
杂的嵌套循环。在反汇编区,他们用长长的大括号标记。如果入口不是循环的第
一条命令,OllyDbg用个小三角形作标记。
实现switch语句,多数编译器把switch变量装入寄存器,然后减去一部分,像下
面代码序列一样:
    MOV EDX,
    SUB EDX,100
    JB DEFAULTCASE
    JE CASE100        ; Case 100
    DEC EDX
    JNE DEFAULTCASE
    ...               ; Case 101
这些序列也可能包含一级或两级switch表,直接比较,优化,填充等等。如果你
深入研究比较和跳转树,很难说哪一条命令是某个case语句。OllyDbg为你代劳。
它标记所有的case语句,包括default,甚至尝试猜测case的意思,如'A',  
WM_PAINT 或者 EXCEPTION_ACCESS_VIOLATION。如果命令序列不修改寄存器(只
由比较命令构成),那么不大可能是switch语句,但可能是if嵌套:
    if (i==0) {...}
    else if (i==5) {...}
    else if (i==10) {...}
让OllyDbg解码if嵌套为switch,选择Analysis1中相应的选项。
OllyDbg预置超过1900个常用API函数的描述。包括KERNEL32, GDI32, USER32,  
ADVAPI32, COMDLG32, SHELL32, VERSION, SHLWAPI, COMCTL32, WINSOCK,  
WS2_32 和 MSVCRT。你也可以加入自己的描述。如果分析器遇到已知函数名的调
用(或跳转到该函数),它尝试解码调用跟前的PUSH命令。因此,你可以粗略翻
译该调用的功能。OllyDbg也内置大约400个标准C函数的描述。如果你利用新库,
我建议你分析前先扫描对象文件。这种情况下,OllyDbg也会解码已知的C函数参
数。
如果选项“Guess number of arguments of unknown functions”被设置,分析
器尝试确认调用过程进栈的双字数目,并标记他们为参数Arg1,Arg2等等。注意:
如果有寄存器参数,OllyDbg还是不认识也不包括在上面的统计中。分析器采用了
一个安全的方法。例如,它不分辨无参数过程和返回前用POP恢复寄存器代替舍弃
参数的case语句。然而,能分辨出的函数数目相当多,并非常有助于提高代码的
可读性。
分析器能跟踪寄存器的值。现代优化编译器,特别是面向Pentium的,经常把常量
和地址装入寄存器便于重复使用或减小内存占用空间。如果一些常量装入寄存器
,分析器会注意它,并用于解码函数及其参数。还能执行简单的算术计算跟踪
push和pop命令。
分析器不能区别不同类型的名字。如果你用已有的名字命名一些函数,OllyDbg会
解码所有该地址的调用为原过程。WinMain,DllEntryPoint和WinProc是特殊的预
定义名。你可以使用这些标号标记主程序入口,DLL入口指针和window过程(注意
:OllyDbg不会检查用户定义标号的唯一性)。当然,最好的方法是显示已定义的
参数。
非常不幸,没有一般的规则用于100%的准确分析。有些情况下,例如当模块包含
p-代码或者代码区嵌入大量数据,分析器可能认为部分数据是代码。如果统计分
析显示代码可能被打包或加密,分析器会警告你。如果你想用hit跟踪方式,我建
议你不要用fuzzy分析方式,否则断点被设置在被误认为代码的数据上的几率很高。
自解压文件通常在主体代码外有解压代码。如果你选择SFX选项“Extend code  
section to include self-extractor”,OllyDbg会扩大代码区,形式上允许分
析它并跟踪。
    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程