ARM汇编与逆向工程:揭秘程序背后的神秘世界

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

前言

致谢

作者简介

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

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值