cdong1012/ollvm-unflattener

GitHub: cdong1012/ollvm-unflattener

基于 Miasm 符号执行引擎的 OLLVM 控制流平坦化反混淆工具,支持跨平台二进制文件分析与还原。

Stars: 245 | Forks: 27

# ollvm-unflattener 一个用于反混淆 OLLVM (Obfuscator-LLVM) 控制流平坦化的 Python 工具。该工具利用 Miasm 框架来分析并恢复被 OLLVM 控制流平坦化技术混淆的函数的原始控制流。 ## 项目描述 OLLVM (Obfuscator-LLVM) 是一款流行的代码混淆工具,实现了多种混淆技术,包括函数级别的控制流平坦化。控制流平坦化通过使用状态变量和分发机制,将函数的原始流程转换为扁平结构,这使得在逆向工程过程中难以理解程序的逻辑。 该工具: - 通过识别和连接基本块,重构被混淆函数的原始控制流 - 生成恢复了原始控制流的反混淆二进制文件 - 通过广度优先搜索 (BFS) 跟踪目标函数的调用,支持多层函数反混淆 - 支持 Windows 和 Linux 二进制文件(x86 和 x64 架构)的反混淆 本项目受到了 [MODeflattener](https://github.com/mrT4ntr4/MODeflattener) 和 [Quarkslab](https://blog.quarkslab.com/deobfuscation-recovering-an-ollvm-protected-program.html) 精彩工作的启发!与通过静态方法解决 CFF 反混淆的 **MODeflattener** 不同,本项目利用 Miasm 的符号执行引擎来执行并恢复原始控制流。 ## 安装 ### 前置条件 - Python 3.10+ - Git ### 设置 1. 克隆仓库: ``` git clone https://github.com/cdong1012/ollvm-unflattener.git cd ollvm-unflattener ``` 2. 安装所需依赖: ``` pip install -r requirements.txt ``` `requirements.txt` 文件包含: ``` miasm graphviz keystone-engine ``` ## 使用 ### 基本用法 ``` python unflattener -i -o -t -a ``` ### 参数 - `-i, --input`: 被混淆的二进制文件路径(必需) - `-o, --output`: 反混淆后的二进制文件保存路径(必需) - `-t, --target`: 需要反混淆的函数地址(必需) - `-a, --all`: 跟踪所有调用并反混淆所有可达函数 - `-h, --help`: 显示帮助信息 ### 示例 ``` # 反混淆单个函数 python unflattener -i ./samples/linux/CFF.bin -o ./samples/linux/deob_CFF.bin -t 0x80491A0 python unflattener -i ./samples/win/CFF_win.exe -o ./samples/win/deob_CFF_win.bin -t 0x401600 # 反混淆函数并跟踪其所有调用 python unflattener -i ./samples/linux/CFF_full.bin -o ./samples/linux/deob_CFF_full.bin -t 0x8049E00 -a python unflattener -i ./samples/win/CFF_win_full.exe -o ./samples/win/deob_CFF_win_full.bin -t 0x401F10 -a ``` ## 结果 ### 视觉对比 下方展示了反混淆前后的控制流图 (CFG): ![混淆后的 CFG](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1adac16fc2121846.jpg) *图 1:混淆后的 CFG* ![反混淆后的 CFG](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7a988f1c33121847.jpg) *图 2:反混淆后的 CFG* 这些图片来自对样本 [CFF_full.bin](./samples/linux/CFF_full.bin) 中函数 ```target_function``` 的反混淆。 ## 致谢 - [Miasm](https://github.com/cea-sec/miasm) - [Obfuscator-LLVM](https://github.com/obfuscator-llvm/obfuscator) - [MODeflattener](https://github.com/mrT4ntr4/MODeflattener) - [Quarkslab](https://blog.quarkslab.com/deobfuscation-recovering-an-ollvm-protected-program.html)
标签:CFG复原, CTF安全工具, DNS 反向解析, Keystone引擎, Miasm, OLLVM, Python, x86架构, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码保护, 代码反混淆, 恶意代码分析, 控制流平坦化, 无后门, 符号执行, 逆向工具, 逆向工程, 配置文件, 静态分析