[机翻] [ABD] 01_课程概述与基础
01 课程概述与基础
本章介绍 Advanced Binary Deobfuscation 课程的基本信息、课程大纲、能力目标、先修知识,以及混淆(Obfuscation)的基本定义与软件保护体系。
1.1 课程基本信息
| 项目 | 内容 |
|---|---|
| 课程名称 | Advanced Binary Deobfuscation(高级二进制反混淆) |
| 讲师 | Yuma Kurogome(NTT Secure Platform Laboratories) |
| 所属机构 | NTT Secure Platform Laboratories |
| 研究兴趣 | Malware Detection, Analysis, Anti-Analysis(恶意软件检测、分析与反分析) |
讲师近期发表
讲师 Yuma Kurogome 的一篇代表性工作:
- EIGER: Automated IOC Generation
- 发表会议:ACSAC'19(Annual Computer Security Applications Conference, 2019)
- 核心方法:基于组合优化(Combinatorial Optimization)的自动化 IOC(Indicator of Compromise)生成。
- 简介:EIGER 旨在自动从恶意软件样本中提取有价值的 IOC,使用组合优化方法在海量候选中选择最具区分度的指标,从而减少人工分析成本。
1.2 课程大纲
本课程围绕"混淆"与"反混淆"两条主线展开,整体结构如下:
Introduction(导论)
│
▼
Obfuscation Techniques(混淆技术)
├── Preliminaries(预备知识)
├── Garbage Code Insertion(垃圾代码插入)
├── Instruction Substitution(指令替换)
└── Hands-On(动手实践)
│
▼
Deobfuscation Techniques(反混淆技术)
├── Preliminaries(预备知识)
├── Dataflow Analysis(数据流分析)
├── Symbolic Execution(符号执行)
├── Equivalence Checking(等价性检查)
└── Hands-On(动手实践)
│
▼
Conclusion(总结)
章节概要
- Introduction:介绍混淆的定义、动机与软件保护体系。
- Obfuscation Techniques:讲解恶意软件常用的混淆手段,并通过 Hands-On 实际构建混淆 payload。
- Deobfuscation Techniques:讲解数据流分析、符号执行与等价性检查等自动化反混淆方法,并通过 Hands-On 实践。
- Conclusion:总结课程要点并展望后续学习方向。
1.3 课程结束能力目标
完成本课程后,学员应具备以下能力:
- 深入了解混淆理论:理解主流软件混淆技术的原理、分类与适用场景。
- 构建混淆 payload:能够使用 state-of-the-art packers(如 Themida、VMProtect、Tigress、O-LLVM 等)构建混淆后的恶意软件载荷。
- 应用编译器优化技术:将经典 compiler optimization techniques(如死代码消除、常量折叠、循环不变量外提等)应用于二进制分析,辅助反混淆。
- 设计自动化分析工具:能够设计基于 symbolic execution engine(符号执行引擎)的自动化反混淆分析工具。
- 分析 APT 混淆恶意软件:能够分析真实 APT(Advanced Persistent Threat)活动中出现的混淆恶意软件样本。
1.4 先修知识
为顺利学习本课程,学员应具备以下基础知识:
| 领域 | 具体要求 |
|---|---|
| 体系结构 | x86 / x64 指令集架构基础(寄存器、寻址方式、常见指令) |
| 编程语言 | 熟练使用 C / C++ 与 Python |
| 计算机科学基础 | 操作系统(OS)、编译器(Compiler)、解释器(Interpreter)、链接器(Linker)、加载器(Loader)等低层概念 |
提示:如果对上述某些领域不熟悉,建议先阅读下方的推荐参考资料打好基础。
1.5 推荐参考资料
| 资料名称 | 链接 / 出处 | 说明 |
|---|---|---|
| Reverse Engineering 101 | https://malwareunicorn.org/reversing/ | 由 Malware Unicorn 编写的逆向工程入门教程,涵盖工具使用与基础分析方法 |
| Modern Binary Exploitation | RPISEC(Rensselaer Polytechnic Institute) | RPISEC 开设的二进制漏洞利用课程,涵盖从基础到进阶的 exploitation 内容 |
此外,课程中涉及的具体论文引用将在各章节中给出。
1.6 混淆的定义(非正式)
在正式讨论混淆技术之前,我们先给出一个非正式(informal)的定义:
混淆(Obfuscation) 是从程序 P 到一个功能等效程序 P' 的转换,使得从 P' 中提取信息比从 P 中提取信息更加困难。
用形式化的方式表达:
Obfuscation: P ───────► P'
转换 功能等效(P' 与 P 行为一致)
但 P' 更难被理解 / 分析
关键点:
- 功能等效(Functional Equivalence):混淆后的程序 P' 必须保持与原始程序 P 相同的可观察行为。
- 信息提取难度增加:混淆的目标不是改变程序功能,而是增加逆向分析的代价。
- "非正式"的含义:这一定义并未给出"难度"的严格度量,因此它只是一个直观描述。严格的混淆定义通常基于计算复杂性或虚拟黑盒(Virtual Black Box)模型,但这超出本课程范围。
1.7 软件保护体系
软件保护(Software Protection)大致可分为两大类:法律保护与技术保护。
1.7.1 Legal Protection(法律保护)
通过法律手段保护软件知识产权,例如:
- 版权法(Copyright Law)
- 专利法(Patent Law)
- 商业秘密(Trade Secret)
- 许可协议(License Agreement / EULA)
法律保护的局限:法律手段需要事后追责,无法在技术上阻止攻击者对二进制代码进行逆向分析。
1.7.2 Technical Protection(技术保护)
通过技术手段增加逆向分析的难度,常见手段包括:
| 技术 | 说明 |
|---|---|
| Obfuscation(混淆) | 本课程的核心。通过变换代码结构使逆向分析更困难。 |
| Encryption(加密) | 加密代码或数据,运行时解密执行。 |
| Server-Side Execution(服务端执行) | 将关键逻辑放在服务器端执行,客户端无法获取完整代码。 |
| Trusted Native Code(可信原生代码) | 利用可信执行环境(TEE)或硬件安全特性保护代码。 |
1.7.3 技术保护的对应关系
┌─────────────────────────────────────────────┐
│ Software Protection │
├─────────────────────┬───────────────────────┤
│ Legal Protection │ Technical Protection │
│ (法律保护) │ (技术保护) │
│ - Copyright │ - Obfuscation │
│ - Patent │ - Encryption │
│ - Trade Secret │ - Server-Side Exec │
│ - License/EULA │ - Trusted Native Code│
└─────────────────────┴───────────────────────┘
本课程聚焦于 Technical Protection 中的 Obfuscation 及其对抗手段 Deobfuscation。
1.8 Man-At-The-End (MATE) 攻击者模型
1.8.1 什么是 MATE 攻击者
Man-At-The-End (MATE) 攻击者 是软件保护领域的一个核心威胁模型。与网络层的 Man-In-The-Middle (MITM) 攻击者不同,MATE 攻击者拥有对软件运行环境的完全控制:
- 攻击者可以静态分析二进制代码(反汇编、反编译)。
- 攻击者可以动态分析程序运行(调试、Hook、内存 dump)。
- 攻击者可以修改二进制代码或运行时内存。
- 攻击者拥有白盒环境:所有密钥、算法最终都在攻击者控制的机器上执行。
1.8.2 MATE 攻击者的能力
┌──────────────────────────────────────────────────────┐
│ MATE Attacker │
│ │
│ Software / App (运行在攻击者控制的设备上) │
│ │ │
│ ├── 静态分析(Static Analysis) │
│ │ - Disassembly(反汇编) │
│ │ - Decompilation(反编译) │
│ │ │
│ ├── 动态分析(Dynamic Analysis) │
│ │ - Debugging(调试) │
│ │ - Memory Dump(内存转储) │
│ │ - Tracing(跟踪) │
│ │ │
│ └── 代码修改(Code Modification) │
│ - Patching(打补丁) │
│ - Hooking(钩子) │
└──────────────────────────────────────────────────────┘
1.8.3 混淆为何针对 MATE 攻击者
由于 MATE 攻击者拥有对运行环境的完全控制,传统的加密手段并不能完全奏效——因为解密密钥最终也必须存在于攻击者控制的内存中。因此:
- 混淆(Obfuscation) 提供了一种"提高成本"而非"绝对阻止"的保护手段。
- 混淆的目标是使逆向分析的时间成本和认知成本高到不可接受,而非在理论上阻止分析。
- 这也是为什么反混淆(Deobfuscation)技术如此重要——混淆只是提高了门槛,并未真正封堵分析路径。
1.8.4 攻击与防御的博弈
攻击者能力 对应的防御手段
──────────────► ◄──────────────
静态分析 ←→ 混淆(Obfuscation)
动态分析 ←→ 反调试(Anti-Debugging)
内存转储 ←→ 反内存转储(Anti-Dumping)
代码修改 ←→ 完整性校验(Integrity Check)
(本课程聚焦于混淆与反混淆的博弈)
1.9 本章小结
- 本课程由 NTT Secure Platform Laboratories 的 Yuma Kurogome 讲授,源自 GCC Tokyo 2020 与 Security Camp National Workshop。
- 课程涵盖混淆技术与反混淆技术两大模块。
- 混淆是一种使程序更难被分析的转换,其保护目标是针对 MATE 攻击者。
- 软件保护分为法律保护与技术保护,混淆属于技术保护的一种。
- 后续章节将分别讲解编译器架构与混淆分类(第 2 章)、具体混淆技术(第 3 章)以及工具使用(第 4 章)。

浙公网安备 33010602011771号