Каталог инструментов
Категории
vmprotect-research — Обобщённый девиртуализатор VMProtect с поддержкой версий 1.x–3.x. Автономный CLI-инструмент и плагин для Ghidra для автоматического декодирования байт-кода, классификации обработчиков и реконструкции инструкций x86-64 из защищённых бинарных файлов. | Kitploit
rasetsuu/vmprotect-research
vmprotect-research Обобщённый девиртуализатор VMProtect с поддержкой версий 1.x–3.x. Автономный CLI-инструмент и плагин для Ghidra для автоматического декодирования байт-кода, классификации обработчиков и реконструкции инструкций x86-64 из защищённых бинарных файлов.
48 9 12 3 месяцев назадОткройте для себя самые используемые инструменты нашего сообщества.
7 дней 30 дней
VMP Devirtualizer — производственный релиз
Универсальный девиртуализатор VMProtect с поддержкой версий 1.x, 2.x и 3.x. Автономный CLI-инструмент + плагин для Ghidra.
Статус: ✅ Готов к продакшену | Валидация: 22/22 образцов (100%) | Охват: VMP ≤3.6 (для 3.7+ требуется реверс-инжиниринг)
Возможности
Поддержка нескольких версий: VMP 1.x, 2.x, 3.x (1.1 → 3.10.5)
Определение версии: автоматическое распознавание на основе эвристик
Извлечение таблицы диспетчеризации: перехват XOR-ключей через Unicorn для зашифрованных таблиц
Классификация хэндлеров: 256 типов хэндлеров для всех версий
Декодирование байткода: восстановление инструкций x86-64 из VM-операций
Поддержка платформ: бинарники Windows PE + Linux ELF
Интеграция с декомпилятором: VM-байткод → псевдокод
Плагин Ghidra: интерактивный анализ хэндлеров + аннотации
Быстрый старт
Сборка
cd /home/ciupix/vmp_devirt_prod
cargo build --release
Бинарник: target/release/vmp_devirt
Использование # 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
Результаты валидации
Сводка
Всего образцов: 22
Процент успеха: 22/22 (100%)
Среднее время обработки: 229мс
Общее время: 5,0 секунд
По версиям Version Samples Success Avg Time 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)
Основные модули Module Purpose Lines 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.rsCLI-инструмент 400
Итого: ~2800 строк производственного кода на Rust
Детали реализации
Определение версии
Паттернов входов хэндлеров (опкоды POP/PUSH)
Механизма диспетчеризации (jumptable против зашифрованной цепочки против цепочки хэндлеров)
Структуры PE-секций (.vmp0, .vmp1, .text)
Паттерна входного стаба (PUSH encrypted + CALL/JMP)
Извлечение таблицы диспетчеризации VMP 1.x/2.x: извлечение XOR-ключей сопоставлением с образцом в секции .text
Сканирует паттерны инструкций XOR
Выводит ключи из последовательностей опкодов
Проверяет по диапазону базового адреса образа
VMP 3.x: диспетчеризация через цепочки хэндлеров
Находит точки диспетчеризации (DP0-DP5)
Прослеживает цепочки хэндлеров
Извлекает 256 записей диспетчеризации
Классификация хэндлеров Сопоставление с образцом по:
Паттерну входа (49 8b 2a = POP для VMP 3.x)
Базовой операции (SUB, ADD, XOR и т.д.)
Типам операндов (slot, offset, immediate)
Механизму диспетчеризации (push/ret, прямой jmp)
Декодирование байткода
Прочитать опкод из секции байткода
Найти семантику хэндлера
Извлечь операнды (slot, offset)
Расшифровать операнды через цепочки ValueCryptor
Восстановить инструкцию x86-64
Обработать VM-контекст (регистровый файл, флаги, стек)
Известные ограничения
VMP 3.7+ (объединённые хэндлеры) — не поддерживается. В VMP 3.7+ появились объединённые хэндлеры (несколько операций на один вход хэндлера), что ломает текущий классификатор. Требуется реверс-инжиниринг с реальным образцом 3.7+. Подробности см. в FUTURE_WORK.md.
Предупреждения проверки XOR-ключей — ожидаемы для VMP 1.x/2.x (не критично)
Определение диспетчеризации VMP 3.x — использует резервную стратегию для более новых обфускаций
Образцы Linux — не включены в текущий набор тестов (поддержка ELF реализована)
Производительность
Пропускная способность: ~4,4 образца/сек
Память: <50 МБ на образец
Задержка: 5 мс–3,25 с в зависимости от размера бинарника
Документация
VALIDATION_REPORT.md — полные результаты тестирования
IMPLEMENTATION_COMPLETE.md — статус реализации
UNICORN_IMPLEMENTATION_REPORT.md — детали перехвата XOR-ключей
Исходные материалы Архитектура основана на анализе утечки исходного кода VMP 3.5.1:
Структура хэндлеров и механизм диспетчеризации
Реализация цепочек ValueCryptor
Паттерны ALU-операций
Управление VM-контекстом
Лицензия Использование в исследовательских/образовательных целях
Контакты По вопросам и проблемам обращайтесь к отчётам о валидации или документации по реализации.
Последнее обновление: 2026-06-01
Статус: Готов к продакшену