【送书福利第五期】:ARM汇编与逆向工程

文章目录

  • 📑前言
  • 一、ARM汇编与逆向工程
    • 1.1 书封面
    • 1.2 内容概括
    • 1.3 目录
  • 二、作者简介
  • 三、译者介绍
  • 🌤️、粉丝福利

📑前言

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

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

一、ARM汇编与逆向工程

1.1 书封面

在这里插入图片描述

1.2 内容概括

《ARM汇编与逆向工程 蓝狐卷 基础知识》分为12章,从基础的字节和字符编码到操作系统原理、Arm架构和指令,再到静态和动态分析、逆向工程实践,循序渐进地讲解Arm逆向工程的方方面面,而且每一章都包含许多实际的案例,可以帮助读者更好地理解和掌握相关知识。同时,书中也介绍了许多工具和技术,如IDA Pro、Radare2、Binary Ninja、Ghidra、GDB等,这些工具在实际逆向工程中都有着广泛的应用。此外,本书还介绍了Arm环境的构建和使用,可以帮助读者快速搭建自己的Arm环境。

总的来说,本书对逆向工程的各个方面都进行了较为全面的介绍,对于想要学习Arm逆向工程的读者来说是一本很好的入门书籍,可以帮助读者建立起Arm逆向分析技术的知识体系。同时,由于逆向工程领域的不断更新和变化,读者也需要不断学习和探索,才能在实践中获得更多的经验和技能。需要注意的是,在学习逆向工程时要遵守相关法律法规和道德规范,不能侵犯他人的知识产权和隐私权

1.3 目录

前言

致谢

作者简介

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

二、作者简介

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

在这里插入图片描述

三、译者介绍

ChaMd5安全团队

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

在这里插入图片描述

🌤️、粉丝福利

参与方式:关注博主+点赞+收藏+评论,(每人最多评论三次)
本次送书3本【取决于阅读量,阅读量越多,送的越多】
活动时间至:2024-3-21 12:00
活动结束后,会私信中奖粉丝的,各位注意查看私信哦!

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

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

相关文章

RabbitMQ的幂等性、优先级队列和惰性队列

文章目录 前言一、幂等性1、概念2、消息重复消费3、解决思路4、消费端的幂等性保障5、唯一 ID指纹码机制6、Redis 原子性 二、优先级队列1、使用场景2、如何添加3、实战 三、惰性队列1、使用场景2、两种模式3、内存开销对比 总结 前言 一、幂等性 1、概念 2、消息重复消费 3、…

day12-SpringBootWeb 登录认证

一、登录功能 Slf4j RestController public class LoginController {Autowiredprivate EmpService empService;PostMapping("/login")public Result login(RequestBody Emp emp){log.info("员工登录: {}", emp);Emp e empService.login(emp);//登录失败, …

2024考研国家线公布,各科分数线有哪些变化?考研国家线哪些涨了,哪些跌了?可视化分析告诉你

结论在文章结尾 2024考研国家线 一、近五年国家线趋势图-学术硕士 文学 管理学 工学照顾专业 体育学 交叉学科 军事学 历史学 理学 享受少数名族照顾政策的考生 中医类照顾专业 教育类 艺术类 医学 工学 哲学 法学 农学 经济学 二、近五年国家线趋势图-专业硕士 中医 应用心理 …

S3fd: Single shot scale-invariant face detector

目录 摘要一、介绍二、相关工作三、单镜头尺度不变人脸检测器3.1. Scale-equitable框架3.2. 尺度补偿锚匹配策略3.3. 最大输出背景标签3.4 训练4.实验4.1. 模型分析4.2. 基准评价4.3 推理时间 5 结论 摘要 本文提出了一种实时人脸检测器,称为单镜头尺度不变人脸检测…

判断素数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int value 0;int i 2;int result 0;//循环获取用户值并判断值是否符合要求&#xff1b;while (1){//提示用户值需要满…

STM32中freertos任务不能调度的原因解决

本文是项目中的定位问题&#xff0c;如果定位到同样问题&#xff0c;可以按下面方法解决。 问题定位 这行assert代码主要判断系统中最大中断优先级数量是否等于内核中断优先级&#xff0c;实际意思就是要求内核中断优先级为系统最低优先级&#xff08;freertos中0为最高优先级…

文章类型分类项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 项目背景 在数据科学和机器学习的领域中&#xff0c;文本分析一直是一个引人注目的话题。这个项目的核心挑战是利用机器学习技术&#xff0c;根…

数据结构.pta测试二

#include<iostream> using namespace std; typedef struct node {int data;node* next; }*List;List listPoduce() {int a;List L;node * r, * new0;//创建指针L new node();//分配空间r L;cin >> a;while (a ! -1){new0 new node();new0->data a;r->nex…

基于单片机的灭火机器人设计

目 录 摘 要 I Abstract II 引 言 1 1 系统方案设计 4 1.1 方案论证 4 1.2 灭火机器人系统工作原理 4 2 系统硬件设计 6 2.1 单片机 6 2.2 火焰探测系统设计 8 2.3 灭火系统设计 8 2.4 循迹模块设计 9 2.5 电机驱动模块 10 3 系统软件设计 12 3.1 系统软件开发环境 12 3.2 系统…

数据库事务中“锁”的分类

数据库事务中的锁可以按照不同的维度进行分类。以下是一些常见的分类方式&#xff1a; 1、按锁的粒度分类&#xff1a; 行锁&#xff08;Row-level lock&#xff09;&#xff1a;锁定单个或少量的数据行。这种锁粒度小&#xff0c;允许高度的并发&#xff0c;但管理开销大。页…

【每日一题】303. 区域和检索 - 数组不可变-2024.3.18

题目&#xff1a; 303. 区域和检索 - 数组不可变 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的 和 &#xff0c;其中 left < right 实现 NumArray 类&#xff1a;…

JS拖曳盒子案例

让我为大家带来一个小案例吧&#xff01; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box1 {width: 100px;height: 100px;background-color: black;margin-bot…

MyBatisPlus 之一:Spring 整合 MyBatisPlus 及雪花算法

1. Mybatis-Plus简介 Mybatis-Plus&#xff08;简称MP&#xff09;是一个 Mybatis 的增强工具&#xff0c;在 Mybatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。这是官方给的定义&#xff0c;关于mybatis-plus的更多介绍及特性&#xff0c;可以参考http…

力扣203. 移除链表元素

写法1、头节点 和 后面的节点 删除规则不一致 class Solution {public ListNode removeElements(ListNode head, int val) {//如果不建虚拟头节点&#xff0c;那删头节点和删后面的节点&#xff0c;逻辑是不一样的//头节点可能连续多个命中val,所以有while&#xff0c;不是ifwh…

Python从0到100(六):Python分支和循环结构的应用

分支和循环结构的重要性不言而喻&#xff0c;它是构造程序逻辑的基础。 一、程序的结构控制 单分支结构&#xff1a; 单分支结构是分支结构中最简单的一种方式&#xff0c;单分支结构只需要判断一个条件&#xff0c;根据这个条件是否成立来决定是否执行一段语句。 二分支结…

基于Spring Boot的煤矿信息管理系统

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对煤矿信息管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上…

亮点抢先看!4月16-17日,百度Create大会开设“AI公开课”,大咖带你打造赚钱工具

3月16日&#xff0c;2024百度Create AI开发者大会正式开放售票&#xff0c;嘉宾套票定价399元。据悉&#xff0c;本次大会以“创造未来&#xff08;Create the Future&#xff09;”为主题&#xff0c;设有20深度论坛、超30节AI公开课、3000平AI互动体验区和AI音乐节等精彩环节…

【Linux】基础 IO(文件系统 inode 软硬链接)-- 详解

一、理解文件系统 1、前言 我们一直都在说打开的文件&#xff0c;磁盘中包含了上百万个文件&#xff0c;肯定不可能都是以打开的方式存在。其实文件包含打开的文件和普通的未打开的文件&#xff0c;下面重点谈谈未打开的文件。 我们知道打开的文件是通过操作系统被进程打开&am…

每日五道java面试题之mybatis篇(四)

目录&#xff1a; 第一题. 映射器#{}和${}的区别第二题. 模糊查询like语句该怎么写?第三题. 在mapper中如何传递多个参数?第四题. Mybatis如何执行批量操作第五题 MyBatis框架适用场景 第一题. 映射器#{}和${}的区别 #{}是占位符&#xff0c;预编译处理&#xff1b;${}是拼接…

3.程序语言基础知识

主要议题&#xff1a; 掌握高级语言、低级语言的特点和应用场景&#xff1b; 程序编译&#xff0c;记词法、文法规则&#xff1b; 表达式主要考察中缀表达式和后缀表达式之间的相互转换&#xff1b; 传值与传址&#xff0c;分清特点&#xff0c;结合程序代码求值&#xff1b; …
最新文章