Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 5.61 KB

File metadata and controls

76 lines (61 loc) · 5.61 KB

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

← Compilador de dyncode

Compilador de dyncode — Seguimiento de progreso

Etapa 0 — macOS arm64 MVP (entregado)

  • Esqueleto de directorio y CMake (biblioteca nevercDynCode)
  • ZeroRelocPass: dos fases (Prep + Stackify), apilamiento automático de globales mutables
  • Data2TextPass: dos fases (arrays constantes → almacenamiento en pila por fragmentos; división de constantes vectoriales post-SROA; ConstantFP → patrones de bits cargados con volatile)
  • SyscallStubPass: whitelist basada en tabla para Darwin BSD / Linux arm64 / Linux x86_64 / Android syscalls
  • AllBlrPass: reescritura agresiva opcional de llamadas indirectas
  • DynCodeExtractor: Mach-O .o.bin plano con parcheo de reubicaciones intra-sección
  • Opciones CLI via neverc/include/neverc/Invoke/Options.td.h generado: -fdyncode, -fdyncode-all-blr, -mdyncode-syscall, -fdyncode-keep-obj=, -fdyncode-entry=
  • PIC por defecto en todas las plataformas (isPICDefault() retorna true universalmente)
  • Apilamiento recursivo genérico (tablas de punteros a función, tablas de punteros a cadena, tablas de estructuras anidadas, inicializadores ConstantExpr GEP/BitCast)
  • IndirectBrPass: GCC computed-goto (&&label) → switch, incluyendo compartición de tablas de múltiples sitios de despacho
  • Inlining de constantes vectoriales SIMD (inlineVectorConstants)
  • Degradación automática de _Thread_local a static
  • Cargador nativo macOS arm64 (MAP_JIT + i-cache flush)

Tests: 108/108 aserciones de dyncode pasadas. Tamaños binarios: add 8B, fib 64B, hello 64B, big_const 632B.

Etapa 1 — Linux / Android / Windows multiplataforma (entregado)

  • Abstracción TargetDesc: diferencias de plataforma basadas en tabla
  • Semántica -mdyncode-syscall multiplataforma (reemplaza -mdyncode-libsystem exclusivo de Darwin)
  • Tablas de números de syscall Linux / Android (Darwin BSD 100+, Linux arm64 130+, Linux x86_64 150+)
  • DynCodeExtractor refactorizado en MachOExtractor / ELFExtractor / COFFExtractor
  • Extractor ELF (arm64: R_AARCH64_CALL26/JUMP26/ADR_PREL_PG_HI21/etc.; x86_64: R_X86_64_PC32/PLT32)
  • Extractor COFF (arm64: IMAGE_REL_ARM64_BRANCH26/etc.; x86_64: IMAGE_REL_AMD64_REL32/etc.)
  • Paso de importación PEB de Windows (WinPEBImportPass) con resolver PEB walk real
  • Whitelist Win32 API multi-DLL (~210 APIs en kernel32/ntdll/user32/ws2_32/advapi32/shell32)
  • MemIntrinPass: memcpy/memset/memmove/memcmp/bcmp/bzero/memchr + strlen/strcpy/strcmp/etc. → helpers de bucle de bytes inline
  • CompilerRtPass: división/módulo __int128 → helpers de división larga inline
  • Soporte frontend Windows aarch64-pc-windows-msvc
  • MIRPrepPass: eliminación de pseudo-instrucciones multiplataforma (CFI/EH/XRay/StackMap/SEH/FENTRY/etc.)
  • Interposes de ofuscación MIR + nivel de byte (11 interposes en capas IR/MIR/flujo de bytes)
  • Degradación automática de AArch64 no-Darwin long double a binary64
  • Cabeceras shim de dyncode: <windows.h>, <unistd.h>, <fcntl.h>, <sys/stat.h>, <sys/mman.h>, <string.h>, <stdlib.h>
  • Capa de compatibilidad POSIX de Windows (13 puentes POSIX→Win32: write→WriteFile, mmap→VirtualAlloc, etc.)
  • Corrección automática de declaración implícita K&R (50+ firmas POSIX canónicas)
  • Purificación basada en tabla (codificación rígida de ramas de arquitectura → cero)
  • KernelImportPass: reescritura automática de sitios de llamada respaldada por resolver ring-0
  • Diagnósticos basados en tabla de nombres de helpers del kernel (KernelHelperNames.def)
  • <neverc/dyncode/kernel.h> para convenciones de punto de entrada ring-0
  • Imposición de offset cero del punto de entrada (placeEntryFirst)
  • Pipeline de finalización: SDK de reescritor de bytes prohibidos + SDK de codificador de charset + restricciones de tamaño
  • API de Plugins C fuera del árbol (NevercPluginAPI.h): 11 puntos de enganche dyncode (NEVERC_INTERPOSE_SC_*)
  • Inyección de -mno-implicit-float para x86_64 (previene desbordamiento de pool de constantes SSE del backend)
  • Cargadores multiplataforma (macOS/Linux/Windows)

Tests: 743+ aserciones de dyncode, todas pasadas en 8 triples. Suite NeverC completa: 1000+ tests pasados.

Etapa 2 — Codificador imprimible / alfanumérico (planificado)

  • Codificador de dyncode imprimible ARM64 (subconjunto de instrucciones 0x20–0x7e)
  • Codificador alfanumérico x86_64
  • Generación de stub autodescodificante (decoder stub)
  • Estadísticas de tamaño / entropía post-codificación

Etapa 3 — Polimorfismo / automodificación (planificado)

  • Motor polimórfico: mismo código fuente → secuencias de bytes equivalentes diferentes por compilación
  • Código automodificante: descifrado / descompresión del cuerpo del payload en tiempo de ejecución
  • Anti-detección: evitar patrones de firma de dyncode conocidos

Extensiones futuras

  • iOS arm64 (firma de código + escenarios de jailbreak JIT)
  • Cortex-M / Thumb
  • RISC-V 64