- ARM汇编与逆向工程:蓝狐卷·基础知识
- (美)玛丽亚·马克斯特德
- 1747字
- 2024-05-14 11:09:03
前言
首先让我回答一个最明显的问题:为什么选择“Blue Fox”(蓝狐)这个名字?
本书最初打算涵盖Arm指令集、逆向工程以及漏洞利用(exploit)缓解内部机制和绕过技术方面的内容。出版商和我很快意识到,要完全涵盖这些主题,可能需要1000页左右的篇幅。因此,我们决定将其拆分成两本书:蓝狐卷和红狐卷。
蓝狐卷从分析师的视角介绍开启逆向工程所需的一切。如果没有对基础知识的扎实理解,就无法转向更高级的主题,如漏洞分析和漏洞利用开发。红狐卷从攻击性安全视角介绍漏洞利用缓解内部机制、绕过技术和常见漏洞模式。
截至撰写本文时,Armv8-A架构(和Armv9-A扩展)的Arm架构参考手册[1]已有11 952页,而且还在不断扩展。两年前我开始撰写本书时,这个参考手册大约有8000页。
那些习惯了逆向分析x86/64二进制文件但想要适应由Arm驱动的设备的安全研究人员,很难在逆向工程或二进制分析的背景下找到易于理解的Arm指令集资源。Arm的架构参考手册可能会让人感到不知所措和沮丧。在当今这个时代,没有人有时间阅读一份12 000页的技术文档,更不用说识别最相关或最常用的指令并记住它们了。事实上,你不需要知道每一条Arm指令就能对Arm二进制文件进行逆向工程处理。许多指令都有非常具体的用例,这些用例你在分析过程中可能会遇到,也可能永远不会遇到。
本书的目的是让人们更轻松地熟悉Arm指令集并获得足够的知识。我花费了无数个小时来剖析Arm架构参考手册,并将最常见的指令类型及其语法模式进行分类,这样你就不必自己去剖析了。但是,本书并不是最常见Arm指令的列表。它包含了很多在其他任何地方(甚至包括Arm手册本身)都找不到的解释。Arm手册对指令的基本描述相当简短。对于像MOV或ADD这样的简单指令来说,这是可以接受的;然而,许多常见指令执行复杂的操作,其简短描述很难让人理解。因此,你在本书中遇到的许多指令都附有图形说明,以解释在底层实际发生的事情。
如果你是逆向工程的初学者,那么了解二进制文件的文件格式、它的各节、从源代码编译成机器码的过程以及它所依赖的环境是非常重要的。由于篇幅有限,本书无法涵盖每种文件格式和操作系统,因此将重点放在Linux环境和ELF文件格式上。好消息是,无论平台或文件格式如何,Arm指令都不变。即使针对macOS或Windows环境下的Arm二进制文件进行逆向工程处理,指令本身的含义仍然是相同的。
第1章介绍指令的定义和来源。第2章介绍ELF文件格式及其各节,以及编译过程。如果不了解二进制分析的执行环境,那么二进制分析是不完整的,因此第3章概述操作系统基础知识。
有了这些背景知识,你便做好了深入探讨第4章中的Arm架构的准备。第5章介绍最常见的数据处理指令,第6章概述内存访问指令。这些指令是Arm架构——也被称为Load/Store架构——的重要组成部分。第7章和第8章分别讨论条件执行和控制流,这些是逆向工程的关键组成部分。
第9章是特别适合逆向工程师的章节。了解不同类型的Arm环境非常重要,特别是在执行动态分析并需要在执行期间分析二进制文件时。
有了目前提供的信息,你就已经为下一个逆向工程项目做好了充分准备。为了帮助你入门,第10章将概述最常见的静态分析工具,并提供一些实际的静态分析示例,你可以按步骤跟随学习。
如果无法用动态分析方法观察程序在执行期间的行为,逆向工程可能会变得枯燥无味。第11章将介绍最常见的动态分析工具,以及在分析过程中可以使用的有用的命令的示例。该章最后将给出两个实际调试示例:调试内存损坏和使用GDB调试进程。
逆向工程在各种用例中都非常有用。你可以利用自己掌握的Arm指令集和逆向工程技术知识,将自己的技能扩展到不同领域,例如漏洞分析或恶意软件分析。
逆向工程是恶意软件分析师的宝贵技能,但他们还需要熟悉给定恶意软件样本的编译环境。为了帮助你踏入这个领域,本书的第12章将分析arm64 macOS恶意软件,该章由Patrick Wardle撰写,他也是The Art of Mac Malware[2]的作者。与前面的章节不同,这一章并不讨论Arm汇编语言,而是介绍macOS恶意软件为了避免被分析而采用的反分析技术。这一章的目的是介绍适用于苹果芯片(M1/M2)的macOS恶意软件,以便任何对基于Arm的macOS恶意软件感兴趣的人快速入门。
我撰写本书花了两年多的时间。我于2020年3月开始写作,当时疫情暴发,我们都被隔离在家中。经过两年的艰辛努力,我很高兴看到它终于问世了。谢谢大家对我的信任。我希望本书能够成为你开始逆向工程之旅的有用指南,让这个旅程更加顺畅和不那么令人望而生畏。
[1]https://developer.arm.com/documentation/ddi0487/latest
[2]https://taomm.org