# Devirtualization Vmp

> 去虚化 / VMP 虚拟化加固分析方法论（供安全研究/自有应用）。当 native 代码被 VMP 类虚拟机保护（真实指令被转成自定义字节码 + 解释器执行）导致完全看不到原始逻辑时，用于识别 VM 结构、分析 handler、还原字节码到 ARM/x86 汇编。涵盖 VM dispatcher/handler 识别、handler 语义提取、字节码还原流程。

- Skill: `xiamiya/devirtualization-vmp` (Agent Skill)
- Install (CLI): `npx skillmds@latest add xiamiya/devirtualization-vmp`
- Raw SKILL.md: https://api.skillmd.com/api/skills/xiamiya/devirtualization-vmp/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: xiamiya (https://skillmd.com/u/xiamiya)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/xiamiya/devirtualization-vmp

---


# 去虚化 · VMP 虚拟化加固分析

VMP 是最强的加固之一：把真实机器指令翻译成**自定义字节码**，运行时用一个**解释器（VM）**逐条解释执行。你在 IDA 里只看到 VM 循环，看不到原始逻辑。去虚化就是把它还原回来。

## 一、VMP 的结构（先认清）
```
VM 入口 → 初始化 VM 上下文(虚拟寄存器/栈)
  ↓
分发器 Dispatcher: 取下一条字节码 → 查 handler 表 → 跳对应 handler
  ↓
Handler[0]: 实现某个虚拟操作(如 vAdd/vLoad/vJmp) → 回到分发器
Handler[1]: ...
```
关键三要素：**VM 上下文**（虚拟寄存器）、**分发器**（取指+派发）、**handler 表**（每条虚拟指令的实现）。

## 二、去虚化流程
1. **定位 VM 入口和分发器**：找那个"取字节码→大跳转表/间接跳转→循环"的结构。
2. **dump 字节码**：找到 VM 执行的字节码数组（handler 表地址、字节码起始）。
3. **分析每个 handler 的语义**：逐个 handler 看它对虚拟寄存器/栈做什么，翻译成一句话（"这个 handler = 把虚拟栈顶两个数相加"）。
   - 这步最费时，可配合 **符号执行(Miasm/Triton)** 自动提取 handler 语义。
4. **建立字节码→操作映射**：把每个字节码 opcode 对应到还原的操作。
5. **写转换脚本**：遍历字节码，按映射翻译回 ARM/x86 伪汇编或伪代码。
6. **优化输出**：消除 VM 开销（虚拟寄存器读写），得到接近原始的逻辑。

## 三、工具与方法
- **手工 + IDA**：小函数、单个 VM，人工分析 handler
- **Miasm/Triton 符号执行**：自动提取 handler 语义（见 static-symbolic-execution），VMP 去虚化的主力
- **已知 VMP 变种**：先搜有没有现成的去虚化脚本/工具（不同 VMP 实现差异大）
- **动态辅助**：unicorn 模拟执行跟踪 VM 实际跑的字节码序列（见 rev-unicorn-debug）

## 四、现实预期（诚实说）
- VMP 去虚化是**逆向天花板级**难度，商用 VMP（如 VMProtect 强度）**完整还原极难**，多数情况只能**还原关键片段**（如某个校验/算法函数）而非整个程序。
- 很多时候更划算的是**绕过而非还原**：hook VM 的输入输出边界，拿到明文结果（配合 frida/算法助手），不去啃 VM 内部。
- 先问自己：真的要还原 VM，还是只要那个结果？后者简单得多。

## 五、玄星里 AI 的角色
- 帮你识别 VM 结构、规划去虚化步骤、写 handler 分析脚本和字节码转换脚本
- 分析工具（Miasm/Triton/IDA）跑在 PC，AI 指导 + 解读
- 建议优先评估"绕过 VM 边界"这条捷径

## 边界
用于自有 App / 授权样本的加固研究、算法分析、学习 VM 保护原理、安全评估。不协助破解他人付费/侵权牟利。

