VMP Devirtualizer - Rilascio di Produzione
Devirtualizzatore VMProtect generalizzato con supporto per le versioni 1.x, 2.x e 3.x. Strumento CLI autonomo + plugin Ghidra.
Stato: ✅ Pronto per la produzione | Validazione: 22/22 campioni (100%) | Ambito: VMP ≤3.6 (3.7+ richiede reverse engineering)
Funzionalità
- Supporto Multi-Versione: VMP 1.x, 2.x, 3.x (1.1 → 3.10.5)
- Rilevamento Versione: Identificazione automatica tramite euristiche
- Estrazione Tabella di Dispatch: Acquisizione chiave XOR tramite Unicorn per tabelle crittografate
- Classificazione Handler: 256 tipi di handler in tutte le versioni
- Decodifica Bytecode: operazioni VM → ricostruzione istruzioni x86-64
- Supporto Piattaforme: binari Windows PE + Linux ELF
- Integrazione Decompilatore: bytecode VM → pseudocodice
- Plugin Ghidra: analisi interattiva degli handler + annotazione
Avvio Rapido
Compilazione
cd /home/ciupix/vmp_devirt_prod
cargo build --release
Binario: target/release/vmp_devirt
Utilizzo
# Analyze binary
./target/release/vmp_devirt <binary_path>
# Export handlers
./target/release/vmp_devirt <binary_path> --export-handlers handlers.json
# Export bytecode
./target/release/vmp_devirt <binary_path> --export-bytecode bytecode.json
Risultati della Validazione
Riepilogo
- Totale Campioni: 22
- Tasso di Successo: 22/22 (100%)
- Tempo Medio di Elaborazione: 229 ms
- Tempo Totale: 5,0 secondi
Per Versione
| Versione | Campioni | Successo | Tempo Medio |
|---|
| VMP 1.x | 4 | 4/4 | 38ms |
| VMP 2.x | 6 | 6/6 | 734ms |
| VMP 3.x | 12 | 12/12 | 39ms |
Campioni Testati:
- 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
Vedi VALIDATION_REPORT.md per i risultati dettagliati.
Architettura
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)
Moduli Principali
| Modulo | Scopo | Righe |
|---|
src/lib.rs | Interfaccia principale della libreria | 150 |
src/version.rs | Rilevamento versione VMP | 200 |
src/pe_loader.rs | Caricamento binari PE/ELF | 350 |
src/dispatch_table.rs | Estrazione tabella di dispatch | 400 |
src/unicorn_emulator.rs | Acquisizione chiave XOR | 308 |
src/handler_classifier.rs | Identificazione tipo handler | 280 |
src/bytecode.rs | Lettura/decodifica bytecode | 320 |
src/decrypt.rs | Catene ValueCryptor | 250 |
src/alu.rs | Ricostruzione operazioni ALU | 200 |
src/opcode_table.rs | Gestione opcode | 180 |
src/bin/cli.rs | Strumento CLI | 400 |
Totale: ~2.800 righe di codice Rust di produzione
Dettagli di Implementazione
Rilevamento Versione
Euristiche basate su:
- Pattern di ingresso degli handler (opcode POP/PUSH)
- Meccanismo di dispatch (jumptable vs. catena crittografata vs. catena di handler)
- Layout delle sezioni PE (.vmp0, .vmp1, .text)
- Pattern dello stub di ingresso (PUSH crittografato + CALL/JMP)
Estrazione Tabella di Dispatch
VMP 1.x/2.x: Estrazione della chiave XOR tramite pattern matching nella sezione .text
- Analizza i pattern di istruzioni XOR
- Deriva le chiavi dalle sequenze di opcode
- Valida rispetto all'intervallo dell'image base
VMP 3.x: Dispatch tramite catena di handler
- Individua i punti di dispatch (DP0-DP5)
- Traccia le catene di handler
- Estrae 256 voci di dispatch
Classificazione Handler
Pattern matching su:
- Pattern di ingresso (49 8b 2a = POP per VMP 3.x)
- Operazione principale (SUB, ADD, XOR, ecc.)
- Tipi di operando (slot, offset, immediato)
- Meccanismo di dispatch (push/ret, jmp diretto)
Decodifica Bytecode
- Leggere l'opcode dalla sezione bytecode
- Cercare la semantica dell'handler
- Estrarre gli operandi (slot, offset)
- Decrittare gli operandi tramite le catene ValueCryptor
- Ricostruire l'istruzione x86-64
- Gestire il contesto VM (register file, flag, stack)
Limitazioni Note
- VMP 3.7+ (Handler Uniti) - Non supportato. VMP 3.7+ ha introdotto gli handler uniti (più operazioni per voce di handler) che compromettono il classificatore attuale. Richiede reverse engineering con un campione reale 3.7+. Vedi
FUTURE_WORK.md per i dettagli.
- Avvisi di Validazione Chiave XOR - Previsti per VMP 1.x/2.x (non critici)
- Rilevamento Dispatch VMP 3.x - Usa una strategia di fallback per le offuscazioni più recenti
- Campioni Linux - Non inclusi nel set di test attuale (supporto ELF implementato)
Prestazioni
- Throughput: ~4,4 campioni/secondo
- Memoria: <50MB per campione
- Latenza: 5ms-3,25s a seconda della dimensione del binario
Documentazione
VALIDATION_REPORT.md - Risultati di test completi
IMPLEMENTATION_COMPLETE.md - Stato dell'implementazione
UNICORN_IMPLEMENTATION_REPORT.md - Dettagli sull'acquisizione della chiave XOR
Riferimenti alla Sorgente
Architettura basata sull'analisi della fuga del codice sorgente VMP 3.5.1:
- Struttura degli handler e meccanismo di dispatch
- Implementazione delle catene ValueCryptor
- Pattern delle operazioni ALU
- Gestione del contesto VM
Licenza
Uso per Ricerca/Scopi Educativi
Contatti
Per problemi o domande, fai riferimento ai report di validazione o alla documentazione dell'implementazione.
Ultimo Aggiornamento: 2026-06-01
Stato: Pronto per la produzione