Plataforma de pesquisa de devirtualização do VMProtect assistida por trace: front-ends de versão alimentam um backend compartilhado Remill/LLVM para elevar handlers, recuperar dataflow e emitir objetos nativos.
Pesquisa de desvirtualização do VMProtect assistida por trace: front-ends de versão (gate 1.x / tabela 2.x / FDJ 3.x) alimentando um backend compartilhado (lift Remill → otimização LLVM → cards semânticos → dataflow → objetos nativos).
Validado contra binários VMP 3.9.4 compilados localmente em múltiplos modos de proteção. A compatibilidade com VMP 3.8.x/3.10.x é experimental e depende da amostra.
Esta é uma plataforma de pesquisa para analisar binários protegidos com VMProtect que você possui ou tem licença para fazer engenharia reversa — não um desvirtualizador universal de apertar botão:
src/
lib.rs raiz do crate, data_dir()
pe_loader.rs parsing de PE / leituras de VA
opcode_map.rs mapa canônico de opcode 3.5.1 -> handler
frontend/
mod.rs trait VmFrontend (detect/fetch_stream/handler_addrs)
fetch_finder.rs scan FDJ movzx-byte + helpers watchset/snapshot
cryptor_miner.rs mineração de ValueCryptor por site (branch-following)
site_emulator.rs decodificadores oráculo específicos de amostra (legado)
handler_classifier.rs classificação de handler via padrões legados
classifier_legacy.rs padrões de primeiros bytes (fraco; apenas fallback)
v1_gate.rs front-end de gate-scan do VMP 1.x
v2_walker.rs front-end de tabela de dispatch do VMP 2.x
v3_fdj.rs front-end FDJ do VMP 3.x
backend/
value_cryptor.rs cadeias ADD/SUB/XOR/ROL/ROR/NOT/NEG/...
lifter.rs lift de texto iced-x86 + backend de subprocesso Remill
llvm_pipeline.rs opt -O3 sobre IR do Remill (passes reais)
harness/
snapshot.rs snapshots do Unicorn: mapeamento de sections+scratch,
hooks de IN, stubs de import, watch hits, memlog,
fast-forward zero-slide
tests/
smoke.rs PE64 sintético + cadeia de fetch construída à mão (sem fixtures)
tools/ (drivers de análise; cada um documenta suas entradas)
scripts/ helpers Triton/angr/Ghidra (dependências externas)
# Debian/Ubuntu (LLVM 22 para feature llvm opcional)
sudo apt install llvm-22-dev libclang-22-dev clang-22
cargo build --release # Rust puro (sem link LLVM)
cargo build --release --features llvm # verificação de link llvm-sys
pip install triton-library capstone pefile # helpers python
# Remill (backend de lifter opcional): compile o upstream, exporte REMILL_LIFT=<path>/remill-lift
# Souper (superotimizador MBA opcional): apenas externo, conecte seu CLI `souper`
# à saída de scripts/triton_handlers.py se desejado; não é vendorizado.
O Dockerfile reproduz o ambiente completo. O CI executa cargo build/test --release
(features padrão, sem link LLVM, sem fixtures comerciais; testes condicionados a amostra
são pulados, tests/smoke.rs sempre executa). A verificação de link opcional --features llvm
roda como job de CI não bloqueante (precisa de LLVM 22).
| Var | Padrão | Significado |
|---|---|---|
DATA_DIR | ./data | todos os artefatos da ferramenta |
WATCH_FILE | $DATA_DIR/watch.txt | VAs de fetch a observar |
CARDS | open_cards3.json | arquivo de cache de cards do Remill |
BIN_PATH | caminho do binário alvo (padrão das tools: placeholder ./target.exe) | binário alvo |
IAT_JSON | — | mapa de stub de import {api_name: iat_va} |
VMP_TEST_BIN / VMP_ORACLE | tests/fixtures/… | testes com amostra licenciada |
REMILL_LIFT | remill-lift-22 no PATH | binário de lift do Remill |
DEVIRT / FORCE_EDGE / REPO_ROOT | ./target/… / . | binários chamados por script + raiz do repo |
VMP_WORK_DIR | temp do sistema | scratch de lift |
EFLAGS / IN_RET / DLL_MAIN | — | variantes de estado do snapshot |
ret de página zero, stubs de import, hook de IN).movzx byte [reg] executados superam padrões estáticos —
hits apenas estáticos mediram 0% de execução em alvos endurecidos).opt -O3, emita cards/dataflow,
recompile com llc (ld -r prova a composabilidade).MIT (veja LICENSE) com notas de dependências (notavelmente Unicorn GPL-2.0). Apenas para uso em pesquisa/educacional, em binários que você possui ou pode analisar.