描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111744467
编辑推荐
本书为读者提供了有关Arm汇编内部机制和逆向工程方面的基础知识,这是分析和保护数十亿Arm设备的重要基础。 在当前的互联网安全领域,找到并修复Arm设备的安全漏洞是一项关键任务。由于超过90%的移动设备和数十亿的物联网设备,以及包括微软、联想和苹果在内的越来越多的笔记本计算机都在使用Arm处理器,因此这本书介绍的知识也变得越发重要。本书对于那些需要在汇编级别分析基于Arm架构的设备上的软件应用程序的安全研究人员和逆向工程师来说是非常重要的参考资料。其内容既适用于初学者,又适用于经验丰富的专业人士,是一本很好的综合指南。
内容简介
本书由两部分组成。第I部分首先概述ELF文件格式和操作系统的内部结构,然后介绍Arm架构基础知识,并深入探讨A32和A64指令集;第II部分深入探讨逆向工程,包括Arm环境、静态分析和动态分析,以及固件提取和模拟分析等关键主题。本书末尾讲解在macOS中基于Arm的M1 SoC编译的二进制文件的恶意软件分析。 通过阅读本书,读者可以深入理解Arm的指令和控制流模式,这对于针对Arm架构编译的软件的逆向工程至关重要。为帮助逆向工程师和安全研究人员更好地理解逆向工程,本书深入介绍了逆向工程的各个方面,具体包括:?? Arm架构的AArch32和AArch64指令集状态,以及ELF文件格式内部结构;?? Arm汇编内部机制的详细信息,可供逆向工程师分析恶意软件和审计软件安全漏洞使用,以及寻求Arm汇编语言详细知识的开发人员使用;?? Armv8-A架构支持的A32/T32和A64指令集,以及常见的指令和控制流模式;?? 用于静态和动态二进制分析的已知逆向工程工具;?? 在Linux上对Arm二进制文件进行反汇编和调试的过程,以及常用的反汇编和调试工具。
目 录
译者序前言致谢作者简介第一部分 Arm汇编内部机制第1章 逆向工程简介 21.1 汇编简介 21.1.1 位和字节 21.1.2 字符编码 31.1.3 机器码和汇编 41.1.4 汇编 61.2 高级语言 111.3 反汇编 121.4 反编译 13第2章 ELF文件格式的内部结构 152.1 程序结构 152.2 高级语言与低级语言 162.3 编译过程 172.3.1 不同架构的交叉编译 182.3.2 汇编和链接 202.4 ELF文件概述 222.5 ELF文件头 232.5.1 ELF文件头信息字段 242.5.2 目标平台字段 242.5.3 程序入口点字段 252.5.4 表位置字段 252.6 ELF程序头 262.6.1 PHDR 程序头 272.6.2 INTERP程序头 272.6.3 LOAD程序头 272.6.4 DYNAMIC程序头 282.6.5 NOTE程序头 282.6.6 TLS程序头 292.6.7 GNU_EH_FRAME程序头 292.6.8 GNU_STACK程序头 292.6.9 GNU_RELRO程序头 312.7 ELF节头 332.7.1 ELF meta节 352.7.2 主要的ELF节 362.7.3 ELF符号 372.8 .dynamic节和动态加载 402.8.1 依赖项加载 412.8.2 程序重定位 412.8.3 ELF程序的初始化和终止节 442.9 线程本地存储 472.9.1 local-exec TLS访问模型 502.9.2 initial-exec TLS访问模型 502.9.3 general-dynamic TLS访问模型 512.9.4 local-dynamic TLS访问模型 52第3章 操作系统基本原理 543.1 操作系统架构概述 543.1.1 用户模式与内核模式 543.1.2 进程 553.1.3 系统调用 563.1.4 线程 623.2 进程内存管理 633.2.1 内存页 643.2.2 内存保护 653.2.3 匿名内存和内存映射 653.2.4 地址空间布局随机化 693.2.5 栈的实现 713.2.6 共享内存 72第4章 Arm架构 744.1 架构和配置文件 744.2 Armv8-A架构 754.2.1 异常级别 764.2.2 Armv8-A执行状态 814.3 AArch64执行状态 824.3.1 A64指令集 824.3.2 AArch64寄存器 834.3.3 PSTATE 894.4 AArch32执行状态 904.4.1 A32和T32指令集 914.4.2 AArch32寄存器 944.4.3 当前程序状态寄存器 964.4.4 执行状态寄存器 99第5章 数据处理指令 1035.1 移位和循环移位 1055.1.1 逻辑左移 1055.1.2 逻辑右移 1065.1.3 算术右移 1065.1.4 循环右移 1075.1.5 带扩展的循环右移 1075.1.6 指令形式 1075.1.7 位域操作 1125.2 逻辑运算 1205.2.1 位与 1215.2.2 位或 1225.2.3 位异或 1245.3 算术运算 1255.3.1 加法和减法 1255.3.2 比较 1275.4 乘法运算 1305.4.1 A64中的乘法运算 1305.4.2 A32/T32中的乘法运算 1315.5 除法运算 1455.6 移动操作 1465.6.1 移动常量立即数 1465.6.2 移动寄存器 1495.6.3 移动取反 150第6章 内存访问指令 1516.1 指令概述 1516.2 寻址模式和偏移形式 1526.2.1 偏移寻址 1556.2.2 前索引寻址 1626.2.3 后索引寻址 1646.2.4 字面值寻址 1666.3 加载和存储指令 1726.3.1 加载和存储字或双字 1726.3.2 加载和存储半字或字节 1746.3.3 A32多重加载和存储 1776.3.4 A64加载和存储对 186第7章 条件执行 1897.1 条件执行概述 1897.2 条件码 1907.2.1 NZCV条件标志 1907.2.2 条件码 1937.3 条件指令 1947.4 标志设置指令 1977.4.1 指令的S后缀 1977.4.2 测试和比较指令 2017.5 条件选择指令 2077.6 条件比较指令 2097.6.1 使用CCMP的布尔与条件 2107.6.2 使用CCMP的布尔或条件 212第8章 控制流 2158.1 分支指令 2158.1.1 条件分支和循环 2168.1.2 测试和比较分支 2198.1.3 表分支 2208.1.4 分支和切换 2228.1.5 子程序分支 2258.2 函数和子程序 2278.2.1 程序调用标准 2278.2.2 易失性和非易失性寄存器 2288.2.3 参数和返回值 2298.2.4 传递较大值 2308.2.5 叶子函数和非叶子函数 233第二部分 逆向工程第9章 Arm环境 2409.1 Arm板 2419.2 使用QEMU模拟虚拟环境 2429.2.1 QEMU用户模式模拟 2439.2.2 QEMU系统模式模拟 246第10章 静态分析 25210.1 静态分析工具 25210.1.1 命令行工具 25310.1.2 反汇编器和反编译器 25310.1.3 Binary Ninja Cloud 25410.2 引用调用示例 25810.3 控制流分析 26310.3.1 main函数 26410.3.2 子程序 26510.3.3 转换为字符 26910.3.4 if语句 27010.3.5 商除法 27210.3.6
前 言
首先让我回答一个明显的问题:为什么选择“Blue Fox”(蓝狐)这个名字?本书初打算涵盖Arm指令集、逆向工程以及漏洞利用(exploit)缓解内部机制和绕过技术方面的内容。出版商和我很快意识到,要完全涵盖这些主题,可能需要1000页左右的篇幅。因此,我们决定将其拆分成两本书:蓝狐卷和红狐卷。蓝狐卷从分析师的视角介绍开启逆向工程所需的一切。如果没有对基础知识的扎实理解,就无法转向更高级的主题,如漏洞分析和漏洞利用开发。红狐卷从攻击性安全视角介绍漏洞利用缓解内部机制、绕过技术和常见漏洞模式。截至撰写本文时,Armv8-A架构(和Armv9-A扩展)的Arm架构参考手册已有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的作者。与前面的章节不同,这一章并不讨论Arm汇编语言,而是介绍macOS恶意软件为了避免被分析而采用的反分析技术。这一章的目的是介绍适用于苹果芯片(M1/M2)的macOS恶意软件,以便任何对基于Arm的macOS恶意软件感兴趣的人快速入门。我撰写本书花了两年多的时间。我于2020年3月开始写作,当时疫情暴发,我们都被隔离在家中。经过两年的艰辛努力,我很高兴看到它终于问世了。谢谢大家对我的信任。我希望本书能够成为你开始逆向工程之旅的有用指南,让这个旅程更加顺畅和不那么令人望而生畏。
评论
还没有评论。