[机翻] [ABD] 01_课程概述与基础

01 课程概述与基础

https://github.com/malrev/ABD

本章介绍 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 课程结束能力目标

完成本课程后,学员应具备以下能力:

  1. 深入了解混淆理论:理解主流软件混淆技术的原理、分类与适用场景。
  2. 构建混淆 payload:能够使用 state-of-the-art packers(如 Themida、VMProtect、Tigress、O-LLVM 等)构建混淆后的恶意软件载荷。
  3. 应用编译器优化技术:将经典 compiler optimization techniques(如死代码消除、常量折叠、循环不变量外提等)应用于二进制分析,辅助反混淆。
  4. 设计自动化分析工具:能够设计基于 symbolic execution engine(符号执行引擎)的自动化反混淆分析工具。
  5. 分析 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)大致可分为两大类:法律保护技术保护

通过法律手段保护软件知识产权,例如:

  • 版权法(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 章)。
posted @ 2026-08-05 15:54  DirWangK  阅读(12)  评论(0)    收藏  举报