Языки: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
Этот документ отслеживает запланированные, текущие или намеренно отложенные функции.
Конвейер dyncode NeverC охватывает:
- Полный конвейер LLVM IR с 11+ выделенными проходами
- Экстракторы COFF / ELF / Mach-O
- Разрешение импортов Win32 PEB-walk (хеш ROR-13, 6 бакетов DLL)
- Прямое понижение системных вызовов (Darwin
svc #0x80, Linuxsvc #0/syscall) - Поддержка режима ядра (Windows, Linux)
- Аудит запрещённых байтов с настраиваемыми профилями
- SDK плагинов для перезаписчиков запрещённых байтов и кодировщиков наборов символов
- Ограничения размера / выравнивания / заполнения (
-fdyncode-max-length=,-fdyncode-align=,-fdyncode-pad=) - 11 хуков обфускации на уровнях IR, MIR и байтового потока
-
Ограничения размера / выравнивания / заполнения — Встроено.
-fdyncode-max-length=,-fdyncode-align=,-fdyncode-pad=выполняются в концеfinalizeDynCodeBytes. Драйвер отклоняет противоречивые конфигурации (например, байт заполнения в наборе запрещённых байтов или заполнение без align/max-length). -
Внедеревный 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— Перед любым проходом dyncodeRunAfterPrep— После унификации линковкиRunBeforeInlining— Последний шанс перед AlwaysInlinerRunAfterInlining— IR полностью сведён в одну функциюRunAfterStackify— Финальная форма IR перед кодогенерациейRunAfterFinalIR— ПослеAllBlrPass, абсолютно последний IR-хук
Слой MIR (3 хука, получают TargetPassConfig &):
RunBeforePreEmit— Регистры распределены, псевдоинструкции CFI/EH ещё присутствуютRunAfterPreEmit— После очисткиMIRPrepPass, ближайшее состояние к финальным байтамRunAfterFinalMIR— После LLVMaddPreEmitPass2(), прямо перед 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) не является целью проекта.