工具

Mergen 反混淆 LLVM IR 提升器

函数级提升器:对 Windows PE 二进制中的单个 x86-64 函数进行符号化提升,生成 LLVM IR,再反复运行 LLVM 与自定义优化 pass 直至收敛,使经混淆或虚拟化的代码化简为更清晰的控制流和语义,便于分析。其范围文档列出 119 个指令处理器,支持双向分支和若干已测试的跳转表形态;README 示例提升的是作者自己用 VMProtect 和 Themida 保护的小型测试函数,输出的 IR 可编译后在反编译器中查看。

使用条件与局限

  • 审阅时最新版本为 v0.7,发布于 2026-03-29,提供 iced 与 Zydis 两种解码后端的 Windows 版 lifter 和微测试可执行文件。所审阅的 main 分支提交日期为 2026-05-08,比随后打上的 v0.8 标签多 150 个提交,而该标签没有对应的发布版本。docs/SCOPE.md 将支持范围限定为 x86-64 PE 文件,且每次只处理一个函数:不支持 32 位 x86、其他文件格式与架构、自修改代码、所列 SSE2 整数指令之外的浮点或 AVX 代码,也不支持提升整个二进制;通用反编译不在项目目标之内。
  • lifter 接收一个 PE 文件和目标函数地址,可用 --outline 指定不内联的地址;待分析的二进制须由分析者自行提供。VMProtect 检查使用的是未提交到仓库的本地受保护样本;所审阅的源码树只含源码、汇编和 C 测试源码及文档,没有预构建的可执行文件。输出为 LLVM IR 文本和 output_diagnostics.json,后者记录未能解析的间接跳转与返回。
  • 主要在 Windows 上开发并进行 CI 测试,需要 CMake、Ninja、使用 MSVC 头文件和库的 clang-cl 以及 LLVM 18,默认的 iced 后端还需要 Rust/Cargo;仅用 Zydis 的构建路线使用仓库附带的 Zydis 4.1.0 合并源码,linux-pe 以 git 子模块引入。另有一个次要的 Ubuntu 22.04 Dockerfile,用于构建并导出 Linux 版 lifter。
  • docs/SCOPE.md 报告:119 个处理器中有 115 个由 Unicorn 生成的预言(oracle)测试集覆盖,CI 用 lli 运行 33 个语义样本共 177 个运行时用例,并检查黄金 IR 哈希和 Windows 构建;文档还指出,对受保护代码的可靠性随保护级别而异。README 的分支示例仍称不支持超过两个目标的跳转,而较新的范围文档已列出若干经测试的跳转表形态。这些检查针对项目自行编译的样本,不涵盖任意受保护软件;本次未构建或运行任何内容。
  • LICENSE 为 GPL-3.0;附带的 Zydis 源码和子模块保留各自的许可证。提升得到的 IR 仍需分析者核实;所审阅的来源未表明与 REA 有关。

关于此条目

类型
工具
类别
原生分析工具
关联
基础工具
目标
二进制

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

报告条目过时 建议修正翻译

一手来源

  1. README.md GitHub · NaC-L/Mergen · 修订 1998057
  2. docs/SCOPE.md GitHub · NaC-L/Mergen · 修订 1998057
  3. docs/BUILDING.md GitHub · NaC-L/Mergen · 修订 1998057
  4. docs/REWRITE_BASELINE.md GitHub · NaC-L/Mergen · 修订 1998057
  5. ARCHITECTURE.md GitHub · NaC-L/Mergen · 修订 1998057
  6. README.md#L181 GitHub · NaC-L/Mergen · 修订 1998057
  7. lifter/core/Utils.cpp GitHub · NaC-L/Mergen · 修订 1998057
  8. Dockerfile GitHub · NaC-L/Mergen · 修订 1998057
  9. .gitmodules GitHub · NaC-L/Mergen · 修订 1998057
  10. LICENSE GitHub · NaC-L/Mergen · 修订 1998057
  11. https://github.com/NaC-L/Mergen/releases/tag/v0.7

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

原生二进制分区全部 105 项资源