Sprachen: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
Dieses Dokument verfolgt geplante, laufende oder absichtlich zurückgestellte Funktionen.
Die DynCode-Pipeline von NeverC umfasst:
- Vollständige LLVM-IR-Pipeline mit 11+ dedizierten Passes
- COFF- / ELF- / Mach-O-Extraktoren
- Win32-PEB-Walk-Import-Auflösung (ROR-13-Hash, 6 DLL-Buckets)
- Direkte Syscall-Absenkung (Darwin
svc #0x80, Linuxsvc #0/syscall) - Kernel-Modus-Unterstützung (Windows, Linux)
- Bad-Byte-Audit mit konfigurierbaren Profilen
- Plugin-SDK für Bad-Byte-Rewriter und Zeichensatz-Encoder
- Größen- / Ausrichtungs- / Padding-Beschränkungen (
-fdyncode-max-length=,-fdyncode-align=,-fdyncode-pad=) - 11 Obfuskations-Interposes über IR-, MIR- und Byte-Stream-Schichten
-
Größen- / Ausrichtungs- / Padding-Beschränkungen — Eingebaut.
-fdyncode-max-length=,-fdyncode-align=,-fdyncode-pad=werden am Ende vonfinalizeDynCodeBytesausgeführt. Der Treiber lehnt widersprüchliche Konfigurationen ab (z.B. Padding-Byte im Bad-Byte-Set oder Padding ohne align/max-length). -
Out-of-Tree C Plugin-API — Reine C-ABI-Plugin-Schnittstelle (
NevercPluginAPI.h) für benutzerdefinierte IR-, MIR-, Binary- und Linker-Passes. Plugins registrieren sich an 11 DynCode-Interpose-Punkten (NEVERC_INTERPOSE_SC_*). Single-Header-SDK, null LLVM/CRT-Abhängigkeiten. Siehe Plugin-API-Dokumentation.
Diese Fähigkeiten sind absichtlich nicht eingebaut. Sie gehören zur Strategie-/Obfuskationsschicht und sind so konzipiert, dass sie von Drittanbieter-Plugins über Interpose- und Plugin-Schnittstellen bereitgestellt werden.
| Funktion | Interpose-Punkt | Hinweise |
|---|---|---|
| Anti-Disassembly | RunBeforePreEmit / RunAfterPreEmit / RunAfterFinalMIR |
Instruktionspräfix-Störung, Sprung-Umordnung, Junk-Einfügung |
| Polymorphismus | RunAfterFinalMIR / RunPostExtract |
Seed-basierte Ausgabevariation pro Kompilierung |
| Stufen-Encoder (XOR / RC4 / selbstentschlüsselnd) | RunPostExtract / RunPostFinalize |
Kompilierzeit-Stub-Erzeugung + Payload-Verschlüsselung |
| Indirekte Syscalls (Halos / Tartarus / Recycled Gate) | IR-Level-Plugin oder RunPostExtract |
Runtime-ntdll-Gadget-Scanning |
| Sleep-Maske / Callstack-Spoofing | IR-Pass-Plugin | Ekko- / FOLIAGE- / Cronos-Muster |
| ETW- / AMSI-Patching | IR-Pass-Plugin | Runtime-Patch-Sequenzen |
| Modul-Stomping / Uninterposing | IR-Pass-Plugin | Speichermanipulationsmuster |
11 Interposes in drei Schichten:
IR-Schicht (6 Interposes, empfangen ModulePassManager &):
RunBeforePrep— Vor jedem DynCode-PassRunAfterPrep— Nach Linkage-VereinheitlichungRunBeforeInlining— Letzte Chance vor AlwaysInlinerRunAfterInlining— IR vollständig in eine Funktion geflachtRunAfterStackify— Endgültige IR-Form vor CodegenRunAfterFinalIR— NachAllBlrPass, der absolut letzte IR-Interpose
MIR-Schicht (3 Interposes, empfangen TargetPassConfig &):
RunBeforePreEmit— Register zugewiesen, CFI/EH-Pseudos noch vorhandenRunAfterPreEmit— NachMIRPrepPass-Bereinigung, nächster Zustand zu finalen BytesRunAfterFinalMIR— Nach LLVMaddPreEmitPass2(), direkt vor AsmPrinter
Byte-Stream-Schicht (2 Interposes, empfangen SmallVectorImpl<uint8_t> &):
RunPostExtract— Vor Finalize, wird noch von Rewriter/Encoder/Audit/Sizing verarbeitetRunPostFinalize— Nach Finalize, letzter Moment vor dem Schreiben auf die Festplatte; NeverC führt keine weitere Prüfung durch
Jeder Extraktor ruft finalizeDynCodeBytes auf, bevor die .bin geschrieben wird:
applyPostExtractObfuscationInterpose (C Plugin API: NEVERC_INTERPOSE_SC_POST_EXTRACT)
|
auditFinalBadBytes (eingebautes hartes Audit)
|
applyDynCodeSizing (-fdyncode-align/-max-length/-pad)
|
applyPostFinalizeObfuscationInterpose (C Plugin API: NEVERC_INTERPOSE_SC_POST_FINALIZE)
Verwendung und Codebeispiele siehe Plugin API Dokumentation.
- Cross-Language-Frontend — NeverC akzeptiert nur sein eigenes C23-Frontend. Die IR-Pipeline ist vom Frontend entkoppelt, aber die Annahme von externem Bitcode (z.B. von
rustcoderzig) ist kein Projektziel.