Rasetsuu/vmprotect-research
GitHub: Rasetsuu/vmprotect-research
VMProtect通用Devirtualizer,用于解密和逆向VMProtect加密的二进制文件。
Stars: 13 | Forks: 2
# VMP Devirtualizer - 生产版本
支持版本 1.x、2.x 和 3.x 的通用 VMProtect Devirtualizer。独立 CLI 工具 + Ghidra 插件。
**状态:** ✅ 生产就绪 | **验证:** 22/22 样本(100%)| **范围:** VMP ≤3.6(3.7+ 需要逆向工程)
## 功能
- **多版本支持:** VMP 1.x、2.x、3.x(1.1 → 3.10.5)
- **版本检测:** 通过启发式方法自动识别
- **调度表提取:** 使用 Unicorn XOR 密钥捕获加密表
- **处理程序分类:** 所有版本中的 256 种处理程序类型
- **字节码解码:** VM 操作 → x86-64 指令重建
- **平台支持:** Windows PE + Linux ELF 可执行文件
- **反汇编器集成:** VM 字节码 → 伪代码
- **Ghidra 插件:** 交互式处理程序分析 + 注释
## 快速入门
### 构建
```
cd /home/ciupix/vmp_devirt_prod
cargo build --release
```
二进制文件:`target/release/vmp_devirt`
### 使用
```
# 分析二进制
./target/release/vmp_devirt
# 导出处理器
./target/release/vmp_devirt --export-handlers handlers.json
# 导出字节码
./target/release/vmp_devirt --export-bytecode bytecode.json
```
## 验证结果
### 摘要
- **总样本数:** 22
- **成功率:** 22/22(100%)
- **平均处理时间:** 229ms
- **总时间:** 5.0 秒
### 按版本
| 版本 | 样本 | 成功 | 平均时间 |
|---------|---------|---------|----------|
| VMP 1.x | 4 | 4/4 | 38ms |
| VMP 2.x | 6 | 6/6 | 734ms |
| VMP 3.x | 12 | 12/12 | 39ms |
**测试样本:**
- VMP 1.x: HiVmp.vmp.1.1.exe, HiVmp.vmp.1.4.exe, HiVmp.vmp.1.54.exe, HiVmp.vmp.1.70.4.exe
- VMP 2.x: Branch0.vmp.exe, HiVmp.exe, mfc_algo_demo.vmp.exe, Project1.vmp.exe, Project2.vmp.exe, Project4.vmp.exe
- VMP 3.x: add_control_flow.vmp.exe, adder.vmp.exe, bitwise.vmp.exe, control_flow_test.vmp.exe, cpuid_test.vmp.exe, fac_fib.vmp.exe, globals.vmp.exe, hello_world.vmp.exe, multiadder.vmp.exe, nested_virt_funccall.vmp.exe, ptr_drf.vmp.exe, switch.vmp.exe
有关详细结果,请参阅 `VALIDATION_REPORT.md`。
## 架构
```
Input Binary
↓
PE/ELF Loader (src/pe_loader.rs)
↓
Version Detector (src/version.rs)
↓
Dispatch Table Extractor (src/dispatch_table.rs)
├─ Unicorn XOR Key Capture (src/unicorn_emulator.rs)
└─ Pattern Matching Fallback
↓
Handler Classifier (src/handler_classifier.rs)
↓
Bytecode Decoder (src/bytecode.rs)
├─ Operand Decryption (src/decrypt.rs)
└─ ALU Reconstruction (src/alu.rs)
↓
Output (JSON/Pseudo-asm)
```
## 核心模块
| 模块 | 目的 | 行数 |
|--------|---------|-------|
| `src/lib.rs` | 主库接口 | 150 |
| `src/version.rs` | VMP 版本检测 | 200 |
| `src/pe_loader.rs` | PE/ELF 二进制加载 | 350 |
| `src/dispatch_table.rs` | 调度表提取 | 400 |
| `src/unicorn_emulator.rs` | XOR 密钥捕获 | 308 |
| `src/handler_classifier.rs` | 处理程序类型识别 | 280 |
| `src/bytecode.rs` | 字节码读取/解码 | 320 |
| `src/decrypt.rs` | ValueCryptor 链 | 250 |
| `src/alu.rs` | ALU 操作重建 | 200 |
| `src/opcode_table.rs` | 操作码管理 | 180 |
| `src/bin/cli.rs` | CLI 工具 | 400 |
**总计:** ~2,800 行生产级 Rust 代码
## 实现细节
### 版本检测
基于以下启发式方法:
- 处理程序入口模式(POP/PUSH 操作码)
- 调度机制(跳转表 vs. 加密链 vs. 处理程序链)
- PE 部分布局(.vmp0, .vmp1, .text)
- 入口占位符模式(PUSH 加密 + CALL/JMP)
### 调度表提取
**VMP 1.x/2.x:** 通过 .text 部分中的模式匹配提取 XOR 密钥
- 扫描 XOR 指令模式
- 从操作码序列中推导密钥
- 与图像基范围进行验证
**VMP 3.x:** 处理程序链调度
- 定位调度点(DP0-DP5)
- 跟踪处理程序链
- 提取 256 个调度条目
### 处理程序分类
基于以下模式匹配:
- 入口模式(49 8b 2a = POP 对于 VMP 3.x)
- 核心操作(SUB、ADD、XOR 等)
- 操作数类型(槽、偏移、立即数)
- 调度机制(push/ret、直接跳转)
### 字节码解码
1. 从字节码部分读取操作码
2. 查找处理程序语义
3. 提取操作数(槽、偏移)
4. 通过 ValueCryptor 链解密操作数
5. 重建 x86-64 指令
6. 处理 VM 上下文(寄存器文件、标志、堆栈)
## 已知限制
1. **VMP 3.7+(合并处理程序)** - 不支持。VMP 3.7+ 引入了合并处理程序(每个处理程序入口多个操作),这破坏了当前的分类器。需要使用实际的 3.7+ 样本进行逆向工程。有关详细信息,请参阅 `FUTURE_WORK.md`。
2. **XOR 密钥验证警告** - 对于 VMP 1.x/2.x(非关键)
3. **VMP 3.x 调度检测** - 使用针对较新混淆策略的回退策略
4. **Linux 样本** - 当前测试集中不包括(已实现 ELF 支持)
## 性能
- **吞吐量:** ~4.4 样本/秒
- **内存:** 每个样本 <50MB
- **延迟:** 5ms-3.25s,取决于二进制文件大小
## 文档
- `VALIDATION_REPORT.md` - 综合测试结果
- `IMPLEMENTATION_COMPLETE.md` - 实现状态
- `UNICORN_IMPLEMENTATION_REPORT.md` - XOR 密钥捕获细节
## 源引用
基于 VMP 3.5.1 源代码泄露分析:
- 处理程序结构和调度机制
- ValueCryptor 链实现
- ALU 操作模式
- VM 上下文管理
## 许可证
研究/教育用途
## 联系
有关问题或疑问,请参阅验证报告或实现文档。
**最后更新时间:** 2026-06-01
**状态:** 生产就绪
标签:可视化界面, 文档结构分析, 通知系统