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

在这里插入图片描述

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

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

相关文章

[嵌入式系统-39]:龙芯1B 开发学习套件 -10-PMON启动过程Sstart.S详解

目录 一、龙芯向量表与启动程序的入口(复位向量) 1.1 复位向量: 1.2 代码执行流程 1.3 计算机的南桥 VS 北桥 二、PMON代码执行流程 三、Start.S详解 3.1 CPU初始化时所需要的宏定义 (1)与CPU相关的一些宏定义…

2024人工智能四大趋势→

2023年,世人见证了ChatGPT在全球范围的大火。以生成式人工智能为代表的新一代人工智能问世,改变了人工智能(AI)技术与应用的发展轨迹,加速了人与AI的互动进程,是人工智能发展史上的新里程碑。2024年&#x…

皂液器问卷调查

媳妇非要买这种皂液器,来问问友友们有用过的帮忙识别一下是否是真的好用:皂液器问卷调查 4个题

SMART PLC 卷径计算(圈数检测+膜厚叠加法)

1、卷径计算(膜厚叠加+数值积分器应用博途PLC SCL代码) https://rxxw-control.blog.csdn.net/article/details/136719982https://rxxw-control.blog.csdn.net/article/details/1367199822、膜厚叠加法 https://rxxw-control.blog.csdn.net/article/details/128600466

[题解]无厘头题目——无聊的军官

这道题非常无厘头! 题目描述: 每个学年的开始,高一新生们都要进行传统的军训。今年有一个军训教官十分奇怪,他为了测试学员们的反应能力,每次吹哨后学员们都会变换位置。每次左数第I位学员都会站到第ai个位置&#x…

60种常用可视化图表的使用场景——(上)

文章目录 1、点阵图 2、点数图 3、弧线图 4、折线图 5、平行坐标图 6、网络图 7、象形图 8、直方图 9、密度图 10、人口金字塔 11、条形图 12、多组条形图 13、堆叠式条形图 14、不等宽柱状图 15、面积图 16、比例面积图 17、堆叠式面积图 18、量化波形图 19、雷达图 20、桑基图…

P8665 [蓝桥杯 2018 省 A] 航班时间:格式问题

题目链接&#xff1a; P8665 [蓝桥杯 2018 省 A] 航班时间 哎&#xff0c;这道题做了很长时间还是做错了&#x1f940; 代码 #include<iostream> #include<algorithm> using namespace std; int get() {int h1,m1,s1,h2,m2,s2,day0;scanf("%d:%d:%d %d:%d:…

重学SpringBoot3-整合SSM

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-整合SSM Spring Boot整合SSM示例1. 创建Spring Boot项目2. 配置数据源3. 配置MyBatis4. 实现数据访问对象&#xff08;DAO&#xff09;5. 编写服务层和控…

Tiktok在线网页版和Tiktok安卓解锁版教程(Tiktok免登录国内直接看)

TikTok和抖音作为众所周知的一对兄弟&#xff0c;所开创的市场前景不可估量。它们不仅颠覆了很多传统认知&#xff0c;也直接让更多人接受了这些新奇事物。然而&#xff0c;TikTok的版本受限于国外&#xff0c;需要特定网络环境&#xff0c;一旦识别为国内&#xff0c;将无法使…

18.古今成大事者,必以多选替身为第一要义——代理模式详解

“杏市而外&#xff0c;尚有何人可以分统?亦须早早提拔。办大事者以多多选替手为第一义&#xff0c;满意之选不可得&#xff0c;姑节取其次&#xff0c;以待徐徐教育可也。 ——曾国藩同治元年四月十二日” 一言 代理模式核心思想是为对象提供一个替身&#xff0c;以控制对这…

JDK8和JDK11在Ubuntu18上切换(解决nvvp启动报错)

本文主要介绍JDK8和JDK11在Ubuntu18上切换&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人…

王道机试C++第8章递归与分治 Day35和蓝桥杯两道真题程序

第 8 章 递归与分治 递归是指&#xff1a;函数直接或间接调用自身的一种方法&#xff0c;通常可把一个复杂的大型问题层层转化为与原问题相似但规模较小的问题来求解。 递归策略只需少量的程序就可描述解题过程所需的多次重复计算&#xff0c;因此大大减少了程序的代码量。 8.…

Nacos安装与集群搭建

Nacos安装与集群搭建 Nacos安装指南1.Windows安装1.1.下载安装包1.2.解压1.3.端口配置1.4.启动1.5.访问 2.Linux安装2.1.安装JDK2.2.上传安装包2.3.解压2.4.端口配置2.5.启动 3.Nacos的依赖Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.配置Nacos2.3.启动2.4.nginx…

ts的interface和type区别

1. 场景 interface 是用来描述对象类型的结构&#xff0c;可以定义对象的属性名和属性值的类型&#xff0c;也可以定义函数类型。interface User {name: string;age: number;sayHello(): void; } const user: User {name: "",age: 2,sayHello() {...} }可以用这个U…

mysql 更新时,旧值与新值相同会怎么做?

文章目录 1 问题描述2 验证2.1 验证猜想12.2 验证猜想2 3 结论4 mysql 为什么这么设计呢&#xff1f; 1 问题描述 创建一张表t&#xff0c;插入一行数据 mysql> CREATE TABLE t ( id int(11) NOT NULL primary key auto_increment, a int(11) DEFAULT NULL ) ENGINEInnoDB…

Nexus 部署使用

1. 简介 Nexus是Maven仓库管理器&#xff0c;也可以叫Maven的私服&#xff0c;是私服的一种。Nexus是一个强大的Maven仓库管理器&#xff0c;它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个A…

Sonarqube中Java规则与CWE与OWASP的映射关系

很多企业使用Sonarqube社区版作为静态分析工具&#xff0c;在开发阶段检测代码中的缺陷或安全漏洞。但是如果是作为SAST工具厂商&#xff0c;集成该引擎&#xff0c;则需要把Sonarqube中的检测规则与其它引擎的规则进行整合&#xff0c;例如下图&#xff0c;把Sonarqube中的一些…

el-dialog弹框遮罩层问题

先看一下出现的bug&#xff0c;点击按钮出现弹框的时候&#xff0c;遮罩层出现在弹框上层&#xff0c;不知道是那个同事写的全局样式影响的&#xff0c;这个时候我们需要在el-dialog标签上添加一个属性就行 :modal-append-to-body“false” 下图是出现的问题&#xff0c;遮罩层…

js中的原型(原型对象,对象原型,原型继承,原型链)

js中的原型 一.原型二.constructor 属性三.对象原型四.原型继承五.原型链 一.原型 构造函数通过原型分配的函数是所有实例化对象所共享的。 JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象 …

代码随想录阅读笔记-哈希表【两个数组的交集】

题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 说明&#xff1a; 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 提示&#xff1a; 1 < nums1.length, nums2.length < 10000 < nums1[i], nums2[i] < 1000 思路 交集&…