Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 5.57 KB

File metadata and controls

76 lines (61 loc) · 5.57 KB

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

← Compilateur dyncode

Compilateur dyncode — Suivi de progression

Phase 0 — macOS arm64 MVP (livré)

  • Squelette répertoire & CMake (bibliothèque nevercDynCode)
  • ZeroRelocPass : deux phases (Prep + Stackify), empilage automatique des globaux mutables
  • Data2TextPass : deux phases (tableaux constants → stockage en pile par morceaux ; fractionnement de constantes vectorielles post-SROA ; ConstantFP → motifs de bits chargés avec volatile)
  • SyscallStubPass : liste blanche pilotée par table couvrant Darwin BSD / Linux arm64 / Linux x86_64 / Android syscalls
  • AllBlrPass : réécriture agressive optionnelle des appels indirects
  • DynCodeExtractor : Mach-O .o.bin plat avec correctifs de relocalisations intra-section
  • Options CLI via neverc/include/neverc/Invoke/Options.td.h généré : -fdyncode, -fdyncode-all-blr, -mdyncode-syscall, -fdyncode-keep-obj=, -fdyncode-entry=
  • PIC par défaut sur toutes les plateformes (isPICDefault() retourne true universellement)
  • Empilage récursif générique (tables de pointeurs de fonction, tables de pointeurs de chaîne, tables de structures imbriquées, initialiseurs ConstantExpr GEP/BitCast)
  • IndirectBrPass : GCC computed-goto (&&label) → switch, y compris partage de tables multi-sites de dispatch
  • Inlining de constantes vectorielles SIMD (inlineVectorConstants)
  • Rétrogradation automatique de _Thread_local en static
  • Chargeur natif macOS arm64 (MAP_JIT + i-cache flush)

Tests : 108/108 assertions dyncode réussies. Tailles binaires : add 8B, fib 64B, hello 64B, big_const 632B.

Phase 1 — Linux / Android / Windows multiplateforme (livré)

  • Abstraction TargetDesc : différences de plateforme pilotées par table
  • Sémantique -mdyncode-syscall multiplateforme (remplace -mdyncode-libsystem Darwin-only)
  • Tables de numéros de syscall Linux / Android (Darwin BSD 100+, Linux arm64 130+, Linux x86_64 150+)
  • DynCodeExtractor refactorisé en MachOExtractor / ELFExtractor / COFFExtractor
  • Extracteur ELF (arm64 : R_AARCH64_CALL26/JUMP26/ADR_PREL_PG_HI21/etc. ; x86_64 : R_X86_64_PC32/PLT32)
  • Extracteur COFF (arm64 : IMAGE_REL_ARM64_BRANCH26/etc. ; x86_64 : IMAGE_REL_AMD64_REL32/etc.)
  • Passe d'import PEB Windows (WinPEBImportPass) avec résolveur PEB walk réel
  • Liste blanche Win32 API multi-DLL (~210 API sur kernel32/ntdll/user32/ws2_32/advapi32/shell32)
  • MemIntrinPass : memcpy/memset/memmove/memcmp/bcmp/bzero/memchr + strlen/strcpy/strcmp/etc. → helpers de boucle d'octets inline
  • CompilerRtPass : division/modulo __int128 → helpers de division longue inline
  • Support frontend Windows aarch64-pc-windows-msvc
  • MIRPrepPass : suppression de pseudo-instructions multiplateforme (CFI/EH/XRay/StackMap/SEH/FENTRY/etc.)
  • Interposes d'obfuscation MIR + niveau octet (11 interposes sur les couches IR/MIR/flux d'octets)
  • Rétrogradation automatique AArch64 non-Darwin long double en binary64
  • En-têtes shim dyncode : <windows.h>, <unistd.h>, <fcntl.h>, <sys/stat.h>, <sys/mman.h>, <string.h>, <stdlib.h>
  • Couche de compatibilité POSIX Windows (13 ponts POSIX→Win32 : write→WriteFile, mmap→VirtualAlloc, etc.)
  • Correction automatique des déclarations implicites K&R (50+ signatures POSIX canoniques)
  • Purification pilotée par table (codage en dur des branches d'architecture → zéro)
  • KernelImportPass : réécriture automatique des sites d'appel ring-0 avec résolveur
  • Diagnostics pilotés par table de noms d'helpers du noyau (KernelHelperNames.def)
  • <neverc/dyncode/kernel.h> pour les conventions de point d'entrée ring-0
  • Forçage du décalage zéro du point d'entrée (placeEntryFirst)
  • Pipeline de finalisation : SDK de réécriture d'octets interdits + SDK d'encodeur de charset + contraintes de taille
  • API Plugin C hors arbre (NevercPluginAPI.h) : 11 points d'accroche dyncode (NEVERC_INTERPOSE_SC_*)
  • Injection -mno-implicit-float pour x86_64 (empêche le déversement du pool de constantes SSE du backend)
  • Chargeurs multiplateformes (macOS/Linux/Windows)

Tests : 743+ assertions dyncode, toutes réussies sur 8 triples. Suite NeverC complète : 1000+ tests réussis.

Phase 2 — Encodeur imprimable / alphanumérique (planifié)

  • Encodeur dyncode imprimable ARM64 (sous-ensemble d'instructions 0x20–0x7e)
  • Encodeur alphanumérique x86_64
  • Génération de stub auto-décodant (decoder stub)
  • Statistiques de taille / entropie post-encodage

Phase 3 — Polymorphisme / auto-modification (planifié)

  • Moteur polymorphe : même source → séquences d'octets équivalentes différentes par compilation
  • Code auto-modifiant : déchiffrement / décompression du corps de charge utile à l'exécution
  • Anti-détection : éviter les motifs de signature dyncode connus

Extensions futures

  • iOS arm64 (signature de code + scénarios jailbreak JIT)
  • Cortex-M / Thumb
  • RISC-V 64