高端嵌入式底层技术揭秘:《ARM汇编与逆向工程》

ARM架构简介

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

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

图片

点击  京东自营 京东旗舰店 购买链接了解更多 

《ARM汇编与逆向工程 蓝狐卷 基础知识》([美]玛丽亚·马克斯特德(Maria Markstedter))【摘要 书评 试读】- 京东图书

内容简介

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

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

视频解读

可以关注《IT阅读排行榜》视频号观看最新的解读视频

作者简介

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

了解更多

图片

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

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

相关文章

2024流星全自动网页生成系统重构版源码

2024流星全自动网页生成系统重构版源码 源码介绍 流星全自动网页生成系统重构版源码分享,所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 为用户使…

FREERTOS信号量详解

信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步,资源管理其实就是用变量来标记现有资源的数量,任务同步其实就是用标志位来控制任务的先后执行顺序,这些概念在操作系统中以及裸机开发中都有所涉及。 FreeR…

RK3588_Qt交叉编译环境搭建

buildroot编译 进入 /home/linux/plat/rk3588/sdk/buildroot 目录下,执行 Source ./envsetup.sh 选择具体平台编译,后再执行make编译 /home/linux/plat/rk3588/sdk/buildroot/output/OK3568/images 生成的rootfs.ext2镜像重新烧写到rk3568开发板中&…

React Native:跨平台移动应用开发的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

外包2月,技术退步惊现!大专生逆袭大厂,全靠这份神秘资料!

大家好,我是一名大专生,19年通过校招进入湖南某软件公司,从事功能测试工作已近4年。今年8月,我意识到长期舒适的环境让我变得不思进取,技术停滞不前,甚至因此失去了谈了2年的女朋友。我下定决心&#xff0c…

下拉树级带搜索功能

可以直接复制粘贴到自己的项目里,方法处把接口替换一下 <template><div><el-popoverplacement"bottom"width"200"trigger"click"><el-inputslot"reference"class"mrInput":placeholder"placehol…

解决在命令行中输入py有效,输入python无效,输入python会跳转到microsoft store的问题| Bug

目录 如果你已经尝试过将python添加到系统变量在系统变量里把你自己的路径放到应用商店的路径之前删除windowsapps下的python.exe文件 如果你还未将python添加到系统变量没有python安装包且没有配置系统变量 如果你已经尝试过将python添加到系统变量 打开 运行&#xff0c;输入…

3.19网络编程

select实现的TCP并发服务器 #include <myhead.h> #define SER_IP "192.168.141.134" #define SER_PORT 8888 int main(int argc, const char *argv[]) {// 1、创建一个套接字int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0);if (sfd -1){perr…

香港科技大学广州|智能制造学域博士招生宣讲会—同济大学专场

时间&#xff1a;2024年3月28日&#xff08;星期四&#xff09;10:00 地点&#xff1a;同济大学嘉定校区济人楼310 报名链接&#xff1a;https://www.wjx.top/vm/mmukLPC.aspx# 宣讲嘉宾&#xff1a;崔华晨 助理教授 跨学科重点研究领域 •工业4.0 •智能传感器、自动光学检…

警惕!合规失守,某证券营业部遭监管警示

近日&#xff0c;青岛证监局网站发布的一则消息引起了市场的广泛关注。某证券股份有限公司青岛海口路证券营业部因使用未在中国证券业协会注册登记的劳务派遣人员办理业务&#xff0c;被青岛证监局采取出具警示函的监管措施。这一事件再次提醒各证券公司&#xff0c;合规经营的…

想入门Web测试,看这篇文章!

今天要谈的是很多软件测试工程师都需要面对的——Web测试 不管你是处在二十不惑的青春有你阶段还是三十而已的乘风破浪阶段我们都需要面对“Web测试”。 Web测试其实有以下几个方面&#xff1a; 1、页面测试 大多数的Web网站的网页都是html语言编写的&#xff0c;测试工程师…

【EDSR】《Enhanced Deep Residual Networks for Single Image Super-Resolution》

CVPR workshops-2017 code&#xff1a; https://github.com/limbee/NTIRE2017/tree/masterhttps://github.com/sanghyun-son/EDSR-PyTorch 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Residual blocks4.2 Single-scale mod…

Android自动化测试中短信的操作技巧!

一、发送短信的机制简介 短信作为一种重要的移动通信方式&#xff0c;在APP测试中也经常需要验证短信功能的正确性。为了避免大量手动操作设备发送短信的低效率&#xff0c;我们可以利用ADB命令达到自动发送短信的目的。 短信的发送需要手机短信APP的支持。命令行通过启动短信…

Data-Free Generalized Zero-Shot Learning 中文版

摘要 深度学习模型具有从大规模数据集中提取丰富知识的能力。然而&#xff0c;由于涉及到数据版权和隐私问题&#xff0c;数据共享变得越来越具有挑战性。因此&#xff0c;这妨碍了从现有数据向新的下游任务和概念有效转移知识。零样本学习&#xff08;ZSL&#xff09;方法旨在…

数据结构 --- 复杂度概念及计算讲解(时间复杂度,空间复杂度)

今天没有sao话&#xff0c;今天认真学习 一、时间复杂度 1、概念讲解 2、计算讲解 二、空间复杂度 1、概念讲解 2、计算讲解 三、常见复杂度对比 四、完结撒❀ 前言&#xff1a; 经常刷题的人都知道&#xff0c;我们在解决一道题时可能有多个解法&#xff0c;那么如何…

1、Java虚拟机学习-类的生命周期-加载阶段-以及怎样查看方法区中的对象和堆中对象的关联以及静态变量存在什么地方

类的生命周期 其中连接又可以分为3个小阶段 一、加载阶段 1、加载阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 渠道: 2、类加载器在加载完类之后&#xff0c;Java虚拟机会将字节码中的信息保存在内存的方法区中。 方法区是虚拟…

HarmonyOS NEXT应用开发—投票动效实现案例

介绍 本示例介绍使用绘制组件中的Polygon组件配合使用显式动画以及borderRadius实现投票pk组件。 效果预览图 使用说明 加载完成后会有一个胶囊块被切割成两个等大的图形来作为投票的两个选项&#xff0c;中间由PK两字分隔开点击左边选项&#xff0c;两个图形会随着选择人数…

Http 超文本传输协议基本概念学习摘录

目录 HTTP协议 超文本传输协议 HyperText超文本 HTML超文本标记语言 HTTP协议原理 请求发送 服务器处理 响应发送 连接关闭或保持 HTTP协议版本 HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3 HTTP请求方法 GET POST PUT DELETE HEAD OPTIONS HTTP请求头字…

MQTT学习从零到实战:二

本次基于MQTT实现的服务器之一&#xff1a;EMQX 协议版本&#xff1a;5.0 文档路径&#xff1a;快速开始 | EMQX 5.0 文档 MQTT协议服务器搭建 本次使用的服务器是EMQX。 下载地址&#xff1a;立即开始 | EMQX 从中我们也可以看出&#xff0c;企业版支持数据持久化&#xf…

springboot+template模板语法+SQL如何从零开始创建并运行一个实例

目录 一、创建springboot项目 二、启动程序测试一下&#xff0c;右上角点击运行&#xff1a; 三、代码编写 1、先在entity里写一个实体类&#xff0c;User&#xff1a; 2、写一个mapper接口&#xff0c;写四个接口&#xff0c;增删改查。&#xff08;我这里后面就以获取所…