Исследовательская платформа для девиртуализации VMProtect с поддержкой трассировки: фронтенды версий передают данные в общий бэкенд Remill/LLVM для лифтинга обработчиков, восстановления потоков данных и генерации нативных объектов.
Исследование девиртуализации VMProtect с поддержкой трассировки: фронтенды версий (1.x gate / 2.x table / 3.x FDJ), питающие один общий бэкенд (лифтинг Remill → оптимизация LLVM → семантические карточки → поток данных → нативные объекты).
Проверено на самостоятельно собранных бинарниках VMP 3.9.4 в нескольких режимах защиты. Совместимость с VMP 3.8.x/3.10.x экспериментальна и зависит от образца.
Это исследовательская платформа для анализа защищённых VMProtect бинарников, которыми вы владеете или на реверс-инжиниринг которых у вас есть лицензия — а не универсальный девиртуализатор «нажатием одной кнопки»:
src/
lib.rs корень крейта, data_dir()
pe_loader.rs разбор PE / чтение VA
opcode_map.rs канонический 3.5.1 opcode -> карта обработчиков
frontend/
mod.rs трейт VmFrontend (detect/fetch_stream/handler_addrs)
fetch_finder.rs movzx-byte FDJ сканирование + помощники watchset/snapshot
cryptor_miner.rs майнинг ValueCryptor по сайтам (с следованием ветвям)
site_emulator.rs специфичные для образца оракульные декодеры (legacy)
handler_classifier.rs классификация обработчиков через legacy-паттерны
classifier_legacy.rs паттерны первых байт (слабые; только как fallback)
v1_gate.rs фронтенд сканирования шлюзов VMP 1.x
v2_walker.rs фронтенд таблицы диспетчеризации VMP 2.x
v3_fdj.rs фронтенд FDJ VMP 3.x
backend/
value_cryptor.rs цепочки ADD/SUB/XOR/ROL/ROR/NOT/NEG/...
lifter.rs текстовый лифтинг iced-x86 + бэкенд подпроцесса Remill
llvm_pipeline.rs opt -O3 над Remill IR (реальные проходы)
harness/
snapshot.rs снимки Unicorn: отображение секций+scratch,
IN-хуки, заглушки импортов, попадания watch, memlog,
zero-slide fast-forward
tests/
smoke.rs синтетический PE64 + вручную собранная цепочка выборки (без фикстур)
tools/ (драйверы анализа; каждый документирует свои входные данные)
scripts/ помощники Triton/angr/Ghidra (внешние зависимости)
# Debian/Ubuntu (LLVM 22 для опциональной фичи llvm)
sudo apt install llvm-22-dev libclang-22-dev clang-22
cargo build --release # чистый Rust (без линковки LLVM)
cargo build --release --features llvm # проверка линковки llvm-sys
pip install triton-library capstone pefile # python-помощники
# Remill (опциональный бэкенд лифтера): собрать upstream, экспортировать REMILL_LIFT=<path>/remill-lift
# Souper (опциональный MBA-супероптимизатор): только внешний, подключить его CLI `souper`
# к выводу scripts/triton_handlers.py при желании; не вендорится.
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 | путь к целевому бинарнику (по умолчанию в tools: заглушка ./target.exe) | целевой бинарник |
IAT_JSON | — | карта заглушек импорта {api_name: iat_va} |
VMP_TEST_BIN / VMP_ORACLE | tests/fixtures/… | тесты на лицензированных образцах |
REMILL_LIFT | remill-lift-22 в PATH | бинарник лифтинга Remill |
DEVIRT / FORCE_EDGE / REPO_ROOT | ./target/… / . | вызываемые скриптами бинарники + корень репозитория |
VMP_WORK_DIR | системный temp | рабочая область лифтинга |
EFLAGS / IN_RET / DLL_MAIN | — | варианты состояния снимка |
ret, заглушки импортов, IN-хук).movzx byte [reg] превосходят статические паттерны —
чисто статические попадания показали 0% исполнения на укреплённых целях).opt -O3, выдавать карточки/поток данных,
перекомпилировать с llc (ld -r доказывает композируемость).MIT (см. LICENSE) с примечаниями о зависимостях (в частности, Unicorn GPL-2.0). Только для исследовательского/образовательного использования, на бинарниках, которыми вы владеете или которые можете анализировать.