Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 5.34 KB

File metadata and controls

76 lines (61 loc) · 5.34 KB

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

← Compilatore dyncode

Compilatore dyncode — Tracciamento progressi

Fase 0 — macOS arm64 MVP (consegnato)

  • Scheletro directory e CMake (libreria nevercDynCode)
  • ZeroRelocPass: due fasi (Prep + Stackify), impilamento automatico dei globali mutabili
  • Data2TextPass: due fasi (array costanti → store a blocchi sullo stack; splitting costanti vettoriali post-SROA; ConstantFP → pattern di bit caricati con volatile)
  • SyscallStubPass: whitelist guidata da tabella per Darwin BSD / Linux arm64 / Linux x86_64 / Android syscall
  • AllBlrPass: riscrittura aggressiva opzionale delle chiamate indirette
  • DynCodeExtractor: Mach-O .o.bin piatto con patching delle rilocazioni intra-sezione
  • Opzioni CLI via neverc/include/neverc/Invoke/Options.td.h generato: -fdyncode, -fdyncode-all-blr, -mdyncode-syscall, -fdyncode-keep-obj=, -fdyncode-entry=
  • PIC predefinito su tutte le piattaforme (isPICDefault() restituisce true universalmente)
  • Impilamento ricorsivo generico (tabelle di puntatori a funzione, tabelle di puntatori a stringa, tabelle di strutture annidate, inizializzatori ConstantExpr GEP/BitCast)
  • IndirectBrPass: GCC computed-goto (&&label) → switch, inclusa condivisione tabelle multi-sito di dispatch
  • Inlining costanti vettoriali SIMD (inlineVectorConstants)
  • Retrocessione automatica di _Thread_local a static
  • Loader nativo macOS arm64 (MAP_JIT + i-cache flush)

Test: 108/108 asserzioni dyncode superate. Dimensioni binarie: add 8B, fib 64B, hello 64B, big_const 632B.

Fase 1 — Linux / Android / Windows multipiattaforma (consegnato)

  • Astrazione TargetDesc: differenze di piattaforma guidate da tabella
  • Semantica -mdyncode-syscall multipiattaforma (sostituisce -mdyncode-libsystem solo Darwin)
  • Tabelle numeri di syscall Linux / Android (Darwin BSD 100+, Linux arm64 130+, Linux x86_64 150+)
  • DynCodeExtractor rifattorizzato in MachOExtractor / ELFExtractor / COFFExtractor
  • Estrattore ELF (arm64: R_AARCH64_CALL26/JUMP26/ADR_PREL_PG_HI21/etc.; x86_64: R_X86_64_PC32/PLT32)
  • Estrattore COFF (arm64: IMAGE_REL_ARM64_BRANCH26/etc.; x86_64: IMAGE_REL_AMD64_REL32/etc.)
  • Pass di importazione PEB Windows (WinPEBImportPass) con resolver PEB walk reale
  • Whitelist Win32 API multi-DLL (~210 API su kernel32/ntdll/user32/ws2_32/advapi32/shell32)
  • MemIntrinPass: memcpy/memset/memmove/memcmp/bcmp/bzero/memchr + strlen/strcpy/strcmp/etc. → helper di ciclo byte inline
  • CompilerRtPass: divisione/modulo __int128 → helper di divisione lunga inline
  • Supporto frontend Windows aarch64-pc-windows-msvc
  • MIRPrepPass: rimozione pseudo-istruzioni multipiattaforma (CFI/EH/XRay/StackMap/SEH/FENTRY/etc.)
  • Interpose di offuscamento MIR + livello byte (11 interpose su livelli IR/MIR/flusso byte)
  • Downgrade automatico AArch64 non-Darwin long double a binary64
  • Header shim dyncode: <windows.h>, <unistd.h>, <fcntl.h>, <sys/stat.h>, <sys/mman.h>, <string.h>, <stdlib.h>
  • Livello di compatibilità POSIX Windows (13 ponti POSIX→Win32: write→WriteFile, mmap→VirtualAlloc, etc.)
  • Correzione automatica dichiarazioni implicite K&R (50+ firme POSIX canoniche)
  • Purificazione guidata da tabella (codifica rigida rami architettura → zero)
  • KernelImportPass: riscrittura automatica dei callsite ring-0 con resolver
  • Diagnostica guidata da tabella nomi helper del kernel (KernelHelperNames.def)
  • <neverc/dyncode/kernel.h> per le convenzioni di punto d'ingresso ring-0
  • Imposizione offset zero del punto d'ingresso (placeEntryFirst)
  • Pipeline di finalizzazione: SDK rewriter byte proibiti + SDK encoder charset + vincoli dimensionali
  • API Plugin C fuori dall'albero (NevercPluginAPI.h): 11 interpose point dyncode (NEVERC_INTERPOSE_SC_*)
  • Iniezione -mno-implicit-float per x86_64 (previene spill del pool costanti SSE del backend)
  • Loader multipiattaforma (macOS/Linux/Windows)

Test: 743+ asserzioni dyncode, tutte superate su 8 triple. Suite NeverC completa: 1000+ test superati.

Fase 2 — Encoder stampabile / alfanumerico (pianificato)

  • Encoder dyncode stampabile ARM64 (sottoinsieme istruzioni 0x20–0x7e)
  • Encoder alfanumerico x86_64
  • Generazione stub auto-decodificante (decoder stub)
  • Statistiche dimensione / entropia post-codifica

Fase 3 — Polimorfismo / auto-modifica (pianificato)

  • Motore polimorfo: stesso sorgente → sequenze byte equivalenti diverse per compilazione
  • Codice auto-modificante: decrittazione / decompressione del corpo payload a runtime
  • Anti-rilevamento: evitare pattern di firma dyncode noti

Estensioni future

  • iOS arm64 (firma del codice + scenari jailbreak JIT)
  • Cortex-M / Thumb
  • RISC-V 64