# ollvm-unflattener OLLVM 控制流平坦化去混淆工具

> 针对 Obfuscator-LLVM（OLLVM）控制流平坦化的 Python 命令行去混淆工具。给定被平坦化函数的地址后，它借助 Miasm 的符号执行跟踪分发器的状态变量，记录每个状态值对应的基本块及其后继状态，再用 Keystone 按恢复出的顺序重新汇编该函数，并写出一份修改后的二进制副本；可选模式还会沿该函数的调用继续处理。README 涵盖 32 位和 64 位 x86 的 Windows 与 Linux 二进制，并将这种做法与 MODeflattener 的静态方法作了对比。

- 类型：工具
- 目标：二进制
- 类别：原生分析工具
- 关联：基础工具
- 来源复核于：2026-10-20
- 收录于：2026-11-02
- 原始资源：<https://github.com/cdong1012/ollvm-unflattener>
- 一手来源：<https://github.com/cdong1012/ollvm-unflattener/blob/d0062012b66ab2c845207c733216900d5e99f0a9/README.md>
- 目录页面：<https://awesomerea.org/zh/resources/ollvm-unflattener/>
- 记录 JSON：<https://awesomerea.org/resources/ollvm-unflattener/record.json>
- 英文版：[English](https://awesomerea.org/resources/ollvm-unflattener/index.md)

## 使用条件与局限

- 审阅时最新版本为 v2.0，发布于 2025-04-16，未附带二进制文件；发布说明称这很可能是最后一个版本，所审阅的 master 提交即该标签，也是仓库最近一次推送。工具从克隆的仓库运行，命令为 python unflattener -i <输入> -o <输出> -t <十六进制地址>，加 -a 可沿调用继续处理；仓库没有测试或 CI。
- README 要求 Python 3.10+ 和 Git；requirements.txt 列出 miasm、graphviz 和 keystone-engine，均未固定版本。代码支持 x86_32 和 x86_64 的 PE 与 ELF 文件，遇到其他格式或架构会报错。
- 分析者需提供被混淆的二进制以及目标函数的地址。在基于支配树的平坦化评分中低于 0.9 的函数不会被改动；分发器和状态变量依据对 OLLVM 代码布局的结构性假设来定位，-a 只跟进指向 .text 节的调用。输出是一份修改后的副本：原函数的字节被 int3 填充覆盖，重新汇编的函数写在其起始地址处。
- samples 目录附带面向 32 位与 64 位 Linux 和 Windows 的小型混淆测试程序（CFF.bin、CFF_full.bin、CFF_full_linux64.bin、CFF_win.exe、CFF_win_full.exe、CFF_win64.exe 和 CFF_win64_full.exe）、对应的 deob_* 输出，以及其中大多数程序的 C/C++ 源码；CFF_full.c 中的注释称该测试程序由 Claude 生成。README 唯一报告的结果是 CFF_full.bin 中 target_function 去混淆前后的控制流图，没有检验去混淆后的二进制与原程序行为是否一致。
- 采用 Apache-2.0 许可；依赖保留各自的许可证，其中 Miasm 为 GPL-2.0-only，Keystone 为附带 FOSS 例外的 GPL-2.0。

## 一手来源

1. <https://github.com/cdong1012/ollvm-unflattener/blob/d0062012b66ab2c845207c733216900d5e99f0a9/README.md>
2. <https://github.com/cdong1012/ollvm-unflattener/blob/d0062012b66ab2c845207c733216900d5e99f0a9/requirements.txt>
3. <https://github.com/cdong1012/ollvm-unflattener/blob/d0062012b66ab2c845207c733216900d5e99f0a9/unflattener/__main__.py>
4. <https://github.com/cdong1012/ollvm-unflattener/blob/d0062012b66ab2c845207c733216900d5e99f0a9/unflattener/unflattener.py>
5. <https://github.com/cdong1012/ollvm-unflattener/blob/d0062012b66ab2c845207c733216900d5e99f0a9/unflattener/binrewrite.py>
6. <https://github.com/cdong1012/ollvm-unflattener/tree/d0062012b66ab2c845207c733216900d5e99f0a9/samples>
7. <https://github.com/cdong1012/ollvm-unflattener/blob/d0062012b66ab2c845207c733216900d5e99f0a9/samples/linux/CFF_full.c>
8. <https://github.com/cdong1012/ollvm-unflattener/blob/d0062012b66ab2c845207c733216900d5e99f0a9/LICENSE>
9. <https://github.com/cdong1012/ollvm-unflattener/releases/tag/v2.0>
10. <https://github.com/cea-sec/miasm/blob/3671fc24d6e625c2d75f3311724eb6b0c97664f8/LICENSE>
11. <https://github.com/keystone-engine/keystone/blob/dc7932ef2b2c4a793836caec6ecab485005139d6/EXCEPTIONS-CLIENT>

## 同分区更多条目：原生二进制

- [GolangAnalyzerExtension Ghidra Go 分析扩展](https://awesomerea.org/zh/resources/ghidra-golanganalyzerextension/index.md) · 工具
- [IDA iOS Helper iOS 逆向辅助插件](https://awesomerea.org/zh/resources/ida-ios-helper/index.md) · 工具
- [MAMBO 动态二进制修改框架](https://awesomerea.org/zh/resources/mambo/index.md) · 工具
- [Class Informer MSVC RTTI 类信息插件](https://awesomerea.org/zh/resources/class-informer/index.md) · 工具
- [Kam1n0 汇编代码克隆搜索平台](https://awesomerea.org/zh/resources/kam1n0/index.md) · 工具
- [iblessing iOS 应用与 Mach-O 分析工具集](https://awesomerea.org/zh/resources/iblessing/index.md) · 工具

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
