Heretek-RE/re-vtil
GitHub: Heretek-RE/re-vtil
为 VTIL-Core 提供的 MCP 服务器,能将机器码提升为中间语言、执行优化 pass 并输出伪 C 代码,辅助逆向工程中的 VM handler 语义分析。
Stars: 0 | Forks: 0
# re-vtil
用于 [VTIL-Core](https://github.com/vtil-project/VTIL-Core)(虚拟机翻译中间语言,MIT)的 MCP server。用于 VM handler 特征提取的“提升、优化、输出伪 C 代码”三件套。
## 为什么需要
其他的 RE-AI MCP server 处理的是**字节级**的二进制分析(`re-lief`、`re-rizin`、`re-triton`)。它们能告诉你一个 handler 在机器码层面*做了什么*,却无法告诉你它在更高层的 IL 中*代表什么含义*。
`re-vtil` 填补了这一空白。你向它提供一个函数的机器码,它会将其提升(lift)为 VTIL 的 IL,接着你可以运行优化 pass,最后获得一份伪 C 代码。其使用场景是 `re-encrypted-vm-tamper` 中的加密 VM handler 特征提取——一旦你知道哪些字节属于一个 handler,`re-vtil` 就能告诉你这些字节的含义。
## 架构
Python MCP server 是对 C++ ``vtil-cli`` 辅助程序的一层轻量级封装,该辅助程序由 install.sh 从内置的 VTIL-Core 源码树构建而成:
```
Claude Code (MCP stdio)
│
▼
re-vtil server (Python, this directory)
│ subprocess.run(...)
▼
vtil-cli (C++ single binary, built from src/re_vtil/cpp/VtilCli/)
│
└─ VTIL-Core (vendored as a git submodule)
```
这种子进程边界是刻意为之的:VTIL 是一个庞大的 C++ 库,没有原生的 Python 绑定。进程隔离非常稳健;如果缺少 C++ 辅助程序,Python server 始终会以降级模式加载。
## 工具
| 工具 | 作用 |
|---|---|
| `check_vtil` | 健康检查 — 返回 VTIL 版本及支持的架构 |
| `lift_handler` | 将指定基地址处的机器码(base64)提升为 VTIL IL |
| `optimize` | 运行 VTIL 优化 pass(dead-store-elim, branch-folding, mem-dep) |
| `emit_pseudo_c` | 输出 IL 树的类 C 伪代码解读 |
## 安装
`./install.sh` 通过 `cmake --build` 针对内置的 VTIL-Core 源码树构建 `vtil-cli`,然后将二进制文件复制到 `servers/re-vtil/bin/`。
如需独立构建(需要 VTIL-Core 源码 + cmake):
```
cd servers/re-vtil/src/re_vtil/cpp/VtilCli
cmake -B build -S .
cmake --build build --config Release
cp build/vtil-cli ../../../../bin/
```
运行:
```
re-vtil # stdio transport (default for MCP)
python -m re_vtil # equivalent
```
## 环境要求
- VTIL-Core 源码树(作为 submodule 内置在 `src/re_vtil/cpp/` 下)
- CMake ≥ 3.16
- C++20 编译器(gcc-10+、clang-12+、MSVC 2019+)
- capstone + z3(C++ 辅助程序链接的依赖与 `re-triton` 相同)
## 降级模式
如果未构建 `vtil-cli`,每个工具都会返回 `{"status": "WARN", "error": "vtil-cli not built; run install.sh", ...}`。Python MCP server 本身始终会加载,以便 Claude Code 能够提示安装信息。
## 与 `re-triton` 配合使用
`re-triton` 处理**具体执行** + **符号执行**(Triton 将其提升为自身的 AST,并使用具体或符号状态进行求值)。`re-vtil` 处理**静态 IL**(VTIL 将其提升为自身的 IL,运行 IR 级别的优化,并输出伪 C 代码)。两者互为补充:
- 使用 `re-triton.solve_constraint` 来解决“什么输入能到达此分支?”
- 使用 `re-vtil.lift_handler + optimize + emit_pseudo_c` 来分析“这个 handler 在抽象层面上究竟做了什么?”
对于加密 VM 字节码家族:`re-triton.emulate_function` 在具体输入下运行加密的 handler(触发解密 stub、进行 handler 分发);`re-vtil.lift_handler` 将解密后的 handler 主体提升为 VTIL IL 以供静态解读。
标签:Bash脚本, C++, Hakrawler, MCP服务, Python, 中间语言, 二进制分析, 云安全运维, 云资产清单, 代码优化, 数据擦除, 无后门, 逆向工具, 逆向工程