[机翻] [ABD] 13_实验环境与工具链

13. 实验环境与工具链(Lab Environment & Toolchain)

https://github.com/malrev/ABD

⚠️ 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 步骤

按以下步骤快速搭建实验环境:

  1. 安装 VirtualBox

  2. 下载 Ubuntu 18.04.3 Image

    • 获取 Ubuntu 18.04.3 LTS 虚拟机镜像,导入 VirtualBox。
  3. Clone 仓库

    git clone <course-repo-url>
    cd Advanced-Binary-Deobfuscation
    
  4. 执行 ./setup.sh ./

    • 运行环境配置脚本,自动安装所有依赖组件(详见下文)。
  5. 安装 IDA Freeware

    • 从 Hex-Rays 官网下载 IDA Freeware 并安装,用于交互式反汇编分析。
    • 【更新】IDA Freeware 现已支持 Hex-Rays 反编译器(伪 C 代码反编译),不再需要购买正式版即可使用反编译功能。
  6. 阅读 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 替代:

这些 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 求解的实验对象。

安全提示

所有恶意软件样本仅供教育用途。分析时务必在隔离的虚拟机环境中进行,切勿在主机或联网环境中运行。建议关闭虚拟机网络或使用断网快照。


技术要点总结

  1. 环境一致性是实验成功的前提:Ubuntu 18.04 + 特定版本依赖确保所有 notebook 可复现。setup.sh 自动化配置降低环境搭建门槛。

  2. O-LLVM 与 Tigress 互为攻防两端:O-LLVM 和 Tigress 用于生成混淆样本,Miasm + Z3 用于去除混淆。理解混淆器的原理有助于设计去混淆策略。

  3. Docker 隔离 Tigress 运行环境:Tigress 依赖较旧的环境(Ubuntu 16.04),通过 Docker 容器化避免污染主环境,同时保证可移植性。

  4. IDA Pro 是人工分析的利器:Miasm 提供自动化分析能力,IDA Pro 提供交互式人工分析能力,两者配合使用效果最佳。快捷键和子视图的熟练运用能大幅提升分析效率。

  5. 真实恶意软件样本是最佳教材:ANEL、Asprox、Vipasana、ZeusVM 等真实样本比合成样本更能反映实际分析挑战,使学到的技术具有实战价值。

posted @ 2026-08-05 15:56  DirWangK  阅读(10)  评论(0)    收藏  举报