Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
VMPacker — ARM64 ELF Система защиты виртуальной машины | Kitploit
Инструменты/GitHubGitHub/leochen-coremind/vmpacker
Безопасность встроенных системФреймворки для эксплойтовБезопасность IoTАнализ уязвимостейОбратная инженерияФаззингТестирование на ПроникновениеМобильная безопасностьАппаратная БезопасностьАнализ Бинарных ФайловАнти-Бот
4771704 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHub
leochen-coremind/vmpacker

VMPacker

ARM64 ELF Система защиты виртуальной машины

Репозиторий

🛡️ VMPacker

Система защиты ARM64 ELF на основе виртуальной машины

Преобразует нативные инструкции ARM64 в пользовательский байт-код ВМ для защиты кода на уровне функций

🇨🇳 中文文档 • Возможности • Архитектура • Быстрый старт • Использование • Лицензия


Обзор

VMPacker — это система защиты с помощью виртуальной машины (VMP) для ARM64 (AArch64) Linux ELF-бинарных файлов. Она декодирует нативные инструкции ARM64 целевой функции в промежуточное представление, преобразует их в пользовательский байт-код ВМ и внедряет встроенный интерпретатор ВМ в ELF-файл. Во время выполнения защищённые функции исполняются интерпретатором ВМ вместо нативного выполнения.

Основная концепция

root@kitploit:~
ARM64 Native Code  →  Decode  →  Translate  →  Custom VM Bytecode
                                                      ↓
                    Original ELF  ←  Inject  ←  VM Interpreter Stub

Возможности

🔄 Движок трансляции инструкций

  • 63 инструкции ВМ — охватывают ALU, память, ветвления, системные вызовы и другое
  • Таблично-управляемый декодер — сопоставление с образцом на основе справочника архитектуры ARM
  • Поддерживается 121 инструкция ARM64 (100% покрытие базового A64), включая:
    • Арифметика/Логика (ADD, SUB, MUL, AND, ORR, EOR, LSL, LSR, ASR, MVN, BIC, ORN, EON...)
    • Умножение с расширением (MADD, MSUB, SMADDL, SMSUBL, UMADDL, UMSUBL, SMULH, UMULH, UDIV, SDIV)
    • Перемещение данных (MOV, MOVZ, MOVK, MOVN)
    • Доступ к памяти (LDR, STR, LDP, STP, LDPSW, LDADD, CAS, LDAR, STLR, LDAXR, STLXR — различной ширины и режимов адресации)
    • Управление ветвлениями (B, BL, BR, BLR, RET, B.cond, CBZ/CBNZ, TBZ/TBNZ)
    • Условный выбор (CSEL, CSINC, CSINV, CSNEG, CCMP, CCMN)
    • Битовые поля (UBFM, SBFM, BFM, EXTR)
    • Битовые операции (CLZ, CLS, RBIT, REV, REV16, REV32)
    • Арифметика с переносом (ADC, ADCS, SBC, SBCS)
    • Загрузка/сохранение SIMD (LD1, ST1)
    • Системные/барьерные инструкции (SVC, MRS, MSR, ADRP/ADR, DMB, DSB, ISB, HLT, BRK, PRFM)

🔐 Многоуровневая защита

🖥️ Графический интерфейс

  • Кроссплатформенное десктопное приложение на Wails v2 (Go + Vue 3)
  • Компоненты UI Element Plus
  • Выбор функций по символам + ручной ввод функции (защита по диапазону адресов)
  • Защита одной кнопкой с выводом логов в реальном времени

Архитектура

root@kitploit:~
vmp/
├── cmd/vmpacker/          # Точка входа CLI
│   ├── main.go            # Разбор аргументов CLI + оркестровка
│   └── vm_interp.bin      # Скомпилированный интерпретатор ВМ (GCC, go:embed)
│
├── pkg/                   # Основная библиотека Go
│   ├── arch/arm64/        # Поддержка архитектуры ARM64
│   │   ├── decoder.go     # Таблично-управляемый декодер инструкций (реализует vm.Decoder)
│   │   ├── decode_*.go    # Таблицы шаблонов декодирования (DP-IMM/DP-REG/Branch/LdSt)
│   │   ├── translator.go  # Транслятор ARM64 → байт-код ВМ
│   │   ├── tr_alu.go      # Трансляция ALU-инструкций
│   │   ├── tr_branch.go   # Трансляция инструкций ветвления
│   │   ├── tr_loadstore.go # Трансляция инструкций работы с памятью
│   │   ├── tr_bitfield.go # Трансляция инструкций битовых полей
│   │   └── tr_special.go  # Специальные инструкции (ADRP/ADR)
│   ├── vm/                # Определения ISA ВМ
│   │   ├── types.go       # Общие типы + интерфейсы (Decoder/Translator/Packer)
│   │   ├── opcodes.go     # 58+ определений опкодов ВМ (случайно отображаемые значения)
│   │   └── disasm.go      # Дизассемблер байт-кода ВМ
│   └── binary/elf/        # Манипуляции с ELF-бинарными файлами
│       ├── packer.go      # Внедрение VMP в ELF (перехват PT_NOTE, генерация трамплина)
│       └── trampoline.go  # Генерация кода трамплина
│
├── stub/                  # Интерпретатор ВМ на C (скомпилирован в PIC плоский бинарник)
│   ├── vm_interp_clean.c  # Основной цикл интерпретатора + точки входа
│   ├── vm_types.h         # Контекст ЦП ВМ (vm_ctx_t)
│   ├── vm_opcodes.h       # Определения опкодов на C (синхронизированы с opcodes.go)
│   ├── vm_decode.h        # Утилиты чтения байт-кода
│   ├── vm_token.h         # Кодирование/декодирование токена + таблица дескрипторов
│   ├── vm_dispatch.h      # Таблица косвенной диспетчеризации
│   ├── vm_crc.h           # Проверка целостности CRC32
│   ├── vm_sections.h      # Макросы разброса секций обработчиков
│   ├── vm_interp.lds      # Скрипт компоновщика
│   └── vm_handlers/       # Модульные обработчики инструкций
│       ├── h_alu.h        # Арифметические/логические операции
│       ├── h_mem.h        # Доступ к памяти
│       ├── h_branch.h     # Ветвления/переходы
│       ├── h_cmp.h        # Сравнения/условные операции
│       ├── h_mov.h        # Перемещение данных
│       ├── h_stack.h      # Стек (PUSH/POP)
│       └── h_system.h     # Системные операции (SVC/MRS/BLR/BR/RET)
│
├── vmp-gui/               # Фронтенд GUI Wails
│   ├── frontend/          # Vue 3 + Element Plus
│   └── backend/           # Привязки бэкенда на Go
│
└── build/                 # Предварительно скомпилированные инструменты + тестовые артефакты

Модульная конструкция

Проект использует интерфейсно-ориентированную модульную архитектуру, что упрощает расширение на новые ISA и бинарные форматы:

root@kitploit:~
// Интерфейс архитектурного декодера — расширяемый для x86, RISC-V
type Decoder interface {
    Decode(raw uint32, offset int) Instruction
    InstName(op int) string
}

// Интерфейс транслятора байт-кода
type Translator interface {
    Translate(instructions []Instruction) (*TranslateResult, error)
}

// Интерфейс инжектора бинарных форматов — расширяемый для PE, Mach-O
type Packer interface {
    Process() error
}

Конвейер защиты

root@kitploit:~
graph LR
    A[Входной ELF] --> B[Найти целевую функцию]
    B --> C[Извлечь инструкции ARM64]
    C --> D[Декодировать ARM64]
    D --> E[Транслировать в байт-код ВМ]
    E --> F[XOR-шифрование байт-кода]
    F --> G[Внедрить интерпретатор ВМ]
    G --> H[Сгенерировать трамплин]
    H --> I[Заменить вход функции]
    I --> J[Выходной защищённый ELF]

Быстрый старт

Предварительные требования

  • Go 1.21+
  • GCC (aarch64-linux-gnu-gcc) — для компиляции заглушки
  • Linux ARM64 или среда кросс-компиляции

Установка

root@kitploit:~
git clone https://github.com/LeoChen-CoreMind/VMPacker.git
cd VMPacker
make all

Использование

Защита по имени функции

root@kitploit:~
# Защита одной функции
./vmpacker -func check_license -v -o protected.elf original.elf

# Защита нескольких функций
./vmpacker -func "check_license,verify_token" -v -o protected.elf original.elf

Защита по диапазону адресов

root@kitploit:~
# Указать диапазон адресов
./vmpacker -addr "0x4006AC-0x400790:main" -v -o protected.elf original.elf

# Смешанный режим
./vmpacker -addr "0x4006AC-0x400790:main" -func verify -o protected.elf original.elf

Просмотр информации об ELF

root@kitploit:~
./vmpacker -info input.elf

Параметры CLI

Сборка

Компиляция заглушки интерпретатора ВМ

root@kitploit:~
# Стандартная сборка (GCC)
aarch64-linux-gnu-gcc -Os -nostdlib -fPIC -ffreestanding \
  -o stub.elf stub/vm_interp_clean.c \
  -T stub/vm_interp.lds
aarch64-linux-gnu-objcopy -O binary stub.elf vm_interp.bin

Компиляция инструмента CLI

root@kitploit:~
go build -o vmpacker ./cmd/vmpacker/

Сборка GUI

root@kitploit:~
cd vmpacker
make gui

Справочник по ISA ВМ

VMPacker определяет пользовательскую архитектуру набора команд (ISA) с случайно отображаемыми значениями опкодов для повышения сложности обратной разработки.

📖 Полную таблицу опкодов с деталями кодирования см. в китайской документации.

Категории инструкций

План развития

  • Полная интеграция GUI — Полная интеграция GUI ↔ бэкенд защиты
  • Гибридный режим — Частичное нативное выполнение + частичная защита ВМ
  • Динамическое отображение опкодов — Генерация уникального отображения ISA для каждого запуска защиты

Участие в разработке

Вклад приветствуется! Пожалуйста, следуйте этим рекомендациям:

  1. Форкните репозиторий
  2. Создайте ветку для функции: git checkout -b feature/new-arch
  3. Закоммитьте изменения: git commit -m 'feat: add x86_64 decoder'
  4. Отправьте ветку: git push origin feature/new-arch
  5. Создайте Pull Request

Соглашение о коммитах

Мы следуем Conventional Commits:

  • feat: Новая функция
  • fix: Исправление ошибки
  • refactor: Рефакторинг кода
  • docs: Документация
  • test: Тесты

Лицензия

Этот проект лицензирован под AGPL-3.0 License.

Почему AGPL-3.0:

  • ✅ Сильное копилефт — любые модификации или производные работы должны быть открытыми под той же лицензией
  • ✅ Положение о сетевом использовании — предоставление функциональности этого ПО в качестве сетевой услуги также требует раскрытия исходного кода
  • ✅ Защищает основные технологии — предотвращает закрытое коммерческое использование движка защиты
  • ✅ Дружелюбно к сообществу — бесплатно для изучения, исследований и улучшений; улучшения должны быть возвращены обратно
  • ✅ Коммерческое лицензирование — для закрытого коммерческого использования свяжитесь с автором для получения коммерческой лицензии

⚠️ Отказ от ответственности

ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА КАКИЕ-ЛИБО ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ИНУЮ ОТВЕТСТВЕННОСТЬ, ВОЗНИКШИЕ В РЕЗУЛЬТАТЕ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫМ ОБРАЗОМ, СВЯЗАННЫЕ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ЕГО ИСПОЛЬЗОВАНИЕМ.

Этот проект предназначен для обеспечения легитимной защиты интеллектуальной собственности разработчиков программного обеспечения, помогая защищать основные алгоритмы и критически важный код в коммерческом ПО от несанкционированной обратной разработки или кражи.

Предупреждение для пользователей:

  1. При использовании этого программного обеспечения вы должны соблюдать все применимые законы и нормативные акты вашей юрисдикции
  2. Строго запрещается использовать это ПО в любых незаконных целях, включая, но не ограничиваясь: разработкой вредоносного ПО, обходом проверок безопасности, нарушением прав интеллектуальной собственности других лиц или нарушением безопасности компьютерных систем
  3. Автор(ы) не несут ответственности за любые прямые или косвенные последствия, возникшие в результате использования этого ПО любым лицом
  4. Загружая, используя или распространяя это ПО, вы подтверждаете, что прочитали и согласны с вышеуказанными условиями

Автор

LeoChen — @LeoChen-CoreMind

Copyright © 2026 LeoChen. Все права защищены.

Скачать инструмент
УровеньТехникаОписание
Защита ВМПользовательская ISAСлучайное отображение опкодов — обратные инженеры не могут напрямую определить семантику инструкций
OpcodeCryptorШифрование опкода для каждой инструкцииenc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9))
Реверсирование байт-кодаОбратный порядок выполненияИнструкции хранятся в обратном порядке; интерпретатор обходит их в обратную сторону
Токеновый входТрамплин из 3 инструкцийИсходная функция заменяется токенизированным входом, скрывающим фактическое местоположение байт-кода
Косвенная диспетчеризацияТаблица переходов по указателям на функцииЗаполняется во время выполнения в стеке, нарушая перекрёстные ссылки IDA
Главный интерфейсАнализ функцийПараметры защиты
Список функцийАнализ и выборПараметры защиты
Выполнение защитыЗащита завершена
Логи в реальном времениЗащита завершена
ПараметрПо умолчаниюОписание
-func—Имя(ена) функции для защиты (через запятую)
-addr—Защита по адресу (0xSTART-0xEND[:name])
-oinput.vmpПуть к выходному файлу
-vfalseПодробный вывод (показать дизассемблирование)
-striptrueУдалить таблицу символов
-debugfalseСоздать файл отладки соответствия ARM64 → байт-код ВМ
-tokentrueТокенизированный режим входа
-infofalseТолько вывод информации об ELF
КатегорияКоличествоОписание
Перемещение данных3MOV_IMM64, MOV_IMM32, MOV_REG
Арифметика/Логика21ADD, SUB, MUL, XOR, AND, OR, SHL, SHR, ASR, NOT, ROR, UMULH + варианты _IMM
Доступ к памяти8LOAD/STORE 8/16/32/64
Ветвления/Переходы13JMP, JE, JNE, JL, JGE, JGT, JLE, JB, JAE, JBE, JA, TBZ, TBNZ
Сравнения6CMP, CMP_IMM, CCMP_REG, CCMP_IMM, CCMN_REG, CCMN_IMM
Стек2PUSH, POP
Системные/Специальные8NOP, HALT, RET, CALL_NATIVE, CALL_REG, BR_REG, SVC, MRS
SIMD2VLD16, VST16
Всего63