Lingue: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
Questo documento traccia le funzionalità pianificate, in corso o differite per scelta di design.
La pipeline dyncode di NeverC copre:
- Pipeline LLVM IR completa con 11+ pass dedicati
- Estrattori COFF / ELF / Mach-O
- Risoluzione importazioni Win32 PEB-walk (hash ROR-13, 6 bucket DLL)
- Abbassamento diretto syscall (Darwin
svc #0x80, Linuxsvc #0/syscall) - Supporto modalità kernel (Windows, Linux)
- Audit dei byte proibiti con profili configurabili
- SDK plugin per riscrittori di byte proibiti e codificatori di set di caratteri
- Vincoli di dimensione / allineamento / padding (
-fdyncode-max-length=,-fdyncode-align=,-fdyncode-pad=) - 11 interpose di offuscamento sui livelli IR, MIR e flusso di byte
-
Vincoli di dimensione / allineamento / padding — Integrato.
-fdyncode-max-length=,-fdyncode-align=,-fdyncode-pad=vengono eseguiti alla fine difinalizeDynCodeBytes. Il driver rifiuta configurazioni contraddittorie (es. byte di padding nel set di byte proibiti, o padding senza align/max-length). -
API Plugin C fuori dall'albero — Interfaccia plugin C ABI pura (
NevercPluginAPI.h) per pass IR, MIR, Binary e Linker personalizzati. I plugin si registrano a 11 interpose point dyncode (NEVERC_INTERPOSE_SC_*). SDK a singolo header, zero dipendenze LLVM/CRT. Vedere documentazione API Plugin.
Queste capacità non sono intenzionalmente integrate. Appartengono al livello strategia/offuscamento e sono progettate per essere fornite da plugin di terze parti tramite le interfacce interpose e plugin.
| Funzionalità | Punto interpose | Note |
|---|---|---|
| Anti-disassemblaggio | RunBeforePreEmit / RunAfterPreEmit / RunAfterFinalMIR |
Interferenza prefisso istruzione, riordinamento salti, inserimento spazzatura |
| Polimorfismo | RunAfterFinalMIR / RunPostExtract |
Variazione dell'output basata su seed per compilazione |
| Codificatore a stadi (XOR / RC4 / auto-decifrante) | RunPostExtract / RunPostFinalize |
Generazione stub a compilazione + cifratura del payload |
| Syscall indiretti (Halos / Tartarus / Recycled Gate) | Plugin livello IR o RunPostExtract |
Scansione gadget ntdll a runtime |
| Sleep mask / spoofing dello stack di chiamata | Plugin pass IR | Pattern Ekko / FOLIAGE / Cronos |
| Patching ETW / AMSI | Plugin pass IR | Sequenze di patch a runtime |
| Module stomping / uninterposing | Plugin pass IR | Pattern di manipolazione della memoria |
11 interpose su tre livelli:
Livello IR (6 interpose, ricevono ModulePassManager &):
RunBeforePrep— Prima di qualsiasi pass dyncodeRunAfterPrep— Dopo l'unificazione del linkageRunBeforeInlining— Ultima opportunità prima di AlwaysInlinerRunAfterInlining— IR completamente appiattito in una funzioneRunAfterStackify— Forma IR finale prima del codegenRunAfterFinalIR— DopoAllBlrPass, l'ultimo interpose IR in assoluto
Livello MIR (3 interpose, ricevono TargetPassConfig &):
RunBeforePreEmit— Registri allocati, pseudo CFI/EH ancora presentiRunAfterPreEmit— Dopo la pulizia diMIRPrepPass, più vicino ai byte finaliRunAfterFinalMIR— Dopo LLVMaddPreEmitPass2(), appena prima di AsmPrinter
Livello flusso di byte (2 interpose, ricevono SmallVectorImpl<uint8_t> &):
RunPostExtract— Pre-finalizzazione, ancora elaborato da riscrittore/codificatore/audit/dimensionamentoRunPostFinalize— Post-finalizzazione, ultimo momento prima della scrittura su disco; NeverC non esegue ulteriori audit
Ogni estrattore chiama finalizeDynCodeBytes prima di scrivere il .bin:
applyPostExtractObfuscationInterpose (C Plugin API: NEVERC_INTERPOSE_SC_POST_EXTRACT)
|
auditFinalBadBytes (audit rigido integrato)
|
applyDynCodeSizing (-fdyncode-align/-max-length/-pad)
|
applyPostFinalizeObfuscationInterpose (C Plugin API: NEVERC_INTERPOSE_SC_POST_FINALIZE)
Utilizzo ed esempi di codice nella documentazione Plugin API.
- Frontend multi-linguaggio — NeverC accetta solo il proprio frontend C23. La pipeline IR è disaccoppiata dal frontend, ma l'accettazione di bitcode esterno (es. da
rustcozig) non è un obiettivo del progetto.