[机翻] [ABD] 13_实验环境与工具链
13. 实验环境与工具链(Lab Environment & Toolchain)
⚠️ API 版本说明:本文档中的 Miasm API 代码示例已于 2026-07 更新至 Miasm 0.1.5+ 版本。课程原始材料使用的是 0.1.3 版本(2020年),部分 API 已发生 breaking change。更新处以
【更新】标注,旧版用法以【旧版 v0.1.3】标注。
本节介绍 Advanced Binary Deobfuscation 课程的实验环境搭建、工具链配置、IDA Pro 使用指南以及实验样本说明。
环境要求
| 组件 | 版本/说明 |
|---|---|
| 操作系统 | Ubuntu 18.04 |
| 二进制分析框架 | Miasm |
| SMT 求解器 | Z3 (z3-solver) |
| 交互式分析 | Jupyter Notebook |
| 其他 Python 库 | networkx, pyparsing, pydotplus, future |
| 反汇编器 | IDA Pro / IDA Freeware |
| 容器 | Docker(用于运行 Tigress) |
Quick Start 步骤
按以下步骤快速搭建实验环境:
-
安装 VirtualBox
- 从 VirtualBox 官网 下载并安装 VirtualBox 虚拟机软件。
-
下载 Ubuntu 18.04.3 Image
- 获取 Ubuntu 18.04.3 LTS 虚拟机镜像,导入 VirtualBox。
-
Clone 仓库
git clone <course-repo-url> cd Advanced-Binary-Deobfuscation -
执行
./setup.sh ./- 运行环境配置脚本,自动安装所有依赖组件(详见下文)。
-
安装 IDA Freeware
- 从 Hex-Rays 官网下载 IDA Freeware 并安装,用于交互式反汇编分析。
- 【更新】IDA Freeware 现已支持 Hex-Rays 反编译器(伪 C 代码反编译),不再需要购买正式版即可使用反编译功能。
-
阅读
Advanced-Binary-Deobfuscation.pdf- 课程讲义,配合实验样本和 notebook 学习。
setup.sh 详解
setup.sh 脚本自动完成以下组件的安装与配置:
1. O-LLVM(Obfuscator-LLVM)
从 GitHub clone O-LLVM 的 llvm-4.0 分支,使用 cmake 编译:
# Clone O-LLVM 仓库
git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git
# 创建构建目录
mkdir obfuscator/build && cd obfuscator/build
# cmake 配置
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF ../
# 编译(使用一半 CPU 核心数,避免内存不足)
make -j$(($(nproc)/2))
-DCMAKE_BUILD_TYPE=Release:使用 Release 模式编译,启用优化,编译产物更小更快。-DLLVM_INCLUDE_TESTS=OFF:跳过测试构建,加快编译速度。-j$(nproc/2):并行编译任务数设为 CPU 核心数的一半,避免内存耗尽(LLVM 编译内存消耗极大)。
O-LLVM 编译完成后,可用于生成课程实验中的 CFF(控制流平坦化)样本(如 test-mod2-fla.bin)。
【更新】O-LLVM 原始项目已停止维护:
github.com/obfuscator-llvm/obfuscator仓库自 2017 年起不再更新,最后支持的 LLVM 版本为 4.0。推荐使用以下活跃 fork 替代:
- Hikari-LLVM15 (https://github.com/HikariObfuscator/Hikari) — 支持 LLVM 15+,新增多种混淆 pass
- goron (https://github.com/amimo/goron) — 支持 LLVM 13+,兼容 O-LLVM 原有选项
- Pluto-Obfuscator (https://github.com/bluesadi/Pluto-Obfuscator) — 支持 LLVM 12+,增强控制流混淆
- Arkari — 基于 Hikari 的商业版本
这些 fork 支持更新的 LLVM 版本,部分还新增了更多混淆选项(如字符串加密、间接跳转等)。
2. Python 生态
安装课程所需的所有 Python 库:
pip install notebook future networkx z3-solver pyparsing pydotplus
各库用途:
- notebook:Jupyter Notebook,课程的实验载体。
- future:Python 2/3 兼容层。
- networkx:图论库,用于等价性检查中的图聚类(连通分量)。
- z3-solver:Microsoft Z3 SMT 求解器,用于符号执行和等价性证明。
- pyparsing:解析库,Miasm 依赖。
- pydotplus:Graphviz 的 Python 接口,用于将 CFG 的
.dot文件渲染为 PNG。
3. Miasm
Miasm 是来自 CEA-SEC 的二进制分析框架,是整个课程的核心工具。它提供:
- IR 转换:将多种架构(x86、ARM、MIPS 等)的汇编指令翻译为统一的中间表示(IR)。
- 反汇编:线性扫描 + 递归下降反汇编引擎。
- 符号执行:
SymbolicExecutionEngine,基于 IR 的符号执行引擎。 - Jitter:即时编译执行引擎,可具体模拟指令执行(concolic 执行的基础)。
Miasm 通常从其 GitHub 仓库安装:
git clone https://github.com/cea-sec/miasm.git
cd miasm
pip install -e .
4. Docker
安装 Docker CE(Community Edition),用于运行 Tigress 混淆器:
# 安装 docker-ce
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
5. Tigress Docker 镜像
构建 Tigress 的 Docker 镜像:
docker build . -t tigress-docker
Tigress 是一个强大的代码混淆器(来自 UC Irvine),用于生成各种混淆样本供实验分析。
Tigress Docker 配置
Dockerfile 要点
Tigress 的 Dockerfile 关键内容如下:
# 基础镜像: Ubuntu 16.04
FROM ubuntu:16.04
# 创建非 root 用户 (uid=1000),避免以 root 运行带来的权限问题
RUN useradd -m -u 1000 user
# 安装编译工具链和依赖
# - gcc: C 编译器
# - unzip: 解压 Tigress 压缩包
# - libdata-dumper-concise-perl: Tigress 的 Perl 依赖
# - libc6-dev-i386: 32 位支持,用于编译 32 位样本
RUN apt-get update && apt-get install -y \
gcc \
unzip \
libdata-dumper-concise-perl \
libc6-dev-i386
# 解压 Tigress 到 /opt/
COPY tigress.zip /tmp/
RUN unzip /tmp/tigress.zip -d /opt/
# 设置环境变量
ENV TIGRESS_HOME=/opt/tigress-unstable
# 切换到非 root 用户
USER user
WORKDIR /home/user
配置要点说明
- 基础镜像
ubuntu:16.04:Tigress 对 16.04 兼容性最好。 - 非 root 用户
user(uid=1000):出于安全考虑,容器内不使用 root。uid=1000 与宿主机普通用户一致,避免挂载目录时的权限问题。 libc6-dev-i386(32 位支持):安装 32 位开发库,使容器能编译 32 位样本(课程中部分恶意软件样本为 32 位)。TIGRESS_HOME=/opt/tigress-unstable:Tigress 的安装路径环境变量,Tigress 脚本依赖此变量定位自身。
IDA Pro 使用指南
IDA Pro 是业界标准的交互式反汇编器,是逆向工程的核心工具。课程中使用 IDA(免费版或正式版)配合 Miasm 进行分析。
功能概览
| 功能 | 说明 | 免费版可用 |
|---|---|---|
| Hexdump | 十六进制视图 | 是 |
| Disassembly | 反汇编视图 | 是 |
| Decompiled Code | 反编译(伪 C 代码) | 【更新】是(IDA Freeware 现已支持 Hex-Rays 反编译器) |
| IDAPython | Python 脚本接口 | 否 |
| IDC Scripting | IDC 脚本语言 | 是 |
| Debugging | 调试器 | 是 |
【更新】IDA Freeware 反编译器支持:截至 2026 年,IDA Freeware(免费版)已包含 Hex-Rays 反编译器(Decompiler),不再受"免费版无反编译功能"的限制。这意味着无需购买 IDA Pro 正式版即可使用伪 C 代码反编译功能,大幅降低了逆向分析的学习门槛。但 IDAPython 等高级功能仍需正式版。
IDB 数据库
IDA 分析二进制后会生成 IDB 数据库(.idb/.i64 文件),其中存储:
- 原始字节序列
- 修改的标签(labels)
- 注释(comments)
- 重命名信息
- 交叉引用关系
- 类型信息
IDB 是增量式的:所有分析修改都保存在 IDB 中,不修改原始二进制。
子视图(Sub-views)
IDA 提供多种子视图用于浏览二进制信息:
| 子视图 | 功能 |
|---|---|
| Imports | 导入函数表(程序调用的外部库函数) |
| Exports | 导出函数表(程序对外提供的函数) |
| Strings | 字符串列表(自动识别的字符串常量) |
| Hex | 十六进制字节视图 |
| Functions | 函数列表(识别的所有函数) |
| Structures | 结构体定义视图 |
IDA Pro 快捷键表
| 快捷键 | 功能 |
|---|---|
| X | 交叉参考(Cross Reference, xref)——查看某地址被引用的位置 |
| Enter | 跳转到地址——跳转到光标处的目标地址 |
| Esc | 跳转到上一个位置——回退浏览历史 |
| Space | 切换视图——在图形视图和文本视图间切换 |
| U | 取消定义选定区域(Un-define)——将代码/数据还原为原始字节 |
| C | 将所选区域解释为代码(Code) |
| D | 将所选区域解释为数据(Data) |
| P | 将所选区域解释为函数(Function) |
| A | 将所选区域解释为字符串(Ascii string) |
| N | 重命名函数或变量(Name) |
| ; | 添加可重复注释(repeatable comment) |
快捷键使用场景
- X(交叉参考):分析混淆代码时,常需追踪某个函数/变量在哪里被调用。按 X 可列出所有引用点。
- U/C/D/P/A(重定义):混淆代码可能将数据伪装成代码或反之。用 U 取消定义后,再用 C/D/P/A 重新解释为正确类型。
- N(重命名):识别出函数功能后重命名,提升可读性,是去混淆后的重要收尾工作。
- ;(注释):在关键位置添加分析笔记,便于后续回顾。
IDA Pro 提示
- Options -> General:
- 启用 Line prefixes(行前缀):显示每行的地址前缀,便于定位。
- 启用 Stack pointer(栈指针):显示每条指令执行后的栈指针值,分析栈帧时必不可少。
- opcode 字节数设为 8:在反汇编视图中显示每条指令的 8 字节机器码,便于与十六进制视图对照、识别混淆指令。
实验样本
课程提供多个真实恶意软件样本和合成测试样本,按 hands-on(实践环节)组织:
| 实践环节 | 样本文件 | 说明 |
|---|---|---|
| hands-on3 | anel.zip |
ANEL RAT — 远程访问木马 |
| hands-on3 | x-tunnel.zip |
X-Tunnel 恶意软件 — 隧道化通信恶意软件 |
| hands-on4 | asprox.zip |
Asprox 恶意软件 — 使用不透明谓词混淆 |
| hands-on4 | vipasana.zip |
Vipasana 恶意软件 — 大量使用不透明谓词和等价基本块 |
| hands-on5 | zeusvm.zip |
Zeus VM 恶意软件 — 虚拟化混淆 |
| hands-on6 | flattening_volatile.bin |
CFF 测试样本 |
| hands-on6 | test-mod2-fla.bin |
O-LLVM CFF 测试样本 — O-LLVM 控制流平坦化生成的二进制 |
样本与课程的对应关系
- hands-on3(ANEL/X-Tunnel):基础反汇编与控制流分析练习。
- hands-on4(Asprox/Vipasana):不透明谓词识别与等价性检查(对应第 10 节内容)。Vipasana 是等价性检查的主要案例。
- hands-on5(ZeusVM):VM 混淆分析(对应第 11 节内容)。ZeusVM 是 VM 语义建模的案例。
- hands-on6(flattening/test-mod2-fla):控制流平坦化与 DSE(对应第 12 节内容)。
test-mod2-fla.bin由 O-LLVM 生成,是 CFF 去混淆和 DSE 求解的实验对象。
安全提示
所有恶意软件样本仅供教育用途。分析时务必在隔离的虚拟机环境中进行,切勿在主机或联网环境中运行。建议关闭虚拟机网络或使用断网快照。
技术要点总结
-
环境一致性是实验成功的前提:Ubuntu 18.04 + 特定版本依赖确保所有 notebook 可复现。
setup.sh自动化配置降低环境搭建门槛。 -
O-LLVM 与 Tigress 互为攻防两端:O-LLVM 和 Tigress 用于生成混淆样本,Miasm + Z3 用于去除混淆。理解混淆器的原理有助于设计去混淆策略。
-
Docker 隔离 Tigress 运行环境:Tigress 依赖较旧的环境(Ubuntu 16.04),通过 Docker 容器化避免污染主环境,同时保证可移植性。
-
IDA Pro 是人工分析的利器:Miasm 提供自动化分析能力,IDA Pro 提供交互式人工分析能力,两者配合使用效果最佳。快捷键和子视图的熟练运用能大幅提升分析效率。
-
真实恶意软件样本是最佳教材:ANEL、Asprox、Vipasana、ZeusVM 等真实样本比合成样本更能反映实际分析挑战,使学到的技术具有实战价值。

浙公网安备 33010602011771号