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

《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.mfbz.cn/a/468603.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

并发编程Semaphore(信号量)浅析

目录 一、简介二、API三、使用3.1 demo13.1 demo2 四、适用场景 一、简介 Semaphore(信号量)是 Java 中用于控制同时访问特定资源的线程数量的工具类。Semaphore 维护了一组许可证,线程在访问资源之前必须先获取许可证,访问完毕后…

【ADF4351】使用FPGA进行SPI寄存器配置、使用FPGA计算各个频率的频点,ADF4351配置程序

简介 特性 输出频率范围:35 MHz至4,400 MHz 小数N分频频率合成器和整数N分频频率合成器 具有低相位噪声的VCO 可编程的1/2/4/8/16/32/64分频输出 典型抖动:0.3 ps rms EVM(典型值,2.1 GHz): 0.4% 电源:3.0 V至3.6 V …

Acwing.2060 奶牛选美(DFS)

题目 听说最近两斑点的奶牛最受欢迎,约翰立即购进了一批两斑点牛。 不幸的是,时尚潮流往往变化很快,当前最受欢迎的牛变成了一斑点牛。 约翰希望通过给每头奶牛涂色,使得它们身上的两个斑点能够合为一个斑点,让它们…

构建卓越数据应用体系,释放企业数据资产的最大价值

随着数字化浪潮的汹涌而至,数据已经成为驱动社会发展的重要资源。在这个信息爆炸的时代,如何有效地收集、管理、分析和应用数据,成为摆在我们面前的一大挑战。数据应用体系的建设,不仅关乎企业竞争力的提升,更是推动整…

前端模块化开发

模块化发展历程 一个模块单独抽离成一个文件,(缺点: 命名冲突,全靠约定)命名空间的方式,导出一个对象(确定:命名冲突还是存在,可在外部修改,没解决依赖关系的…

fastadmin实验教学管理最近新增功能的技术盘点

在与用户交流中,发现了有些功能不够便捷,特抽出时间优化了一下 一键锁定 优化背景:先通过实验日期或实验名称先搜索,然后选中对应的复选框,再点击“锁定”,这样容易漏选或错选 1.工具栏新增自定义按钮“一…

目标检测——PP-YOLOv2算法解读

PP-YOLO系列,均是基于百度自研PaddlePaddle深度学习框架发布的算法,2020年基于YOLOv3改进发布PP-YOLO,2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet,2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列,所以放一起解…

面向未来的前沿人工智能监管

策制定者应该为未来十年人工智能系统更加强大的世界做好准备。这些发展可能会在人工智能科学没有根本性突破的情况下发生,只需扩展当今的技术以在更多数据和计算上训练更大的模型即可。 用于训练前沿人工智能模型的计算量在未来十年可能会显着增加。到 2020 年代末…

Linux初识环境变量

🌎环境变量【上】 文章目录: 环境变量 什么是环境变量 关于命令行参数 环境变量       简单了解       为什么需要环境变量       系统中其他环境变量 总结 前言: 环境变量是一种非常重要的概念,它们对于系统的…

springboot酒店管理系统 论文【源码】

springboot酒店管理系统开发说明 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件&#xff1…

路由器级联

目录 一、实现功能二、实现步骤2.1 接线步骤 三、效果3.1 常规连接3.2 路由器级联 一、实现功能 主路由器:可有WiFi功能,LAN口下接各设备,并接一个辅路由器辅路由器:开启WiFi功能,有线或无线下接各设备功能&#xff1…

长安链正式发布三周年,技术更迭支撑产业变革

导语: 2024年1月27日长安链正式发布三周年,开源社区借开年之际与大家一同回顾长安链三年来的技术发展历程,每一个里程碑的建设都得益于与长安链同行的合作伙伴与开发者,希望在2024年可以共同携手继往开来,为数字经济发…

深入浅出前端本地储存(1)

引言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案: CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

安装vcenter管理esxi

安装vcenter管理esxi虚拟化操作系统 文章目录 安装vcenter管理esxi虚拟化操作系统1.安装vcenter2.vcenter的应用 1.安装vcenter esxi虚拟机具体安装步骤请参考上一篇文章,vcenter软件包需自己到网上下 2.vcenter的应用

蚓链帮助企业对资源进行数字化整合,加速变现实现利他多赢!

​蚓链作为一种数字化资源整合的工具或平台,可以帮助企业实现数字化资源整合。在当前的数字化时代,各种信息和资源呈现出乘方式的增长。企业要想在竞争中脱颖而出,就需要对这些资源进行有效的整合和利用。蚓链通过提供一套完善的数字化解决方…

Flutter Plugin中依赖aar本地包

一、首先在项目的根目录的build.gradle中,添加如下代码 allprojects {repositories {//...flatDir {//pay_2c2p就是你的flutter plugin插件名称dirs project(:pay_2c2p).file(libs)}} }二、然后到Plugin的android目录中 ,在src目录的同级创建libs目录将…

Java安全基础 必备概念理解

Java安全基础 关键概念汇总 文章目录 Java安全基础 关键概念汇总前置知识1.构造器this以及包的使用2.继承3.重写/ 重载 / super4.多态5.区分和equals方法6.toString的使用7.Object的概念8.static,final,代码块static代码块final 9.动态代理10.类的动态加载1)类加载器含义&#…

LeetCode 热题 100 | 回溯(三)

目录 1 131. 分割回文串 2 51. N 皇后 菜鸟做题,语言是 C,感冒好了 ver. 1 131. 分割回文串 题眼:给你一个字符串 s,请你将 s 分割 成一些子串。 根据题眼可知,我们需要做的是将字符串 s 连续分割 为几段&#…

医保智慧购药:探索医保买药小程序技术开发与应用

如今,医保智慧购药成为了一种趋势,尤其是医保买药小程序的技术开发和应用,为患者提供了更加便捷、高效的医药购买体验。 医保买药小程序是一种基于手机移动终端的应用程序,它通过智能化的算法和医保系统的对接,为患者…

gPTP简介

1、gPTP(generalized precision time protocol)广义时钟同步协议 gPTP(generalized precision time protocol)广义时钟同步协议,即IEEE 802.1AS协议。它是IEEE 1588协议的延伸,可以为TSN提供全局精准…