《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二进制文件进行反汇编和调试的过程,以及常用的反汇编和调试工具。

作者简介:

玛丽亚·马克斯特德(Maria Markstedter)是 Azeria Labs 的创始人兼首席执行官,该公司提供 Arm 逆向工程和漏洞利用的培训课程。在此之前,她在渗透测试和威胁情报领域工作,并担任虚拟化初创公司 Corellium 的首席产品官。

她拥有企业安全学士学位和企业安全硕士学位,并在剑桥依托 ARM 公司从事漏洞利用缓解研究工作。

她因在该领域的贡献而受到认可,曾入选《福布斯》2018 年欧洲科技界“30 位 30 岁以下技术精英”名单,并被评为 2020 年《福布斯》网络安全年度人物。自 2017 年以来,她还是欧洲 Black Hat 和美国培训与简报审核委员会(Trainings and Briefi ngs Review Board)的成员。

目  录:

译者序

前言

致谢

作者简介:

部分 Arm汇编内部机制

第1章 逆向工程简介2

1.1 汇编简介2

1.1.1 位和字节2

1.1.2 字符编码3

1.1.3 机器码和汇编4

1.1.4 汇编6

1.2  语言11

1.3 反汇编12

1.4 反编译13

第2章 ELF文件格式的内部结构15

2.1 程序结构15

2.2  语言与低级语言16

2.3 编译过程17

2.3.1 不同架构的交叉编译18

2.3.2 汇编和链接 20

2.4 ELF文件概述22

2.5 ELF文件头23

2.5.1 ELF文件头信息字段24

2.5.2 目标平台字段24

2.5.3 程序入口点字段25

2.5.4 表位置字段25

2.6 ELF程序头 26

2.6.1 PHDR 程序头27

2.6.2 INTERP程序头27

2.6.3 LOAD程序头27

2.6.4 DYNAMIC程序头28

2.6.5 NOTE程序头28

2.6.6 TLS程序头29

2.6.7 GNU_EH_FRAME程序头29

2.6.8 GNU_STACK程序头29

2.6.9 GNU_RELRO程序头31

2.7 ELF节头33

2.7.1 ELF meta节35

2.7.2 主要的ELF节36

2.7.3 ELF符号37

2.8 .dynamic节和动态加载40

2.8.1 依赖项加载41

2.8.2 程序重定位41

2.8.3 ELF程序的初始化和终止节44

2.9 线程本地存储47

2.9.1 local-exec TLS访问模型50

2.9.2 initial-exec TLS访问模型50

2.9.3 general-dynamic TLS访问模型51

2.9.4 local-dynamic TLS访问模型52

第3章 操作系统基本原理54

3.1 操作系统架构概述54

3.1.1 用户模式与内核模式54

3.1.2 进程55

3.1.3 系统调用56

3.1.4 线程62

3.2 进程内存管理63

3.2.1 内存页64

3.2.2 内存保护65

3.2.3 匿名内存和内存映射65

3.2.4 地址空间布局随机化69

3.2.5 栈的实现71

3.2.6 共享内存72

第4章 Arm架构74

4.1 架构和配置文件74

4.2 Armv8-A架构75

4.2.1 异常级别76

4.2.2 Armv8-A执行状态81

4.3 AArch64执行状态82

4.3.1 A64指令集82

4.3.2 AArch64寄存器83

4.3.3 PSTATE89

4.4 AArch32执行状态90

4.4.1 A32和T32指令集91

4.4.2 AArch32寄存器94

4.4.3 当前程序状态寄存器96

4.4.4 执行状态寄存器99

第5章 数据处理指令103

5.1 移位和循环移位105

5.1.1 逻辑左移105

5.1.2 逻辑右移106

5.1.3 算术右移106

5.1.4 循环右移107

5.1.5 带扩展的循环右移107

5.1.6 指令形式107

5.1.7 位域操作112

5.2 逻辑运算120

5.2.1 位与121

5.2.2 位或122

5.2.3 位异或124

5.3 算术运算125

5.3.1 加法和减法125

5.3.2 比较127

5.4 乘法运算130

5.4.1 A64中的乘法运算130

5.4.2 A32T32中的乘法运算131

5.5 除法运算145

5.6 移动操作146

5.6.1 移动常量立即数146

5.6.2 移动寄存器149

5.6.3 移动取反150

第6章 内存访问指令151

6.1 指令概述151

6.2 寻址模式和偏移形式152

6.2.1 偏移寻址155

6.2.2 前索引寻址162

6.2.3 后索引寻址164

6.2.4 字面值寻址166

6.3 加载和存储指令172

6.3.1 加载和存储字或双字172

6.3.2 加载和存储半字或字节174

6.3.3 A32多重加载和存储177

6.3.4 A64加载和存储对186

第7章 条件执行189

7.1 条件执行概述189

7.2 条件码190

7.2.1 NZCV条件标志190

7.2.2 条件码193

7.3 条件指令194

7.4 标志设置指令197

7.4.1 指令的S后缀197

7.4.2 测试和比较指令201

7.5 条件选择指令207

7.6 条件比较指令209

7.6.1 使用CCMP的布尔与条件210

7.6.2 使用CCMP的布尔或条件212

第8章 控制流215

8.1 分支指令215

8.1.1 条件分支和循环216

8.1.2 测试和比较分支219

8.1.3 表分支220

8.1.4 分支和切换222

8.1.5 子程序分支225

8.2 函数和子程序227

8.2.1 程序调用标准227

8.2.2 易失性和非易失性寄存器228

8.2.3 参数和返回值229

8.2.4 传递较大值230

8.2.5 叶子函数和非叶子函数233

第二部分 逆向工程

第9章 Arm环境240

9.1 Arm板241

9.2 使用QEMU模拟虚拟环境242

9.2.1 QEMU用户模式模拟243

9.2.2 QEMU系统模式模拟246

0章 静态分析252

10.1 静态分析工具252

10.1.1 命令行工具253

10.1.2 反汇编器和反编译器253

10.1.3 Binary Ninja Cloud254

10.2 引用调用示例258

10.3 控制流分析263

10.3.1 main函数264

10.3.2 子程序265

10.3.3 转换为字符269

10.3.4 if语句270

10.3.5 商除法272

10.3.6 for循环273

10.4 算法分析275

1章 动态分析288

11.1 命令行调试289

11.1.1 GDB命令289

11.1.2 GDB多用户模式290

11.1.3 GDB扩展:GEF 292

11.1.4 Radare2 303

11.2 远程调试308

11.2.1 Radare2309

11.2.2 IDA Pro309

11.3 调试内存损坏311

11.4 使用GDB调试进程319

2章 逆向arm64架构的macOS

恶意软件325

12.1 背景326

12.1.1 macOS arm64二进制文件326

12.1.2 macOS Hello World(arm64)329

12.2 寻找恶意arm64二进制文件331

12.3 分析arm64恶意软件337

12.3.1 反分析技术338

12.3.2 反调试逻辑(通过ptrace)339

12.3.3 反调试逻辑(通过sysctl)342

12.3.4 反虚拟机逻辑(通过SIP状态

和VM遗留物检测)346

12.4 总结351


PDF格式:点击下载 ✔
★ 会员全站免费下载 ★