E-BOOK x86汇编与逆向工程:软件破解与防护的艺术 斯蒂芬妮·多马斯 x86汇编与逆向工程:软件破解与防护的艺术

x86汇编与逆向工程:软件破解与防护的艺术

👤 斯蒂芬妮·多马斯 📖 机械工业出版社 📋 9787111767404 🌐 zh-CN
81
下载次数
4.8
用户评分

📦 下载本书

  • 汇编基础:从零学习x86汇编语言,理解计算机底层运行机制。
  • 逆向分析:掌握使用IDA、Ghidra等工具进行软件逆向工程的方法。
  • 软件破解:学会补丁、密钥生成器等破解技术,分析软件保护机制。
  • 防御策略:了解反调试、加壳、加密等防御手段,保护自有软件。
  • 漏洞挖掘:通过逆向分析发现软件漏洞,提升安全研究能力。
★★★
中级
入门初级中级进阶高级
  • 逆向工程师:需要深入理解x86汇编和逆向技巧,分析恶意软件或漏洞。
  • 安全研究员:研究软件破解与防护,提升漏洞挖掘和利用能力。
  • 软件开发者:了解汇编和逆向,优化代码、调试问题并保护软件。
  • 黑客爱好者:对软件破解感兴趣,希望系统学习底层技术。
  1. 基础打牢:前4章是汇编核心,务必吃透寄存器和指令集。
  2. 工具熟练:第7-9章学习IDA和Ghidra,多实践操作。
  3. 破解实战:第10章是破解重点,建议在虚拟机中练习补丁和密钥生成。
  4. 防御提升:最后两章讲防御,结合破解知识理解攻防对抗。
  • 底层认知:深入理解x86架构和汇编语言,掌握计算机运行原理。
  • 逆向技能:熟练使用主流逆向工具,能够独立分析二进制程序。
  • 破解能力:掌握补丁和密钥生成技术,理解软件保护弱点。
  • 防御知识:学会反调试、加壳等防护技术,增强软件安全性。
  • 漏洞嗅觉:通过逆向发现潜在漏洞,提升安全研究水平。

📖 书籍简介

编辑推荐

本书围绕软件反汇编领域展开。它从x86汇编语言的基础知识开始,逐步介绍如何利用这些知识进行逆向工程和规避软件保护措施。
本书从x86开始,首先介绍如何阅读、编写和构建驱动世界上大量计算机的汇编代码。然后,介绍如何使用一些业界最喜欢的工具(如IDA、Ghidra、Olly等)对应用程序进行逆向工程。接着,介绍如何使用诸如补丁和密钥生成等技术进行软件破解,所有这些技术都利用了汇编和逆向工程的力量。最后,从防御角度审视了软件破解。

所涉及的具体知识大致分为以下几类:
汇编:计算机架构、x86、系统调用、构建和链接、ASCII、条件码、gdb、控制流、栈、调用约定。
逆向工程:侦察、字符串、逆向策略、剥离、链接、优化、编译器、行业工具。
破解:补丁、密钥检查器、密钥生成器、Resource Hacker、Dependency Walker。
防御:反调试、防篡改、加壳、加密、解密、白名单、黑名单、RASP、代码签名、混淆等。

本书主要面向分析、研究、破解或防御软件应用程序的安全研究人员、逆向工程师和防御者以及开发者,旨在为读者提供技术和相关知识,让他们更好地保护自己的软件。

内容简介

本书以软件反汇编技术为中心,首先带领读者从x86的基础知识开始,学习如何读取、编写和构建赋能全球大量计算机的汇编语言;然后介绍如何使用IDA、Ghidra、Olly 等业界最受欢迎的工具对应用程序进行逆向工程;接着介绍如何利用补丁和密钥生成等技术进行软件破解,所有这些都利用了汇编和逆向工程的知识;最后从防御的角度向读者介绍相关技术,使他们能够更好地保护自己的软件。本书将引领好奇的读者深入软件破解和计算机的核心,探索其运作机制。深入学习x86计算机的运行原理,不仅对逆向工程和软件破解来说至关重要,还能帮助读者在代码优化、效率提高、调试、编译器设置调整以及芯片选择等方面成为更出色的开发者。

作者简介

斯蒂芬妮·多马斯
(Stephanie Domas)
Canonical首席信息安全官(CISO)、英特尔(Intel)前首席安全技术战略师。她在道德黑客、逆向工程和高级漏洞分析方面拥有逾十年经验,作为一位知名行业顾问,她的服务对象涵盖初创企业和行业巨头。她目前致力于使Canonical成为开源界最受信赖的计算伙伴。在英特尔时,她负责全公司的安全技术战略,推动英特尔在安全领域实力、竞争力和收益的不断增长。她是一位充满激情的教育家、战略家、演说家、顾问和安全爱好者。


克里斯托弗·多马斯
(Christopher Domas)
知名硬件安全研究员。他的研究重点在于固件、硬件及处理器的底层安全漏洞利用。他因针对还不存在的问题提出天马行空的解决方案而闻名,其所提解决方案包括全球首个单指令的C语言编译器(M/o/Vfuscator)、能够生成程序控制流图的开发工具集(REpsych),以及在vi文本编辑器里实现的图灵机。

目录

目  录
译者序
前言
关于作者
关于技术撰稿人
关于技术编辑
第1章 反编译和架构  1
1.1 反编译  1
1.1.1 反编译何时有用  1
1.1.2 反编译JIT语言  2
1.1.3 保护JIT语言  3
1.2 实验:反编译  4
1.2.1 技能  4
1.2.2 要点  4
1.3 架构  4
1.3.1 计算机架构  4
1.3.2 汇编  6
1.4 总结  10
第2章 x86汇编:数据、模式、寄存器
和内存访问  11
2.1 x86简介  11
2.2 汇编语法  12
2.3 数据表示  13
2.3.1 数字系统的基数  13
2.3.2 位、字节和字  14
2.3.3 处理二进制数  16
2.4 寄存器  17
2.4.1 x86中的寄存器  18
2.4.2 寄存器的使用  19
2.5 内存访问  20
2.6 寻址模式  23
2.6.1 绝对寻址  23
2.6.2 间接寻址  23
2.6.3 基址加偏移量寻址  24
2.6.4 索引寻址  24
2.6.5 基址–索引寻址  24
2.7 总结  25
第3章 x86 汇编:指令  26
3.1 x86指令格式  26
3.2 x86指令  27
3.2.1 mov  28
3.2.2 inc、dec  30
3.2.3 add、sub  30
3.2.4 mul  30
3.2.5 div  31
3.2.6 and、or、xor  31
3.2.7 not  32
3.2.8 shr、shl  32
3.2.9 sar、sal  32
3.2.10 nop  33
3.2.11 lea  33
3.3 整合所有内容  34
3.4 常见的x86指令错误  35
3.5 总结  36
第4章 构建和运行汇编程序  37
4.1 输出  37
4.1.1 控制引脚  38
4.1.2 由操作系统处理与显卡的交互  39
4.2 系统调用  39
4.2.1 sys_write  39
4.2.2 sys_exit  40
4.2.3 输出字符串  40
4.3 汇编和链接  41
4.3.1 Linux中的汇编与链接  41
4.3.2 编写汇编程序  42
4.4 objdump  45
4.5 实验:Hello World  45
4.5.1 技能  45
4.5.2 要点  46
4.6 ASCII  46
4.6.1 识别ASCII字符串  47
4.6.2 ASCII操作技巧  48
4.7 总结  48
第5章 理解条件码  49
5.1 条件码  49
5.1.1 eflags  49
5.1.2 影响状态标志的操作  52
5.2 总结  55
第6章 分析和调试汇编代码  56
6.1 二进制分析  56
6.1.1 静态分析与动态分析  56
6.1.2 调试  57
6.2 断点  57
6.2.1 软件断点  57
6.2.2 硬件断点  58
6.3 gdb  58
6.4 段错误  63
6.5 实验:鲨鱼模拟器3000  63
6.5.1 技能  64
6.5.2 要点  64
6.6 消除噪声  64
6.7 总结  65
第7章 函数和控制流  66
7.1 控制流  66
7.1.1 指令指针  66
7.1.2 控制流指令  67
7.2 x86中的逻辑结构  70
7.2.1 if(...) {...}  70
7.2.2 if(...) {...} else{...}  71
7.2.3 do {...} while (...);  75
7.2.4 while (...) {...}  76
7.2.5 for (...; ...; ...) {...}  77
7.2.6 switch (...) {...}  79
7.2.7 continue  83
7.2.8 break  84
7.2.9 &&  86
7.2.10 ||  86
7.3 栈  87
7.3.1 栈是如何工作的  87
7.3.2 x86栈  87
7.4 函数调用与栈帧  91
7.4.1 x86中的函数  91
7.4.2 栈分析  94
7.4.3 调用约定  95
7.4.4 cdecl  96
7.4.5 栈帧  100
7.4.6 宏观程序  105
7.4.7 需要记住的事情  106
7.5 总结  107
第8章 编译器和优化器  108
8.1 寻找目标代码入口点  108
8.2 编译器  110
8.2.1 优化  111
8.2.2 剥离  113
8.2.3 链接  114
8.3 总结  116
第9章 逆向工程:工具和策略  117
9.1 实验:RE Bingo  117
9.1.1 技能  117
9.1.2 要点  118
9.2 基础侦察  118
9.2.1 objdump  118
9.2.2 ltrace和strace  119
9.2.3 strings  122
9.2.4 Dependency Walker  123
9.3 逆向工程的策略  124
9.3.1 寻找感兴趣的区域  124
9.3.2 迭代注释代码  124
9.4 总结  125
第10章 破解:工具和策略  126
10.1 密钥检查器  126
10.1.1 不好的方法  127
10.1.2 合理的方法  127
10.1.3 更好的方法  128
10.1.4 最佳方法  128
10.1.5 其他的建议  129
10.2 密钥生成器  130
10.2.1 为什么要创建密钥生成器  130
10.2.2 密钥生成的原理  130

10.2.3 破解各种类型的密钥检查  131

10.2.4 对抗密钥生成器  132

10.3 实验:密钥生成器  132

10.3.1 技能  132

10.3.2 要点  133

10.4 Procmon  133

10.4.1 示例:Notepad.exe  133

10.4.2 怎样用Procmon辅助逆向工程和破解  136

10.5 Resource Hacker  138

10.5.1 示例  138

10.5.2 小实验:Windows计算器  139

10.6 打补丁  142

10.6.1 打补丁与密钥生成  142

10.6.2 在哪里打补丁  143

10.6.3 nop指令  143

10.7 其他调试器  144

10.7.1 OllyDbg  144

10.7.2 Immunity  144

10.7.3 x86dbg  145

10.7.4 WinDbg  145

10.8 使用Immunity调试工具进行

调试  145

10.8.1 Immunity:汇编代码  146

10.8.2 Immunity:模块  147

10.8.3 Immunity:字符串  147

10.8.4 Immunity:运行程序  149

10.8.5 Immunity:异常  149

10.8.6 Immunity:重写程序  151

10.9 实验:使用Immunity进行破解  153

10.9.1 技能  153

10.9.2 要点  153

10.10 总结  153

第11章 打补丁和高级工具  154

11.1 在010编辑器中打补丁  154

11.2 CodeFusion补丁  156

11.3 Cheat Engine  158

11.3.1 Cheat Engine:打开进程  159

11.3.2 Cheat Engine:查看内存  159

11.3.3 Cheat Engine:字符串引用  161

11.3.4 Cheat Engine:重写程序  161

11.3.5 Cheat Engine:复制字节  163

11.3.6 Cheat Engine:获取地址  163

11.4 实验:破解LaFarge  163

11.4.1 技能  163

11.4.2 要点  164

11.5 IDA  164

11.5.1 IDA:字符串  165

11.5.2 IDA:基本块  167

11.5.3 IDA:函数和变量  168

11.5.4 IDA:注释  168

11.5.5 IDA:路径  170

11.6 IDA补丁  171

11.7 实验:IDA逻辑流程  173

11.7.1 技能  173

11.7.2 要点  173

11.8 Ghidra  174

11.9 实验:使用IDA进行破解  174

11.9.1 技能  174

11.9.2 要点  174

11.10 总结  174

第12章 防御  175

12.1 混淆技术  175

12.1.1 评估混淆技术  177

12.1.2 自动化混淆  177

12.1.3 混淆器  181

12.1.4 攻克混淆器  182

12.2 实验:混淆技术  182

12.2.1 技能  183

12.2.2 要点  183

12.3 反调试  183

12.3.1 IsDebuggerPresent()  183

12.3.2 调试寄存器  184

12.3.3 读时间戳计数器  184

12.3.4 无效CloseHandle()调用  185

12.3.5 目录扫描  185

12.3.6 攻击性反调试  186

12.3.7 攻克反调试技术  186

12.4 实验:反调试  186

12.4.1 技能  186

12.4.2 要点  187

12.5 总结  187

第13章 高级防御技术  188

13.1 防篡改技术  188

13.1.1 哈希  188

13.1.2 签名  189

13.1.3 水印  189

13.1.4 软件守护  189

13.2 加壳技术  190

13.2.1 加壳器是如何工作的  190

13.2.2 这是强大的保护机制吗  191

13.2.3 破解加壳技术  191

13.2.4 PEiD  192

13.3 实验:检测和脱壳  192

13.3.1 技能  193

13.3.2 要点  193

13.4 虚拟化技术  193

13.4.1 代码虚拟化是如何工作的  195

13.4.2 分层虚拟化  195

13.4.3 虚拟化存在的问题  195

13.4.4 这是强大的保护机制吗  196

13.4.5 破解虚拟化技术  196

13.5 加密器/解密器  196

13.5.1 这种保护机制有用吗  197

13.5.2 攻克加密器  197

13.6 总结  197

第14章 检测与预防  199

14.1 循环冗余校验  199

14.2 代码签名  200

14.2.1 如何进行代码签名  200

14.2.2 如何验证已签名的应用

程序  201

14.2.3 代码签名有效吗  201

14.2.4 代码签名与循环冗余校验  202

14.2.5 这是强大的保护机制吗  202

14.3 RASP  202

14.3.1 钩子函数  202

14.3.2 RASP的风险  203

14.3.3 这是强大的保护机制吗  203

14.4 白名单  203

14.4.1 如何运行白名单  204

14.4.2 这是强大的保护机制吗  204

14.5 黑名单  205

14.6 远程认证  205

14.6.1 远程认证示例  206

14.6.2 这是强大的保护机制吗  206

14.7 实验:进程监控  207

14.7.1 技能  207

14.7.2 要点  207

14.8 总结  207

第15章 法律  208

15.1 影响逆向工程的美国法律  208

15.1.1 《数字千年版权法》  208

15.1.2 《计算机欺诈和滥用法案》  208

15.1.3 《版权法》  209

15.1.4 重要法庭判例  210

15.1.5 合理使用  211

15.1.6 DMCA研究免责  211

15.1.7 合法性  212

15.2 总结  212

第16章 高级技术  213

16.1 时间旅行调试  213

16.2 二进制插桩  213

16.3 中间表示  214

16.4 反编译  214

16.5 自动化结构恢复  215

16.6 可视化  215

16.7 去混淆  215

16.8 定理证明器  216

16.9 符号分析  216

16.10 总结  217

第17章 附加话题  218

17.1 栈溢出  218

17.1.1 shellcode  224

17.1.2 栈溢出与栈保护  227

17.2 关联C代码与x86汇编代码  228

17.2.1 在x86代码中使用C函数  228

17.2.2 在C代码中使用x86函数  230

17.2.3 _start与main()  231

17.2.4 标准参数  233

17.2.5 混合使用C语言和汇编

语言  233

17.3 总结  235

结语  236


前言/序言

前  言
软件逆向工程和破解是历史悠久且内容丰富的技术领域。几十年来,软件开发者一直努力在其应用程序中构筑防御措施,以保护知识产权,避免对程序代码的未授权修改。几乎从逆向工程师开始为了兴趣或盈利而研究和改动代码的那一刻起,软件破解的技艺就存在了。
在详细探讨逆向工程的工作原理之前,理解这些技术的背景非常重要。下面将介绍你能从本书中获得什么,同时深入讲解软件逆向工程和破解的历史背景及法律相关的考量。
本书目标读者
本书是给所有想探索、理解并修改封闭源代码软件的人准备的,无论是安全领域的专业人员还是充满热情的业余爱好者。本书将引领好奇的读者深入软件破解和计算机的核心,探索其运作机制。深入学习 x86 计算机的运行原理,不仅对软件逆向工程和破解来说至关重要,还能帮助读者在代码优化、效率提高、调试、编译器设置调整以及芯片选择等方面成为更出色的开发者。书中还将详细介绍软件破解的过程,让读者了解真实世界中破解者所使用的工具和技术,并通过实际动手破解真实应用程序的实验来验证学到的知识。此外,书中也会涉及防御策略,帮助读者理解如何对抗软件破解攻击。
通过掌握攻击与防御技术,读者可以成为出色的软件破解专家或软件防护专家。
本书值得期待的内容
本书主要基于逆向工程的三大核心原则:
没有破解不了的软件。
以提高速度为进攻目标。
以放慢速度为防守目标。
基于这种理念,人们可以针对任何软件实施逆向工程,以揭示其秘密,绕过其保护机制。问题只在于时间的长短。
就像网络安全的其他领域一样,攻击方向和防御方向的逆向工程师都能从一套类似的技能中受益。本书将介绍以下三种相互关联的技能:
逆向工程:一种拆解软件并解析其运作方式的过程。
破解:在逆向工程的基础上,通过操控程序的内部机制让其执行原本不打算执行的操作。
防御: 尽管所有的软件都可以被破解,但防御措施可以让破解程序的过程变得更加困难和耗时。
不理解逆向工程和破解,防御者就无法制定有效的保护措施。另外,如果攻击者能够理解程序的运作方式并进行操作,他们就能更有效地绕过并战胜这些保护措施。
本书结构
本书是根据这三种核心技能来组织的。结构如下:
技能 主题 目标
技能 主题 目标
逆向工程 侦察 掌握工具、方法和思维模式,以便能够分析、解构软件并深入理解其内部运作方式
密钥检查器
密钥生成器
进程监控
资源操纵
静态分析
动态分析
编写密钥生成代码
破解软件
破解 手动打补丁 掌握工具、方法和思维模式,以便能够修改软件
自动化补丁程序
高级动态分析
跟踪执行
高级静态分析
试用期限
提示框
更多密钥生成器
更多破解技术
防御 混淆/反混淆 掌握防御和反制技术
评估防御态势
探索高级主题
实践逆向工程和破解工具、技术和思维模式
反调试/逆反调试
加壳/脱壳
加密/解密
架构级防御
法律合规
时间旅行调试
二进制插桩
中间表示
防御 反编译
自动化结构恢复
可视化
定理证明
符号分析
破解盛宴

实践经验和实验
学习逆向工程和软件破解最好的方式就是进行实践。因此,本书将包含几个动手实验,以演示描述的概念。
本书的目标不是教授一套特定的工具和技术。虽然我们的重点是运行在 Windows 上的 x86 软件,但很多方法和技术也可以应用到其他平台上。我们会尽量展示多种工具,包括开源软件、免费软件、共享软件,以及商业解决方案。理解哪些工具可用,以及它们的优势和劣势之后,就能更有效地选择适合任务的工具。
我们的动手实验和练习将针对不同目标进行逆向工程与破解,这些目标包括:
真实软件:一些练习会使用精选的真实软件,以避免侵犯版权。
专为本书编写的软件:为了阐述用现实世界的例子难以展示的概念而专门为本书编写的软件。
破解练习程序(crackme):这是由破解者开发的软件,用于阐述概念或挑战他人。
随书文件下载
本书提到了一些额外的文件,如实验或工具对应的文件。
历史
在深入了解破解和逆向工程的细节之前,了解其历史是非常有用的。软件保护措施以及用来克服它们的技术和方法已经演变了几十年。
第一个软件保护措施
第一个软件版权保护措施出现在20世纪70年代。这个领域的一些早期行动者如下:
AppleⅡ:AppleⅡ引入了专有的磁盘驱动器,这类磁盘驱动器可以在半轨道进行写入,允许写入额外的环,也允许错开并重叠扇区。这样做的目的是让非 Apple 机器和不会读写这些奇特偏移位置的软件无法使用这些磁盘。
Atari 800:Atari 800 系统会有意在其磁盘中包含坏的扇区,并尝试加载这些扇区。如果这些加载操作不返回“坏扇区”错误,那么软件就知道这不是一个有效的磁盘,并会停止执行。

Commodore 64:正版的 Commodore 64 软件仅通过只读磁盘进行分发。这种软件会尝试覆盖磁盘,如果成功了,它就知道这张磁盘是假冒的。

所有这些保护措施都依赖于软件的异常行为,比如使用无效的内存或试图覆盖程序自己的代码。要打破这些保护措施,就需要理解软件的工作原理。

破解和逆向工程的崛起

破解和逆向工程兴起于20世纪80年代。然而,早期的破解者并不是为了钱。破解是一场比赛,比的是谁可以最快找出并绕过软件的保护措施。

在接下来的几十年中,逆向工程和破解领域不断发展。以下是逆向工程历史上的一些关键日期。

1987年 Fairlight的成立可追溯到1987年,由Bacchus创建,它是最早的运营团队之一。21世纪初,在美国联邦调查局(FBI)的打击下,Fairlight逐渐崭露头角。若想了解更多历史详情,请访问www.fairlight.to和csdb.dk网站。

1990年 Elliot J. Chikofsky 和 James H. Cross II 定义了逆向工程:“逆向工程是分析目标系统,识别出系统的各个组成部分及各部分之间的相互关系,并以其他形式或更高层次的抽象来表示该系统的过程。”

1997年 Old Red Cracker(网络昵称 +ORC)创立了基于互联网的高级破解大学(+HCU),使每个人都可以学习破解知识。+ORC 在网上发布了“如何破解”的教程,并撰写了学术论文。+HCU 的学生都使用以+开头的网络昵称。

1997—2009年 “破解圈”(warez scene)崭露头角,各团体竞相抢先发布受版权保护的材料。内部人士(也被称为“供应者”)为他们的团体提供早期访问权限,“破解者”(cracker)会打破这些保护措施,而“传递者”(courier)将破解软件分发到FTP站点。2003年—2009年,大约有3164个活跃团体在“圈内”竞争,他们主要是为了荣誉和吹嘘,而非金钱。

2004年 美国联邦调查局等开始对“破解圈”进行突袭。其中,“霹雳行动”(Operation Fastlink, 2004)导致60名破解圈成员被定罪,“关闭网站行动”(Operation Site Down, 2005)成功打击了25个破解团体。

软件保护措施和破解者之间的竞赛在持续进行,而逆向工程技能是双方都无法或缺的技能。破解者需要理解程序的运作方式,以便更好地操纵它并绕过防御措施。而在防守方面,理解最新的破解技术至关重要,这有助于我们开发能够保护知识产权和其他敏感数据的防御措施。

法律

“实践是最好的学习的方式”,这就是为什么本书包含了一些真实软件、专为本书编写的软件和破解练习程序方面的实验和实践。我们不是律师,如果有人有版权疑虑,请咨询律师。我们推荐电子前沿基金会(Electronic Frontier Foundation, 网址为www.eff.org)。在第15章中,我们将讨论有关法律的话题,因为我们觉得每个人都需要理解影响这个领域的美国法律。主要有两部法律需要关注:《版权法》(Copyright Act)和《数字千年版权法》(Digital Millennium Copyright Act, DMCA)。

《版权法》的“合理使用”条款(Fair Use Clause)规定,当逆向工程用于“批评、评论、新闻报道、教学(包括课堂使用的多份复印件)、学术或研究……”目的时,属于“合理使用”。这一例外情况需要平衡“对版权作品潜在市场或价值的影响”。本质上,如果不分享或销售破解软件,那么用于教育目的的逆向工程就是合法的。

2016年10月,DMCA还增加了一条关于善意安全研究的例外规定。该规定指出:“仅为了善意测试而访问计算机程序……这样的活动应在设计好的控制环境中进行,以避免对个人或公众造成伤害……并且不能用于版权侵权的目的。”

本书中检视并用于练习的软件都是精心挑选的,可在不违反“合理使用”条款和DMCA免责条款下使用。如果你打算对软件进行逆向工程和破解,对于除自我学习以外的其他目的,应该先咨询一下律师。逆向工程的法律考量也将在后面的章节中进行更详细的探讨。

软件逆向工程和破解有着丰富的历史,这些技能既能用于攻击也能用于防御。然而,理解这些学科相关的法律并确保活动落在善意测试和“合理使用”免责条款范围内是很重要的。

本书的目的是为读者提供一套强大的软件逆向工程与破解的技能和工具。本书将从基础内容开始,逐步深入软件逆向工程和破解的各个环节,一直到一些高级攻防技术。


📑 章节目录

  1. 反编译与计算机架构
  2. x86汇编:数据、模式与寄存器
  3. x86指令集详解
  4. 构建与运行汇编程序
  5. 系统调用与内存管理
  6. 控制流与调用约定
  7. 逆向工程基础:侦察与字符串分析
  8. 使用IDA和Ghidra进行静态分析
  9. 动态调试与gdb使用
  10. 软件破解:补丁与密钥生成
  11. 防御技术:反调试与防篡改
  12. 加壳、加密与代码混淆