首页
社区
课程
招聘
[原创]软件逆向-反汇编工具比较
发表于: 2011-6-6 16:15 15170

[原创]软件逆向-反汇编工具比较

2011-6-6 16:15
15170
以前写的,放在本里面很久了,一直没动。拿出来像大牛学习下。别拍砖

  软件逆向工具:反汇编器比较
  time:2009-10
  author:fenggui321
--------------------------------------------------------------------------------------

摘要: 
     软件逆向工程作为一种分析软件关键功能实现和软件架构设计的的手段,在软件安全和软件开发中有广泛应用。在软件开发中,通过逆向手段可以实现与专利软件的互操作、开发竞争软件,同时可以借助逆向评估软件的质量和健壮性。本文就软件逆向分析中常用静态反汇编工具实现进行比较和分析。

关键词:软件逆向  线性扫描   递归遍历   反汇编器 

一.逆向工程及工具介绍
     软件逆向工程(Software Reverse Engineering)又称软件反向工程,是指从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、 算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等.通常,人们把对软件进行反向分析的整 个过程统称为软件逆向工程,把在这个过程中所采用的技术统称为软件逆向工程技术.    
    逆向工程的目标是理解一个软件系统以便于更容易地进行增强功能、更正、增加文档、再设计或者用其他的程序设计语言再编码.逆向工程工具支持产生程序的高层 抽象,使维护者更容易理解程序,重用旧代码,以及准确加入新功能,避免死码的产生.这正是逆向工程工具的研究目的和意义.做为逆向的初步工作反--反汇编结果的正确将直接影响后期的分析。目前主要的反汇编工具如表1:
反汇编/调试器名称  反汇编方式
OllyDbg                   递归遍历
NuMega SoftICE  线性扫描
Microsoft   WinDbg  线性扫描
IDA Pro                  递归遍历
PEBrowse Professional(包括交互式反汇编版本)  递归遍历
表1:常见逆向工程工具和反汇编器体系结构
二.反汇编方式比较
   按照反汇编方式可分为线性扫描和递归遍历方式。线性扫描简单对整个模块中每条指令按顺序进行反汇编。递归遍历依据程序的控制流遍历指令进行分析和反汇编。我们以如下指令进行测试:
                 Jmp   Junk;
                _emit  0x0f;
           Junk:
                 Mov  eax,[some]
                [some code]

各种反汇编工具结果:
WinDbg  
-----------------------------------
jnp     763f6017
cld
call    image00400000+0x1118 (00401118)
push   offset image00400000+0xe004 (0040e004)

OllyDbg  
---------------------------------------
jmp short test.0040100E
db 0F
mov eax,dword ptr ds:[ebx]
push eax

IDA pro    
------------------------------------------     
jmp     short loc_40100F
.text:0040100C ;            ?
.text:0040100E       db 0Fh
.text:0040100F ;            
.text:0040100F
.text:0040100F loc_40100F:     ; CODE XREF: sub_401000+C j

PEBrowse Professional   
-------------------------------
JMP         0x40100E     ; (*+0x3)                                                             
; Section: .text
MOV     EAX,DWORD PTR [EBX]; <==0x0040100B(*-0x3)
PUSH        EAX      

从测试指令1反汇编结果中可以看出_emit 指令迷惑了线性扫描方式。递归遍历方式则成功反汇编出结果。   
测试指令二:     mov eax,2;
              cmp eax,2               
              je junk;
              _emit 0x0f;
                 junk:  [somecode]

OllyDbg  
---------------------------
mov eax,2
cmp eax,2
je short test2.00401016
db 0F
mov eax,dword ptr ds:[ebx] 

IDA pro
---------------------------
mov     eax, 2
cmp     eax, 2
jz      short near ptr loc_401015+1
loc_401015: ; CODE XREF: sub_401000+13 j
jnp     near ptr 763F601Eh
cld
call    sub_40111F

PEBrowse Professional  
---------------------------
MOV         EAX,0x2            
CMP         EAX,0x2            
JE          0x401016           ; (*+0x3)  
JPO         0x763F601E     ;Section: .text
MOV         EAX,DWORD PTR [EBX]; <==0x00401013(*-0x3)
表3:测试指令2反汇编结果
可见控制流变换和暗晦谓词成功欺骗了IDA Pro。
测试指令3:mov eax,2;
        cmp eax,3               
        je trap;
         jne junk;
      trap:
      _emit 0x0f;
      junk:
      mov eax,dword ptr[ebx];  
  
OllyDbg  
---------------------------
mov eax,2
cmp eax,3
je short test3.00401017
jnz short test3.00401018
jpo 763F6020
cld
call test3.00401121

PEBrowse Professional
---------------------------
MOV         EAX,0x2            
CMP         EAX,0x3            
JE          0x401017           ; (*+0x4)  
JNE         0x401018           ; (*+0x3)  
JPO         0x763F6020         ; <==0x00401013(*-0x4) ; Section: .text
MOV         EAX,DWORD PTR [EBX]; <==0x00401015(*-0x3) 
表4:测试指令3反汇编结果
     从表中可以看出复杂变换控制流成功迷惑了OllyDbg。但PEBrowse Professional成功识别了这种控制流。
  总结:递归方式较线性扫面能更好的对文件进行反汇编。但对于暗晦谓词和复杂控制流变换在没有相应处理脚本情况下,很难正确判断。

三.调试功能比较
     在上述中调试器中OllyDbg、IDA Pro、PEBrowse Professional均为用户模式调试器。WinDbg和SoftICE则为内核模式调试器,能够对操作系统内核代码进行调试。WinDgb则由于和windows操作系统的紧密结合,可以方便的调试DLL初始化代码和内核,同时在调试过程中下载对应符号信息,方便理解调试程序。

四.总结
各种反汇编器能有效帮助逆向工程师进行逆向分析。对于上述的简单复杂控制流和暗晦谓词能通过数据流分析能容易获得正确的汇编源码。但如果将真正跳转地址导出到一个重要的、运行时生成的数据结构中就更难的到正确的反汇编结果了。这也是反逆向的一种方式。
对于逆向中反汇编和调试工具的选择可根据需要选择。

参考文献:
[1].基于逆向工程的信息隐藏软件研究[J].钱思进,何德全, 端木庆峰等 《华中科技大学学报(自然科学版)》 2007年 第35卷 第九期
[2].基于 MDA 的软件逆向工程研究及应用[J].  於在稳,谢强,丁秋林 《中国制造业信息化》  第36卷 第21期2 007年
[3].软件逆向工程技术研究[J].严秀,李龙澍 《计算机技术与发展》.第19卷 第4期2009年
[4].基于IDA•Pro的软件逆向分析方法[J]. 秦青文 王杭 孙姐光 梅文华 <<计算机工程>>    第34卷 第24期 2008年 
[5].结合逆向工程和fuzz 技术的 Windows软件漏洞挖掘模型研究[J].  刘坤  《成都信息工程学院学报》 第23 卷第2 期  2008年
[6].<<Reversing:逆向工程揭秘>>[美] Eldad Eilam 著  韩琪 杨艳等译 电子工业出版社.北京 2007年9月

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
IDA。。很强大的。。。
你是不是要它强制分析了?
2011-6-6 19:11
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
给力,不知道用的反汇编引擎有何差异。
2011-6-6 19:35
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
原来还会产生这些差异啊。。
2011-6-6 20:44
0
雪    币: 175
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个。。呃  在winxp sp3  + IDA pro 5.5 非正版授权上的静态结果。欢迎指正!
2011-6-6 21:11
0
游客
登录 | 注册 方可回帖
返回
//