언어: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
이 문서는 계획 중이거나, 진행 중이거나, 의도적으로 보류된 기능을 추적합니다.
NeverC의 dyncode 파이프라인은 다음을 포함합니다:
- 11개 이상의 전용 패스가 있는 완전한 LLVM IR 파이프라인
- COFF / ELF / Mach-O 추출기
- Win32 PEB-walk 임포트 해결 (ROR-13 해시, 6개 DLL 버킷)
- 직접 syscall 하강 (Darwin
svc #0x80, Linuxsvc #0/syscall) - 커널 모드 지원 (Windows, Linux)
- 구성 가능한 프로파일을 사용한 배드바이트 감사
- 배드바이트 리라이터 및 문자 집합 인코더용 플러그인 SDK
- 크기 / 정렬 / 패딩 제약 (
-fdyncode-max-length=,-fdyncode-align=,-fdyncode-pad=) - IR, MIR, 바이트스트림 3계층에 걸쳐 11개 난독화 훅
-
크기 / 정렬 / 패딩 제약 — 내장 기능.
-fdyncode-max-length=,-fdyncode-align=,-fdyncode-pad=는finalizeDynCodeBytes끝에서 실행. 드라이버는 모순된 구성을 거부 (예: 패드 바이트가 배드바이트 세트에 있거나, align/max-length 없이 pad 사용). -
아웃오브트리 C 플러그인 API — 순수 C ABI 플러그인 인터페이스(
NevercPluginAPI.h). IR, MIR, Binary, Linker 커스텀 패스를 11개 dyncode 훅 포인트(NEVERC_INTERPOSE_SC_*)에 등록 가능. 단일 헤더 SDK, LLVM/CRT 의존성 제로. 자세한 내용은 Plugin API 문서 참조.
다음 기능은 의도적으로 내장하지 않습니다. 전략/난독화 레이어에 속하며, 훅 및 플러그인 인터페이스를 통해 서드파티 플러그인이 제공하도록 설계되었습니다.
| 기능 | 훅 위치 | 비고 |
|---|---|---|
| 안티 디스어셈블리 | RunBeforePreEmit / RunAfterPreEmit / RunAfterFinalMIR |
명령어 접두사 간섭, 점프 재배열, 정크 바이트 삽입 |
| 다형성 | RunAfterFinalMIR / RunPostExtract |
시드 기반 컴파일별 출력 변화 |
| 단계별 인코더 (XOR / RC4 / 자체 복호화) | RunPostExtract / RunPostFinalize |
컴파일 타임 스텁 생성 + 페이로드 암호화 |
| 간접 syscall (Halos / Tartarus / Recycled Gate) | IR 수준 플러그인 또는 RunPostExtract |
런타임 ntdll 가젯 스캔 |
| 수면 마스크 / 콜 스택 스푸핑 | IR 패스 플러그인 | Ekko / FOLIAGE / Cronos 패턴 |
| ETW / AMSI 패치 | IR 패스 플러그인 | 런타임 패치 시퀀스 |
| 모듈 스톰핑 / 언후킹 | IR 패스 플러그인 | 메모리 조작 패턴 |
3계층 총 11개 훅:
IR 레이어 (6개 훅, ModulePassManager & 수신):
RunBeforePrep— 모든 dyncode 패스 이전RunAfterPrep— 링키지 통합 이후RunBeforeInlining— AlwaysInliner 이전 마지막 기회RunAfterInlining— IR이 하나의 함수로 완전히 평탄화RunAfterStackify— 코드 생성 전 최종 IR 형태RunAfterFinalIR—AllBlrPass이후, 절대적으로 마지막 IR 훅
MIR 레이어 (3개 훅, TargetPassConfig & 수신):
RunBeforePreEmit— 레지스터 할당 완료, CFI/EH 의사 명령어 존재RunAfterPreEmit—MIRPrepPass정리 후, 최종 바이트에 가장 가까움RunAfterFinalMIR— LLVMaddPreEmitPass2()이후, AsmPrinter 직전
바이트스트림 레이어 (2개 훅, SmallVectorImpl<uint8_t> & 수신):
RunPostExtract— 프리 파이널라이즈, 리라이터/인코더/감사/사이징이 처리RunPostFinalize— 포스트 파이널라이즈, 디스크 기록 직전; NeverC는 이후 감사를 수행하지 않음
각 추출기는 .bin 기록 전에 finalizeDynCodeBytes를 호출:
applyPostExtractObfuscationInterpose (C Plugin API: NEVERC_INTERPOSE_SC_POST_EXTRACT)
|
auditFinalBadBytes (내장 하드 감사)
|
applyDynCodeSizing (-fdyncode-align/-max-length/-pad)
|
applyPostFinalizeObfuscationInterpose (C Plugin API: NEVERC_INTERPOSE_SC_POST_FINALIZE)
사용법 및 코드 예제는 Plugin API 문서 참조.
- 크로스 언어 프런트엔드 — NeverC는 자체 C23 프런트엔드만 수용. IR 파이프라인은 프런트엔드와 분리되어 있지만, 외부 비트코드 (예:
rustc또는zig에서) 수용은 프로젝트 목표가 아님.