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 **状态:** 生产就绪
标签:可视化界面, 文档结构分析, 通知系统