本附录列出了许多反汇编和二进制分析工具,包括逆向工程、反汇编API以及执行跟踪的调试器。
IDA是行业标准的递归反汇编工具,它是交互型的,是内置Python和IDC脚本API的反编译工具,也是目前最好、最强大的反汇编工具之一,但价格昂贵(最低基础版本价格为700美元)。旧版本(v7)是免费提供的,但其仅支持x86-64,且不包含反编译器。
Hopper是比IDA Pro更简单、更便宜的替代方案。尽管开发尚不完善,但其依然具有许多IDA的功能,包括Python脚本和反编译功能。
在线反汇编工具(Online Disassembler,ODA)是一种免费、轻巧的在线递归反汇编工具,非常适合快速实验。可以上传二进制文件或在控制台中输入字节。
Binary Ninja是一款很有前景的工具,它提供了交互式递归反汇编功能,支持多种体系架构,并提供对C、C++和Python脚本的支持。Binary Ninja并非免费,全功能个人版的价格为149美元。
Relyze是一种交互式递归反汇编工具,通过Ruby语言提供二进制文件比对功能。它也是商业产品,但价格比IDA Pro便宜。
Medusa是具有Python脚本功能的、支持多体系结构的交互式递归反汇编工具。与大多数反汇编工具相反,它完全免费和开源。
radare是一个多用途的、面向命令行的逆向工程框架,与其他反汇编工具不同,它提供的是一组工具而不是一个统一的接口,任意的命令行组合使这个框架变得灵活。radare提供了线性和递归两种反汇编模式,并且支持交互式和脚本编写。该框架也是免费并且开源的。
objdump是本书中使用的最流行的线性反汇编工具之一,它是免费并且开源的,是GNU binutils的一部分。objdump几乎可以为所有Linux发行版预打包,在macOS和Windows(如果安装了Cygwin[1])上可用。
GNU调试器(GNU Debugger,GDB)是Linux操作系统上的标准调试器,主要用于交互式调试,其还支持远程调试。虽然可以使用GDB跟踪执行,但第9章展示了其他工具,如Pin,Pin更适合自动化执行。
OllyDbg是一款通用的Windows调试器,具有内置的执行跟踪功能和脱壳二进制文件的高级特性。它是免费的,但并不开源。虽然它没有直接的脚本功能,但是有一个用于开发插件的接口。
Windbg是Microsoft发布的Windows调试器,可以调试用户层和内核模式的代码,以及分析崩溃转储。
Bochs是一款可移植的PC模拟器,可以在大多数平台上运行,你还可以使用它来调试仿真代码。Bochs是开源的,并在GNU LGPL下发布。
Capstone不是一个独立的反汇编程序,而是一个免费的开源反汇编引擎,可以使用该引擎构建自己的反汇编工具。其提供了轻量级的多体系架构API,并支持C / C++、Python、Ruby及Lua等多种语言的绑定。其提供的API允许对反汇编指令的属性进行详细检查,这在构建自定义工具时非常有用。第8章完全专注于使用Capstone构建自定义的反汇编工具。
distorm3是针对x86代码的开源反汇编API,旨在快速进行反汇编,其提供了多种语言的绑定,包括C、Ruby及Python等。
udis86是一个干净、简约、开源以及文档良好的x86反汇编库,可以使用该库在C中构建自己的反汇编工具。
angr是面向Python的逆向工程分析框架,可用作构建自己的二进制分析工具的API。它提供了许多高级功能,包括向后切片和符号执行,并且有相当不错的文档,但正在积极开发中。angr是免费和开源的分析框架。
Pin是动态的二进制检测(有关动态二进制检测的更多信息,请参见第9章)引擎,可用于构建自己的工具,在运行时添加或修改二进制的行为。Pin是免费的,但不开源,它由Intel开发,仅支持Intel CPU体系结构,包括x86。
与Pin一样,Dyninst是一个动态的二进制工具API,但也可以将其用于反汇编。Dyninst是免费并且开源的,比Pin更注重研究。
Unicorn是一种轻量级的CPU仿真器,支持多种平台和体系结构,包括ARM、MIPS及x86。它由Capstone的作者维护,有多种语言绑定,包括C和Python等。Unicorn不是反汇编工具,而是用于构建基于仿真的反汇编工具的分析框架。
libdft是免费的开源动态污点分析库,用于第11章中所有的污点分析示例。libdft的优点是快速且易于使用,其两种变形支持字节粒度的影子内存或者8种污点颜色。
Triton是一款动态二进制分析框架,支持符号执行和污染分析等,读者可以在第13章中了解到它的符号执行功能。Triton也是免费并且开源的。
本文摘自《二进制分析实战》
如今,读者可以找到许多关于汇编的书籍,甚至可以找到更多有关ELF和PE二进制格式的说明。关于信息流跟踪和符号执行也有大量的文章。但是,没有哪本书可以向读者展示从理解基本汇编知识到进行高级二进制分析的全过程。也没有哪本书可以向读者展示如何插桩二进制程序、如何使用动态污点分析来跟踪程序执行过程中的数据或使用符号执行来自动生成漏洞利用程序。换句话说,直到现在,没有一本书可以教你二进制分析所需的技术、工具和思维方式。