Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 5.21 KB

File metadata and controls

76 lines (61 loc) · 5.21 KB

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

← DynCode 컴파일러

DynCode 컴파일러 — 진행 상황 추적

단계 0 — macOS arm64 MVP (완료)

  • 디렉터리 및 CMake 스켈레톤 (nevercDynCode 라이브러리)
  • ZeroRelocPass: 2단계 (Prep + Stackify), 가변 전역 변수 자동 스택화
  • Data2TextPass: 2단계 (상수 배열 → 스택 청크 스토어; SROA 후 벡터 상수 분할; ConstantFP → volatile 로드 비트 패턴)
  • SyscallStubPass: 테이블 기반 화이트리스트, Darwin BSD / Linux arm64 / Linux x86_64 / Android syscall 지원
  • AllBlrPass: 선택적 적극적 간접 호출 재작성
  • DynCodeExtractor: Mach-O .o → 플랫 .bin, 섹션 내 재배치 패치 포함
  • CLI 옵션 (생성된 neverc/include/neverc/Invoke/Options.td.h 경유): -fdyncode, -fdyncode-all-blr, -mdyncode-syscall, -fdyncode-keep-obj=, -fdyncode-entry=
  • 전 플랫폼 기본 PIC (isPICDefault()가 일괄 true 반환)
  • 범용 재귀 스택화 (함수 포인터 테이블, 문자열 포인터 테이블, 중첩 구조체 테이블, ConstantExpr GEP/BitCast 초기화자)
  • IndirectBrPass: GCC computed-goto (&&label) → switch, 다중 디스패치 사이트 테이블 공유 포함
  • SIMD 벡터 상수 인라인 (inlineVectorConstants)
  • _Thread_local 자동 static 강등
  • 네이티브 macOS arm64 로더 (MAP_JIT + i-cache flush)

테스트: 108/108 dyncode 어설션 통과. 바이너리 크기: add 8B, fib 64B, hello 64B, big_const 632B.

단계 1 — Linux / Android / Windows 크로스 플랫폼 (완료)

  • TargetDesc 추상화: 테이블 기반 플랫폼 차이
  • 크로스 플랫폼 -mdyncode-syscall 시맨틱 (Darwin 전용 -mdyncode-libsystem 대체)
  • Linux / Android syscall 번호 테이블 (Darwin BSD 100+, Linux arm64 130+, Linux x86_64 150+)
  • DynCodeExtractorMachOExtractor / ELFExtractor / COFFExtractor로 리팩터링
  • ELF 추출기 (arm64: R_AARCH64_CALL26/JUMP26/ADR_PREL_PG_HI21/등; x86_64: R_X86_64_PC32/PLT32)
  • COFF 추출기 (arm64: IMAGE_REL_ARM64_BRANCH26/등; x86_64: IMAGE_REL_AMD64_REL32/등)
  • Windows PEB 임포트 패스 (WinPEBImportPass), 실제 PEB walk 리졸버 포함
  • 멀티 DLL Win32 API 화이트리스트 (kernel32/ntdll/user32/ws2_32/advapi32/shell32에 걸쳐 ~210 API)
  • MemIntrinPass: memcpy/memset/memmove/memcmp/bcmp/bzero/memchr + strlen/strcpy/strcmp/등 → 인라인 바이트 루프 헬퍼
  • CompilerRtPass: __int128 나눗셈/나머지 → 인라인 장나눗셈 헬퍼
  • Windows aarch64-pc-windows-msvc 프런트엔드 지원
  • MIRPrepPass: 크로스 플랫폼 의사 명령어 제거 (CFI/EH/XRay/StackMap/SEH/FENTRY/등)
  • MIR + 바이트 수준 난독화 훅 (IR/MIR/바이트스트림 3계층 총 11개 훅)
  • AArch64 비 Darwin long double binary64 자동 다운그레이드
  • DynCode 심 헤더: <windows.h>, <unistd.h>, <fcntl.h>, <sys/stat.h>, <sys/mman.h>, <string.h>, <stdlib.h>
  • Windows POSIX 호환 레이어 (13개 POSIX→Win32 브리지: write→WriteFile, mmap→VirtualAlloc 등)
  • K&R 암시적 선언 자동 수정 (50+ 표준 POSIX 시그니처)
  • 테이블 기반 정제 (아키텍처 분기 하드코딩 → 제로)
  • KernelImportPass: ring-0 자동 리졸버 기반 호출 사이트 재작성
  • 커널 헬퍼 이름 테이블 기반 진단 (KernelHelperNames.def)
  • <neverc/dyncode/kernel.h>: ring-0 진입점 규약용
  • 진입점 오프셋 0 강제 (placeEntryFirst)
  • 파이널라이즈 파이프라인: 배드바이트 리라이터 SDK + 문자 집합 인코더 SDK + 크기 제약
  • 아웃오브트리 C 플러그인 API (NevercPluginAPI.h): 11개 dyncode 훅 포인트 (NEVERC_INTERPOSE_SC_*)
  • x86_64 -mno-implicit-float 주입 (백엔드 SSE 상수 풀 스필 방지)
  • 크로스 플랫폼 로더 (macOS/Linux/Windows)

테스트: 743+ dyncode 어설션, 8개 트리플 모두 통과. NeverC 전체 테스트 스위트: 1000+ 테스트 통과.

단계 2 — 인쇄 가능 / 영숫자 인코더 (예정)

  • ARM64 인쇄 가능 dyncode 인코더 (0x20–0x7e 명령어 서브셋)
  • x86_64 영숫자 인코더
  • 자체 디코딩 스텁 (decoder stub) 생성
  • 인코딩 후 크기 / 엔트로피 통계

단계 3 — 다형성 / 자기 수정 (예정)

  • 다형성 엔진: 동일 소스 → 컴파일마다 다른 동등 바이트 시퀀스
  • 자기 수정 코드: 런타임 페이로드 본문 복호화 / 압축 해제
  • 탐지 회피: 알려진 dyncode 시그니처 패턴 회피

향후 확장

  • iOS arm64 (코드 서명 + JIT 탈옥 시나리오)
  • Cortex-M / Thumb
  • RISC-V 64