序
如今,读者可以找到许多关于汇编的图书,甚至可以找到更多有关ELF和PE二进制格式的说明。关于信息流跟踪和符号执行也有大量的文章。但是,几乎没有哪本书可以向读者展示从理解基本汇编知识到进行高级二进制分析的全过程,也几乎没有哪本书可以向读者展示如何插桩二进制程序、如何使用动态污点分析来跟踪程序执行过程中的数据或使用符号执行来自动生成漏洞利用程序。换句话说,直到现在,几乎没有一本书可以教你二进制分析所需的技术、工具和思维方式。
二进制分析之所以具有挑战性,是因为它需要你理解许多不同的事物。你不仅需要了解汇编程序,也需要了解二进制格式、链接和加载、静态和动态分析、内存布局以及编译器约定,这些只是基础知识。特定的分析或插桩任务可能需要更专业的知识。当然,所有这些事物都需要它们自己的工具。对许多人来说,这个领域看起来如此“令人生畏”,以至于他们甚至还未开始就放弃了。有很多东西要学,但是从哪儿开始呢?
答案是:从本书开始。本书结构合理、易于阅读,几乎汇集了你入门所需的所有知识。它也很有趣!即使你对二进制程序的格式、加载方式或执行时状态一无所知,本书也会通过相应的工具仔细介绍这些内容,以便让你不仅了解它们的工作原理,而且学会如何将其应用到现实情况中。我认为,这是深刻理解的唯一途径。
即使读者已经具有二进制代码分析方面的丰富经验,并且可能擅长使用Capstone、radare、IDA Pro或OllyDbg(或你喜欢的任何工具),本书还是有很多你可能喜欢的知识。本书后面介绍的高级技术将向你展示如何构建一些你能想象到的、非常复杂的分析和插桩工具。
二进制分析是有趣但具有挑战性的技术,通常仅由一小部分专家掌握。随着人们对安全性的日益关注,它也变得越来越重要。我们需要能够分析恶意软件以查看其可能的行为,以及寻找阻止它的方法。但是,越来越多的恶意软件对其自身进行混淆,并应用反分析技术来干扰我们的分析过程,因此我们需要用更复杂的二进制分析方法来应对。
我们也开始越来越多地分析和插桩良性软件,增强现有二进制程序的安全性,提高其对抗攻击的能力。如我们希望插桩现有的C ++编译的二进制文件,以确保所有(虚)函数调用的目标为合法的。为此,我们首先需要分析二进制文件以识别方法和函数调用,然后我们需要进行插桩,并确保在插桩时,程序的原始语义得以保留。这说起来容易,做起来难。
我们中的许多人开始学习这些技术是因为我们偶然发现了一个问题,该问题对我们而言既令人着迷又过于复杂。该问题可能是任何事情,如你想将游戏机变成一台通用计算机、破解某些软件或者找出你在计算机上发现的恶意软件的工作方式。
令人尴尬的是,就我而言,我只是想破解一些视频游戏(原谅我的年少无知)。因此,我自学了汇编程序,并在二进制文件中寻找检测机制。当时是“6510的时代”,6510是带有累加器和两个通用寄存器的8位处理器。尽管使用全部64KB的内存需要一系列奇奇怪怪的操作,但是系统很简单。不过,一开始我没有任何进展。一段时间后,我从经验丰富的朋友那里学到一些东西,事情开始变得清晰起来。这个过程很有趣,但也很痛苦、令人沮丧且漫长无垠。我本来不会想要通过读一本书来指导我完成此过程,但现代64位x86处理器要比6510复杂得多,生成二进制文件的编译器也是如此。现在理解代码比以往任何时候都更具挑战性。如果有人为你规划路线并强调容易忽视的地方,这会使过程变得更短、更有吸引力、更有趣。
Dennis Andriesse是二进制分析领域的专家,他的二进制分析的博士学位证明了这一点。但是,他不像其他“发表论文的学者”,他的大部分工作基于实践。例如,他是世界上少数对臭名昭著的“GameOver Zeus”僵尸网络进行逆向分析的人之一,该僵尸网络造成了超过1亿美元的损失;他也是少数参与FBI领导的关闭“GameOver Zeus”僵尸网络行动的安全专家之一。在研究恶意软件时,他体会到现有二进制分析工具的优点和局限性,并提出改进的构想。Dennis开发的反汇编技术现已被诸如Binary Ninja之类的商业产品采用。
但是,只成为一名专家还不够。为了写一本有意义的书,作者还需要知道如何写作。Dennis Andriesse兼具这两种才能:他是二进制分析专家,可以用简单的术语解释最复杂的概念,而不会影响知识水准;他的讲解风格令人愉悦,示例清晰且具有说明性。
我个人很想买一本这样的书。多年来,我一直在阿姆斯特丹的弗里耶大学(Vrije Universiteit)不用教材地教授一门关于恶意软件分析的课程,这完全是因为没有一本合适的书。取而代之的是,我使用了各种临时的在线资源、教程及内容丰富的演示文稿。每当学生问到为什么我们不使用教材时(每年都会有学生这样问),我告诉他们我没有找到一本合适的二进制分析的书,但是如果我有时间的话,也许将来有一天我会写一本这样的书。当然,我从未动笔。
这是一本关于二进制分析的书,我希望有一天我也能写一本这样的书,但我从未实现过,而且这本书比我所能写出来的要好。
祝你学习旅途愉快。
赫伯特·博斯(Herbert Bos)