基于Trace辅助的VMProtect去虚拟化研究平台:各版本前端将处理程序提供给共享的Remill/LLVM后端,以提升处理程序、恢复数据流并生成原生对象。
跟踪辅助的 VMProtect 去虚拟化研究:版本前端 (1.x 门 / 2.x 表 / 3.x FDJ)馈入一个共享后端 (Remill 提升 → LLVM 优化 → 语义卡片 → 数据流 → 原生对象)。
已针对自建的 VMP 3.9.4 二进制文件在多种 保护模式下验证。VMP 3.8.x/3.10.x 兼容性为实验性且 依赖于样本。
这是一个用于分析你拥有或获授权进行逆向工程的 VMProtect 保护二进制文件的研究平台——而非通用的、 一键式去虚拟化工具:
src/
lib.rs crate 根,data_dir()
pe_loader.rs PE 解析 / VA 读取
opcode_map.rs 规范 3.5.1 操作码 -> 处理程序映射
frontend/
mod.rs VmFrontend trait (detect/fetch_stream/handler_addrs)
fetch_finder.rs movzx-byte FDJ 扫描 + watchset/snapshot 辅助
cryptor_miner.rs 逐站点 ValueCryptor 挖掘(分支跟随)
site_emulator.rs 样本特定预言机解码器(遗留)
handler_classifier.rs 通过遗留模式进行处理程序分类
classifier_legacy.rs 首字节模式(弱;仅作回退)
v1_gate.rs VMP 1.x 门扫描前端
v2_walker.rs VMP 2.x 分发表前端
v3_fdj.rs VMP 3.x FDJ 前端
backend/
value_cryptor.rs ADD/SUB/XOR/ROL/ROR/NOT/NEG/... 链
lifter.rs iced-x86 文本提升 + Remill 子进程后端
llvm_pipeline.rs 对 Remill IR 运行 opt -O3(真实 pass)
harness/
snapshot.rs Unicorn 快照:节区+暂存映射、
IN 钩子、导入桩、监视命中、memlog、
零滑动快进
tests/
smoke.rs 合成 PE64 + 手工构建的获取链(无夹具)
tools/ (分析驱动程序;每个都记录其输入)
scripts/ Triton/angr/Ghidra 辅助脚本(外部依赖)
# Debian/Ubuntu (LLVM 22 for optional llvm feature)
sudo apt install llvm-22-dev libclang-22-dev clang-22
cargo build --release # pure Rust (no LLVM link)
cargo build --release --features llvm # llvm-sys link check
pip install triton-library capstone pefile # python helpers
# Remill (optional lifter backend): build upstream, export REMILL_LIFT=<path>/remill-lift
# Souper (optional MBA superoptimizer): external only, wire its `souper` CLI
# to scripts/triton_handlers.py output if desired; not vendored.
Dockerfile 复现完整环境。CI 运行 cargo build/test --release
(默认特性,无 LLVM 链接,无商业夹具;样本门控
测试跳过,tests/smoke.rs 始终运行)。可选的 --features llvm
链接检查作为非阻塞 CI 作业运行(需要 LLVM 22)。
| 变量 | 默认值 | 含义 |
|---|---|---|
DATA_DIR | ./data | 所有工具产物 |
WATCH_FILE | $DATA_DIR/watch.txt | 要监视的获取 VA |
CARDS | open_cards3.json | Remill 卡片缓存文件 |
BIN_PATH | 目标二进制路径(工具默认:./target.exe 占位符) | 目标二进制 |
IAT_JSON | — | {api_name: iat_va} 导入桩映射 |
VMP_TEST_BIN / VMP_ORACLE | tests/fixtures/… | 授权样本测试 |
REMILL_LIFT | PATH 上的 remill-lift-22 | Remill 提升二进制 |
DEVIRT / FORCE_EDGE / REPO_ROOT | ./target/… / . | 脚本调用的二进制 + 仓库根 |
VMP_WORK_DIR | 系统临时目录 | 提升暂存 |
EFLAGS / IN_RET / DLL_MAIN | — | 快照状态变体 |
ret,导入桩,IN 钩子)。movzx byte [reg] 优于静态模式——
在加固目标上仅静态命中测得 0% 执行率)。opt -O3,生成卡片/数据流,
用 llc 重新编译(ld -r 证明可组合性)。MIT(见 LICENSE)附依赖说明(特别是 Unicorn GPL-2.0)。 仅限研究/教育用途,用于你拥有或可分析的二进制文件。