反汇编器是一种工具程序,可以将机器代码转换为目标处理器专用的汇编代码或汇编指令。将机器代码转换为汇编代码的过程称为反汇编。就操作而言,反汇编就是汇编/交叉汇编的逆过程。
简述
汇编最早是一个动词,指的是将源代码翻译成
机器码的过程,翻译过程结束以后,得到的就是汇编代码。汇编代码只有机器能够识别并且直接执行,而不方便程序员编写和阅读,于是人们就发明了汇编助记符,用英文缩写来对应相应的机器代码。
汇编语言的编译程序所完成的工作就是将程序员用汇编助记符编写的汇编程序翻译成机器代码,让计算机按照用户的意图执行指令。人们已经将汇编和汇编助记符的概念混淆了。机器代码可以直接对应到汇编助记符的形式,反汇编器的作用就是将机器代码反向翻译到汇编助记符,让我们能够理解只有机器才能理解的
二进制代码的含义。
例如一条指令:xor ebx,ebx,将ebx寄存器自身与自身进行异或操作,结果就是将ebx寄存器清零,这条指令对应的机器码是0x33,0xDB,这条指令在存储器上就是按照0x33,0xDB代码形式保存的,要看懂这条指令的含义就必须借助反汇编器将它翻译到汇编助记符的形式xorebx,ebx。
在调试器中必然会自带简单的反汇编引擎,但是这些反汇编引擎功能有限,除了反汇编功能以外没有太多的额外功能,要完成更多的功能,必须有专业反汇编程序的帮助。用得比较多的反汇编器有IDA Pro和W32Dasm。其中IDA Pro功能最为强大,能将可执行代码反汇编到多种硬件平台的指令集,配有众多的反汇编选项,能根据目标程序的编译器识别出很多函数和参数甚至结构体并且自动标注。此外还支持改名、内建简单调试器及支持很多高级功能,完全可以满足各种的工作需要。
应用场景
通常,使用反汇编器是为了在没有源代码的情况下对程序进行理解,需要进行反汇编的常见情况包括以下几种。
(1)分析恶意软件。通常,恶意软件的作者很少会提供他们“作品”的源代码,除非是一种基于脚本的蠕虫。由于缺乏源代码。要准确地了解恶意软件的运行机制是很困难的。动态分析和静态分析是分析恶意软件的两种主要技术。动态分析是指在严格控制的环境中执行
恶意软件,并使用系统检测实用工具记录其所有行为。相反,静态分析则试图通过浏览程序代码来理解程序的行为。此时要查看的就是对恶意软件进行反汇编之后得到的代码清单。
(2)分析闭源软件的漏洞。为了简单起见,将整个安全审核过程划分成3个步骤:发现漏洞、分析漏洞和开发破解程序。无论是否拥有
源代码,都可以采用这些步骤来进行安全审核。但是,如果只有二进制文件,那就更加困难。这个过程的第一个步骤是发现程序中潜在的可供利用的条件。一般情况下,可以通过模糊测试等动态技术来达到这一目的,也可通过静态分析来实现(相对比较困难)。一旦发现漏洞,通常需要对其进行深入分析,以确定该漏洞是否可被利用,如果可利用,可在什么情况下利用。至于编译器究竟如何分配程序变量,反汇编代码清单提供了详细的信息。例如,程序员声明的一个70字节的字符数组,在由
编译器分配时,会扩大到80字节,知道这一点会非常有用。另外,要了解编译器到底如何对全局声明或在函数中声明的所有变量进行排序,查看反汇编代码清单是唯一的办法。在开发破解程序时,了解变量之间的这些空间关系往往非常重要。最后,通过使用反汇编器和调试器,就可以开发出破解程序。
(3)分析闭源软件的互操作性。如果仅以二进制形式发布一个软件,竞争对手要想创建可以和它互操作的软件,或者为该软件提供插件。将会非常困难。针对某个仅有一种平台支持的硬件而发布的驱动程序代码,就是一个常见的例子。如果厂商暂时不支持,或者拒绝支持在其他平台上使用他们的硬件,那么为了开发支持该硬件的软件驱动程序,可能需要完成大董的逆向工程工作。在这些情况下,静态代码分析几乎是唯一的补救方法。通常,为了理解嵌入式固件,还需要分析软件驱动程序以外的代码。
(4)分析编译器生成的代码,以验证编译器的性能和准确性。由于编泽器或汇编器的用途是生成机器语言,因此优秀的反汇编工具通常需要验证编译器是否符合设计规范。除准确性外,分析人员还可以从中寻找优化编译器输出的机会,查知编译器本身是否容易被攻破,以至于可以在生成的代码中插入后门等。
(5)在调试时显示程序指令。在调试器中生成代码清单,可能是反汇编器最常见的一种用途。遗憾的是,调试器中内嵌的反汇编器往往相当简单(OllyDbg是一个例外)。它们通常不能批量反汇编。在无法确定函数边界时,它们有时会拒绝反汇编。因此,在调试过程中,为了解详细的环境和背景信息,最好是结合使用调试器与优秀的反汇编器。
常见反汇编器
1.IDA PRO反汇编器
交互式反汇编器专业版( Interactive Disassembler Professional,IDA PRO) ,是一个世界顶级的交互式反汇编工具。从本质上说,IDA PRO是一种递归下降反汇编器,既能区分数据与代码,还设法确定这些数据的类型,这样可以更好地反汇编和更深层地分析。从功能上看,IDA PRO共有两个版本:标准版和高级版。这两个版本的主要区别在于他们支持反汇编的处理器体系结构数量不同。标准版支持30多种处理器,而高级版则支持50多种处理器。高级版支持的其他体系结构包括Itanium、AMD64、MIPS、PPC和SPARC等。
2.W32Dasm反汇编器
W32Dasm是一种强大的反汇编工具,操作简单,使用方便,通常为程序员所使用,当然也可被用来Crack软件,很适合Cracker使用。
W32Dasm是一个静态反汇编工具,也是破解员常用的工具之一,被称为破解人的“屠龙刀”。W32Dasm10.0修改版是经Killer在W32Dasm8. 93基础上修改的,修改后的W32Dasm功能更强大,能完美显示中文字符串及VB程序,内含16进制编辑器,破解修改软件更容易,可谓是反汇编极品。