《ARM 汇编与逆向工程 蓝狐卷 基础知识》
与传统的 CISC(Complex Instruction Set Computer,复杂指令集计算机)架构相比,Arm 架构的指令集更加简洁明了,指令执行效率更高,能够在更低的功耗下完成同样的计算任务,因此在低功耗、嵌入式等领域具有广泛的应用。同时,由于 ARM 公司采用了开放授权的商业模式,许多芯片厂商都可以使用 Arm 架构进行设计和生产,因此 Arm 架构在移动设备、智能家居、工控等领域也得到了广泛应用。此外,Arm 架构还具有可扩展性和兼容性,可以支持从单核到多核的不同规模和复杂度的处理器设计,并且可以运行各种不同的操作系统,如 Linux、Android 等。
随着 Arm 架构的广泛应用,相关安全事件层出不穷,各类 Arm 设备的安全性亟待提升,设备逆向分析工作需要进一步深入,以了解设备内部实现方式和运行机制,发现潜在的安全漏洞和缺陷,从而加强设备的安全性。此外,分析黑客的攻击载荷和恶意软件,了解攻击者的攻击手段和目的,可以帮助我们及时发现并阻止攻击,从而保护系统和数据。因此,熟练掌握 Arm 逆向分析技术十分重要。
扫码了解 ↑ 京东自营 京东旗舰店
内容简介
《ARM 汇编与逆向工程 蓝狐卷 基础知识》分为 12 章,从基础的字节和字符编码到操作系统原理、Arm 架构和指令,再到静态和动态分析、逆向工程实践,循序渐进地讲解 Arm 逆向工程的方方面面,而且每一章都包含许多实际的案例,可以帮助读者更好地理解和掌握相关知识。同时,书中也介绍了许多工具和技术,如 IDA Pro、Radare2、Binary Ninja、Ghidra、GDB 等,这些工具在实际逆向工程中都有着广泛的应用。此外,本书还介绍了 Arm 环境的构建和使用,可以帮助读者快速搭建自己的 Arm 环境。
总的来说,本书对逆向工程的各个方面都进行了较为全面的介绍,对于想要学习 Arm 逆向工程的读者来说是一本很好的入门书籍,可以帮助读者建立起 Arm 逆向分析技术的知识体系。同时,由于逆向工程领域的不断更新和变化,读者也需要不断学习和探索,才能在实践中获得更多的经验和技能。需要注意的是,在学习逆向工程时要遵守相关法律法规和道德规范,不能侵犯他人的知识产权和隐私权。
作者简介
Maria Markstedter 是全球著名的 ARM 逆向工程专家,2018 年入选 “福布斯 30 岁以下科技精英” 榜单,2020 年获得 “福布斯网络安全年度人物” 奖。
译者简介
ChaMd5 安全团队
国内老牌 CTF 战队,成立于 2016 年,旨在维护企业安全和培养安全人才,为各大企业提供安全服务,著有《CTF 实战:技术、解题与进阶》
目录
前言
致谢
作者简介
第一部分 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 PSTATE 89
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 A32/T32 中的乘法运算 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
第 10 章 静态分析 252
10.1 静态分析工具 252
10.1.1 命令行工具 253
10.1.2 反汇编器和反编译器 253
10.1.3 Binary Ninja Cloud 254
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
第 11 章 动态分析 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 Radare2 309
11.2.2 IDA Pro 309
11.3 调试内存损坏 311
11.4 使用 GDB 调试进程 319
第 12 章 逆向 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
购买链接
购买链接