-
内容大纲
本书由两部分组成。第一部分首先概述ELF文件格式和操作系统的内部结构,然后介绍Arm架构基础知识,并深入探讨A32和A64指令集;第二部分深入探讨逆向工程,包括Arm环境、静态分析和动态分析,以及固件提取和模拟分析等关键主题。本书末尾讲解在macOS中基于Arm的M1 SoC编译的二进制文件的恶意软件分析。
通过阅读本书,读者可以深入理解Arm的指令和控制流模式,这对于针对Arm架构编译的软件的逆向工程至关重要。为帮助逆向工程师和安全研究人员更好地理解逆向工程,本书深入介绍了逆向工程的各个方面,具体包括:
Arm架构的AArch32和AArch64指令集状态,以及ELF文件格式内部结构;
Arm汇编内部机制的详细信息,可供逆向工程师分析恶意软件和审计软件安全漏洞使用,以及寻求Arm汇编语言详细知识的开发人员使用;
Armv8-A架构支持的A32/T32和A64指令集,以及常见的指令和控制流模式;
用于静态和动态二进制分析的已知逆向工程工具;
在Linux上对Arm二进制文件进行反汇编和调试的过程,以及常用的反汇编和调试工具。 -
作者介绍
-
目录
译者序
前言
致谢
作者简介
第一部分 Arm汇编内部机制
第1章 逆向工程简介
1.1 汇编简介
1.1.1 位和字节
1.1.2 字符编码
1.1.3 机器码和汇编
1.1.4 汇编
1.2 高级语言
1.3 反汇编
1.4 反编译
第2章 ELF文件格式的内部结构
2.1 程序结构
2.2 高级语言与低级语言
2.3 编译过程
2.3.1 不同架构的交叉编译
2.3.2 汇编和链接
2.4 ELF文件概述
2.5 ELF文件头
2.5.1 ELF文件头信息字段
2.5.2 目标平台字段
2.5.3 程序入口点字段
2.5.4 表位置字段
2.6 ELF程序头
2.6.1 PHDR程序头
2.6.2 INTERP程序头
2.6.3 LOAD程序头
2.6.4 DYNAMIC程序头
2.6.5 NOTE程序头
2.6.6 TLS程序头
2.6.7 GNU_EH_FRAME程序头
2.6.8 GNU_STACK程序头
2.6.9 GNU_RELRO程序头
2.7 ELF节头
2.7.1 ELFmeta节
2.7.2 主要的ELF节
2.7.3 ELF符号
2.8 .dynamic节和动态加载
2.8.1 依赖项加载
2.8.2 程序重定位
2.8.3 ELF程序的初始化和终止节
2.9 线程本地存储
2.9.1 local-execTLS访问模型
2.9.2 initial-execTLS访问模型
2.9.3 general-dynamicTLS访问模型
2.9.4 local-dynamicTLS访问模型
第3章 操作系统基本原理
3.1 操作系统架构概述
3.1.1 用户模式与内核模式
3.1.2 进程
3.1.3 系统调用
3.1.4 线程
3.2 进程内存管理
3.2.1 内存页
3.2.2 内存保护
3.2.3 匿名内存和内存映射
3.2.4 地址空间布局随机化
3.2.5 栈的实现
3.2.6 共享内存
第4章 Arm架构
4.1 架构和配置文件
4.2 Armv8-A架构
4.2.1 异常级别
4.2.2 Armv8-A执行状态
4.3 AArch64执行状态
4.3.1 A64指令集
4.3.2 AArch64寄存器
4.3.3 PSTATE
4.4 AArch32执行状态
4.4.1 A32和T32指令集
4.4.2 AArch32寄存器
4.4.3 当前程序状态寄存器
4.4.4 执行状态寄存器
第5章 数据处理指令
5.1 移位和循环移位
5.1.1 逻辑左移
5.1.2 逻辑右移
5.1.3 算术右移
5.1.4 循环右移
5.1.5 带扩展的循环右移
5.1.6 指令形式
5.1.7 位域操作
5.2 逻辑运算
5.2.1 位与
5.2.2 位或
5.2.3 位异或
5.3 算术运算
5.3.1 加法和减法
5.3.2 比较
5.4 乘法运算
5.4.1 A64中的乘法运算
5.4.2 A32/T32中的乘法运算
5.5 除法运算
5.6 移动操作
5.6.1 移动常量立即数
5.6.2 移动寄存器
5.6.3 移动取反
第6章 内存访问指令
6.1 指令概述
6.2 寻址模式和偏移形式
6.2.1 偏移寻址
6.2.2 前索引寻址
6.2.3 后索引寻址
6.2.4 字面值寻址
6.3 加载和存储指令
6.3.1 加载和存储字或双字
6.3.2 加载和存储半字或字节
6.3.3 A32多重加载和存储
6.3.4 A64加载和存储对
第7章 条件执行
7.1 条件执行概述
7.2 条件码
7.2.1 NZCV条件标志
7.2.2 条件码
7.3 条件指令
7.4 标志设置指令
7.4.1 指令的S后缀
7.4.2 测试和比较指令
7.5 条件选择指令
7.6 条件比较指令
7.6.1 使用CCMP的布尔与条件
7.6.2 使用CCMP的布尔或条件
第8章 控制流
8.1 分支指令
8.1.1 条件分支和循环
8.1.2 测试和比较分支
8.1.3 表分支
8.1.4 分支和切换
8.1.5 子程序分支
8.2 函数和子程序
8.2.1 程序调用标准
8.2.2 易失性和非易失性寄存器
8.2.3 参数和返回值
8.2.4 传递较大值
8.2.5 叶子函数和非叶子函数
第二部分 逆向工程
第9章 Arm环境
9.1 Arm板
9.2 使用QEMU模拟虚拟环境
9.2.1 QEMU用户模式模拟
9.2.2 QEMU系统模式模拟
第10章 静态分析
10.1 静态分析工具
10.1.1 命令行工具
10.1.2 反汇编器和反编译器
10.1.3 BinaryNinjaCloud
10.2 引用调用示例
10.3 控制流分析
10.3.1 main函数
10.3.2 子程序
10.3.3 转换为字符
10.3.4 if语句
10.3.5 商除法
10.3.6 for循环
10.4 算法分析
第11章 动态分析
11.1 命令行调试
11.1.1 GDB命令
11.1.2 GDB多用户模式
11.1.3 GDB扩展:GEF
11.1.4 Radare2
11.2 远程调试
11.2.1 Radare2
11.2.2 IDAPro
11.3 调试内存损坏
11.4 使用GDB调试进程
第12章 逆向arm64架构的macOS恶意软件
12.1 背景
12.1.1 macOSarm64二进制文件
12.1.2 macOSHelloWorld(arm64)
12.2 寻找恶意arm64二进制文件
12.3 分析arm64恶意软件
12.3.1 反分析技术
12.3.2 反调试逻辑(通过ptrace)
12.3.3 反调试逻辑(通过sysctl)
12.3.4 反虚拟机逻辑(通过SIP状态和VM遗留物检测)
12.4 总结
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-

孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-

时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-

本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...
[
