《ARM汇编与逆向工程 蓝狐卷 基础知识》

简介: 《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

了解更多

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
6月前
|
存储 机器学习/深度学习 编译器
ARM汇编快速入门
ARM汇编快速入门
315 0
|
1月前
|
编译器
【ARM汇编速成】零基础入门汇编语言之基本认识(一)
【ARM汇编速成】零基础入门汇编语言之基本认识(一)
|
1月前
|
存储 编译器 C语言
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
|
1月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
1月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
138 0
|
4月前
|
存储 安全 数据安全/隐私保护
Windows 32 汇编笔记(一):基础知识
Windows 32 汇编笔记(一):基础知识
|
5月前
|
C语言
程序技术好文:部分ARM汇编指令解读
程序技术好文:部分ARM汇编指令解读
|
存储 机器学习/深度学习 数据处理
【8086汇编】基础知识篇
前言:什么是汇编 ​   汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。其实仅从课程关系的角度讨论汇编语言的重要性未免片面,概括地说,如果你想从事计算机科学方面的工作的话,汇编语言的基础是必不可缺的。原因很简单,我们的工作平台、研究对象都是机器,汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列。想深入研究英国文化,不会英语行吗?汇编语言是和具体的微处理器相联系的,每一种微处理器的汇编语言都不一样,只能通过一种常用的、结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编的两个最根本的目的:充分获得底层编程的体验,深刻理解机器运行程序的机理。
|
存储 移动开发 前端开发
linux内核1-GNU汇编入门_X86-64&ARM(下)
linux内核1-GNU汇编入门_X86-64&ARM(下)