Skip to content

Latest commit

 

History

History
84 lines (60 loc) · 7.14 KB

dyncode-compiler-roadmap.md

File metadata and controls

84 lines (60 loc) · 7.14 KB

Языки: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية

← Компилятор dyncode

Дорожная карта

Этот документ отслеживает запланированные, текущие или намеренно отложенные функции.

Текущее состояние

Конвейер dyncode NeverC охватывает:

  • Полный конвейер LLVM IR с 11+ выделенными проходами
  • Экстракторы COFF / ELF / Mach-O
  • Разрешение импортов Win32 PEB-walk (хеш ROR-13, 6 бакетов DLL)
  • Прямое понижение системных вызовов (Darwin svc #0x80, Linux svc #0 / syscall)
  • Поддержка режима ядра (Windows, Linux)
  • Аудит запрещённых байтов с настраиваемыми профилями
  • SDK плагинов для перезаписчиков запрещённых байтов и кодировщиков наборов символов
  • Ограничения размера / выравнивания / заполнения (-fdyncode-max-length=, -fdyncode-align=, -fdyncode-pad=)
  • 11 хуков обфускации на уровнях IR, MIR и байтового потока

Завершено (2026-04)

  1. Ограничения размера / выравнивания / заполнения — Встроено. -fdyncode-max-length=, -fdyncode-align=, -fdyncode-pad= выполняются в конце finalizeDynCodeBytes. Драйвер отклоняет противоречивые конфигурации (например, байт заполнения в наборе запрещённых байтов или заполнение без align/max-length).

  2. Внедеревный C-плагин API — Чистый C ABI интерфейс плагинов (NevercPluginAPI.h) для пользовательских IR, MIR, Binary и Linker проходов. Плагины регистрируются в 11 точках подключения dyncode (NEVERC_INTERPOSE_SC_*). SDK с одним заголовком, ноль зависимостей LLVM/CRT. См. документацию API плагинов.

Запланировано — Слой плагинов (через хуки)

Эти возможности намеренно не встроены. Они принадлежат слою стратегий/обфускации и предназначены для предоставления сторонними плагинами через интерфейсы хуков и плагинов.

Функция Точка хука Примечания
Анти-дизассемблирование RunBeforePreEmit / RunAfterPreEmit / RunAfterFinalMIR Помехи префикса инструкций, перестановка переходов, вставка мусора
Полиморфизм RunAfterFinalMIR / RunPostExtract Вариация вывода на основе seed при каждой компиляции
Поэтапный кодировщик (XOR / RC4 / самодешифрующий) RunPostExtract / RunPostFinalize Генерация стаба при компиляции + шифрование полезной нагрузки
Непрямые системные вызовы (Halos / Tartarus / Recycled Gate) Плагин уровня IR или RunPostExtract Сканирование гаджетов ntdll во время выполнения
Маска сна / подмена стека вызовов Плагин прохода IR Паттерны Ekko / FOLIAGE / Cronos
Патчинг ETW / AMSI Плагин прохода IR Последовательности патчей во время выполнения
Module stomping / uninterposing Плагин прохода IR Паттерны манипуляции памятью

Обзор хуков плагинов

11 хуков в трёх слоях:

Слой IR (6 хуков, получают ModulePassManager &):

  • RunBeforePrep — Перед любым проходом dyncode
  • RunAfterPrep — После унификации линковки
  • RunBeforeInlining — Последний шанс перед AlwaysInliner
  • RunAfterInlining — IR полностью сведён в одну функцию
  • RunAfterStackify — Финальная форма IR перед кодогенерацией
  • RunAfterFinalIR — После AllBlrPass, абсолютно последний IR-хук

Слой MIR (3 хука, получают TargetPassConfig &):

  • RunBeforePreEmit — Регистры распределены, псевдоинструкции CFI/EH ещё присутствуют
  • RunAfterPreEmit — После очистки MIRPrepPass, ближайшее состояние к финальным байтам
  • RunAfterFinalMIR — После LLVM addPreEmitPass2(), прямо перед AsmPrinter

Слой байтового потока (2 хука, получают SmallVectorImpl<uint8_t> &):

  • RunPostExtract — Пре-финализация, ещё обрабатывается перезаписчиком/кодировщиком/аудитом/размером
  • RunPostFinalize — Пост-финализация, последний момент перед записью на диск; NeverC больше не выполняет аудит

Конвейер финализации

Каждый экстрактор вызывает finalizeDynCodeBytes перед записью .bin:

applyPostExtractObfuscationInterpose       (C Plugin API: NEVERC_INTERPOSE_SC_POST_EXTRACT)
        |
auditFinalBadBytes                    (встроенный жёсткий аудит)
        |
applyDynCodeSizing                  (-fdyncode-align/-max-length/-pad)
        |
applyPostFinalizeObfuscationInterpose      (C Plugin API: NEVERC_INTERPOSE_SC_POST_FINALIZE)

Использование и примеры кода см. в документации Plugin API.

Не запланировано

  • Кросс-языковой фронтенд — NeverC принимает только собственный C23-фронтенд. IR-конвейер отделён от фронтенда, но приём внешнего биткода (например, от rustc или zig) не является целью проекта.