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

news2024/11/15 21:25:09

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

与传统的 CISC(Complex Instruction Set Computer,复杂指令集计算机)架构相比,Arm 架构的指令集更加简洁明了,指令执行效率更高,能够在更低的功耗下完成同样的计算任务,因此在低功耗、嵌入式等领域具有广泛的应用。同时,由于 ARM 公司采用了开放授权的商业模式,许多芯片厂商都可以使用 Arm 架构进行设计和生产,因此 Arm 架构在移动设备、智能家居、工控等领域也得到了广泛应用。此外,Arm 架构还具有可扩展性和兼容性,可以支持从单核到多核的不同规模和复杂度的处理器设计,并且可以运行各种不同的操作系统,如 Linux、Android 等。

随着 Arm 架构的广泛应用,相关安全事件层出不穷,各类 Arm 设备的安全性亟待提升,设备逆向分析工作需要进一步深入,以了解设备内部实现方式和运行机制,发现潜在的安全漏洞和缺陷,从而加强设备的安全性。此外,分析黑客的攻击载荷和恶意软件,了解攻击者的攻击手段和目的,可以帮助我们及时发现并阻止攻击,从而保护系统和数据。因此,熟练掌握 Arm 逆向分析技术十分重要。

image-20240316212013619

image-20240316212025414

扫码了解 ↑ 京东自营 京东旗舰店

内容简介

《ARM 汇编与逆向工程 蓝狐卷 基础知识》分为 12 章,从基础的字节和字符编码到操作系统原理、Arm 架构和指令,再到静态和动态分析、逆向工程实践,循序渐进地讲解 Arm 逆向工程的方方面面,而且每一章都包含许多实际的案例,可以帮助读者更好地理解和掌握相关知识。同时,书中也介绍了许多工具和技术,如 IDA Pro、Radare2、Binary Ninja、Ghidra、GDB 等,这些工具在实际逆向工程中都有着广泛的应用。此外,本书还介绍了 Arm 环境的构建和使用,可以帮助读者快速搭建自己的 Arm 环境。
总的来说,本书对逆向工程的各个方面都进行了较为全面的介绍,对于想要学习 Arm 逆向工程的读者来说是一本很好的入门书籍,可以帮助读者建立起 Arm 逆向分析技术的知识体系。同时,由于逆向工程领域的不断更新和变化,读者也需要不断学习和探索,才能在实践中获得更多的经验和技能。需要注意的是,在学习逆向工程时要遵守相关法律法规和道德规范,不能侵犯他人的知识产权和隐私权。

作者简介

Maria Markstedter 是全球著名的 ARM 逆向工程专家,2018 年入选 “福布斯 30 岁以下科技精英” 榜单,2020 年获得 “福布斯网络安全年度人物” 奖。

image-20240316212141642

译者简介

ChaMd5 安全团队

国内老牌 CTF 战队,成立于 2016 年,旨在维护企业安全和培养安全人才,为各大企业提供安全服务,著有《CTF 实战:技术、解题与进阶》

image-20240316212201983

目录

前言

致谢

作者简介

第一部分  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

image-20240316212212760

购买链接

购买链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1528213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Ubuntu】FTP站点搭建

配置顺序 前提条件:确保软件仓库可以正常使用,确保已正常配置IP地址 1.安装FTP服务 2.编辑FTP配置文件 3.设置开机自启 4.创建用户 5.配置用户限制名单 6.重启服务 7.查看运行状态 8.测试在同一局域网下的Windows查看文件 1.安装FTP服务 sudo apt insta…

AWS监控,AWS 性能监控工具

监控云部署的性能是 IT 环境正常运行的内在条件。AWS 云是一个架构良好的框架,管理员可以使用专用的AWS 性能监控工具增强服务的功能。执行AWS监视是为了跟踪在AWS环境中积极运行的应用程序工作负载和资源。AWS监视器跟踪各种AWS云指标,以帮助提高在其上…

html--蝴蝶

<!DOCTYPE html> <html lang"en" > <head> <meta charset"UTF-8"> <title>蝴蝶飞舞</title> <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.cs…

使用Navicat远程连接Linux中的MySQL

一、登录MySQL数据库 mysql -uroot -pXjm123456 二、使用mysql数据库 use mysql&#xff1b; 三、查询user表中包含host的字段 select user,host from user;### 该字段中&#xff0c;localhost表示只允许本机访问&#xff0c;可以将‘localhost’改为‘%’&#xff0c;‘%’表…

目标检测——YOLOv4算法解读

论文&#xff1a;YOLOv4&#xff1a;Optimal Speed and Accuracy of Object Detection 作者&#xff1a;Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/pdf/2004.10934.pdf 代码&#xff1a;https://github.com/AlexeyAB/darkne…

【洛谷 P9232】[蓝桥杯 2023 省 A] 更小的数 题解(字符串+区间DP)

[蓝桥杯 2023 省 A] 更小的数 题目描述 小蓝有一个长度均为 n n n 且仅由数字字符 0 ∼ 9 0 \sim 9 0∼9 组成的字符串&#xff0c;下标从 0 0 0 到 n − 1 n-1 n−1&#xff0c;你可以将其视作是一个具有 n n n 位的十进制数字 n u m num num&#xff0c;小蓝可以从 n…

数据结构奇妙旅程之红黑树

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

【Selenium(四)】

一、浏览器操作 1、设置浏览器缩放大小 driver.set_window_size(长,宽) 2、浏览器的前进后退 #前进 driver.forward()#后退 driver.back() 3、浏览器的刷新 driver.refresh() 二、webdriver常见方法

#linux(使用apt-get下载)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;设置下载源 &#xff08;2&#xff09;在终端切换到root&#xff0c;然后输入apt-get update更新下载源 &#xff08;3&#xff09;安装一…

MATLAB的使用(一)

一&#xff0c;MATLAB的编程特点 a,语法高度简化&#xff1b; b,脚本式解释型语言&#xff1b; c,针对矩阵的高性能运算&#xff1b; d,丰富的函数工具箱支持&#xff1b; e,通过matlab本体构建跨平台&#xff1b; 二&#xff0c;MATLAB的界面 工具栏:提供快捷操作编辑器…

【机器学习】无监督学习算法之:自编码器

自编码器 1、引言2、自编码器2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 今天可以讲一讲 自编码器嘛 小鱼&#xff1a;请说清楚&#xff0c;是什么编码器&#xff1f; 小屌丝&#xff1a;自编码器 小鱼&#…

【LabVIEW FPGA入门】并行执行

利用图形化编程的并行特性以及 FPGA 上 LabVIEW 图的真正并行实现&#xff0c;您可以通过将应用程序代码划分为更小的进程来进一步优化执行速度。与整个应用程序在一个循环中运行相比&#xff0c;这使得每个进程能够实现更高的循环速率和更高的应用程序整体执行速率。 …

Java-SpringAop 编程式事物实现

SpringAop 编程式事物实现 1. 数据库事物特性 原子性 多个数据库操作是不可分割的&#xff0c;只有所有的操作都执行成功&#xff0c;事物才能被提交&#xff1b;只要有一个操作执行失败&#xff0c;那么所有的操作都要回滚&#xff0c;数据库状态必须回复到操作之前的状态 …

【11】工程化

一、为什么需要模块化 当前端工程到达一定规模后,就会出现下面的问题: 全局变量污染 依赖混乱 上面的问题,共同导致了代码文件难以细分 模块化就是为了解决上面两个问题出现的 模块化出现后,我们就可以把臃肿的代码细分到各个小文件中,便于后期维护管理 前端模块化标准…

杰理-手表-卡槽式的sd卡热插拔

杰理-卡槽式的sd卡热插拔 卡槽式的sd卡热插拔&#xff0c;需要把TCFG_SD_ALWAY_ONLINE_ENABLE这个宏关掉

KT1328A主从一体蓝牙模块方案_主机使用流程以及开机返回信息说明

在KT6368A芯片基础上&#xff0c;新增KT1328A蓝牙主从一体版本&#xff0c;实现的是主从一体相互切换&#xff0c;可以设置为主机【类似于手机的角色】&#xff0c;也可以设置为从机角色&#xff0c;通过AT指令 不支持SPP&#xff0c;不支持低功耗 。功耗和之前KT6368A双模版本…

C#,图论与图算法,图(Graph)广度优先遍历(BFS,Breadth First Search)算法与源代码

1 深度优先算法与 宽度优先遍历 深度优先算法(DFS,Deep First Search)与 宽度优先遍历(BFS,Breadth First Search) 是树、图数据结构的基础性、标准性的遍历算法。 2 深度优先算法(DFS,Deep First Search) 深度优先搜索(DFS)是一种用于搜索图形或树数据结构的算法…

C#进阶实践项目(俄罗斯方块)

CSharp进阶实践项目--俄罗斯方块 1.需求分析 2.复用贪吃蛇开始等场景切换的代码 &#xff08;自己写一遍&#xff0c;不难&#xff01;&#xff01;&#xff01;&#xff09; 入口&#xff1a; 更新接口&#xff1a; Game 类&#xff1a; BeginOrEndBaseScene 类&#xff1a;…

Linux/openEuler系统部署spring boot+vue前后端分离项目(nginx均衡代理)

Linux/openEuler系统部署spring bootvue前后端分离项目&#xff08;nginx均衡代理&#xff09; 1、系统环境准备&#xff0c;安装openjdk和nginx 可以看我前面的文章 华为openEuler系统安装openjdk并配置环境变量 openEuler系统安装nginx 2、打包后端SpringBoot项目并部署到…

电机学(笔记一)

磁极对数p&#xff1a; 直流电机的磁极对数是指电机定子的磁极对数&#xff0c;也等于电机电刷的对数。它与电机的转速和扭矩有直接关系。一般来说&#xff0c;极对数越多&#xff0c;电机转速越低&#xff0c;扭矩越大&#xff0c;适用于低速、高扭矩的场合&#xff1b;相反&…