
macOS arm64(Apple Silicon)용 하드웨어 바인딩 256슬롯 다형성 VM, 비선형 MBA 및 Apple Secure Enclave 바이너리 보호기 — 공개 CrackMe 및 SDK 문서
scLock (Supercluster Lock)하드웨어 바인딩 256-슬롯 다형성 VM, 비선형 MBA ($\mathbb{Z}_{2^{64}}$) 및 macOS용 Apple Secure Enclave 바이너리 보호기 (arm64 Apple Silicon)
개발: relay (relay // SYSTEMS)
Gumroad에서 상용 SDK 받기 ($79) · 공개 CrackMe 챌린지 도전하기 · 라이브 랜딩 페이지 · 한국어 안내 (Korean)
scLock을 사용하는 이유C, C++, Rust, Swift 또는 Objective-C로 컴파일된 표준 macOS Mach-O (arm64) 바이너리는 Ghidra, IDA Pro, Binary Ninja에서 몇 초 만에 깔끔한 제어 흐름 그래프와 평문 상수를 노출합니다. 기존 소프트웨어 난독화 도구는 단일 정적 키나 중앙 집중식 switch(opcode) 디스패처에 의존하기 때문에, 키 하나만 복구하면 전체 바이트코드 스트림이 그대로 드러납니다.
scLock (Supercluster Lock) 은 컴파일 타임 256-슬롯 다형성 가상화, 핸들러별 MBA 키 분쇄(shattering), 그리고 이중 계층 Apple Silicon Secure Enclave (SEP) 바인딩을 결합합니다:
sclock compile)은 64비트 다형성 시드로부터 완전히 새로운 256개 항목의 명령어 집합(172개의 활성 마이크로 연산 + 84개의 상태 손상 채프 핸들러)을 합성합니다. 두 빌드가 동일한 바이트코드 인코딩이나 핸들러 테이블을 공유하는 일은 결코 없습니다.black_box + vm.anchor) MBA 솔트 분쇄: 분석가가 Portable 모드에서 외부 스펀지 키 (k0, k1)를 계산하더라도, 바이트코드 패킷은 정적 테이블이나 즉시 상수로부터 복호화될 수 없습니다. 원시 핸들러 솔트(op_secret_salt)는 정적 데이터 섹션에서 생략되며(단방향 Davies-Meyer ANCHOR_SHARDS로 대체됨) 코드 무결성 앵커에 대해 사전 마스킹됩니다. 256개의 컴파일된 ARM64 핸들러(__sc_lut_op_000..255) 각각 내부에서 h_salt와 피연산자 마스크(hm1, hm2, hm3)는 std::hint::black_box로 보호된 아핀 파라미터를 비선형 MBA 다항식을 통해 라이브 vm.anchor([x0, #0xa0])와 결합하여 런타임에 재구성됩니다—이는 LLVM(-C opt-level=3)의 상수 폴딩과 InstCombine 단순화를 무력화합니다.SEP) 아키텍처:
SCP1): 범용 최종 사용자 macOS 배포 및 공개 CrackMe를 위해 빌드되어 바이너리가 **모든 Apple Silicon Mac(M1 / M2 / M3 / M4)**에서 오프라인으로 실행됩니다. 1,024라운드 SHA-256 코드 앵커 화이트박스 KDF와 라이브 SEP 교환 P-256 이중 ECDH 안티 에뮬레이션 / 안티 후킹 게이트($d_{\text{SEP}} \cdot Q_P \stackrel{?}{=} d_P \cdot Q_{\text{SEP}}$가 Secure Enclave에서 실행되어 비-SEP 에뮬레이터나 API 후킹 하에서 실행을 오염시킴)를 통해 외부 스펀지 키 (k0, k1)를 도출합니다. 모든 Mac에서의 오프라인 실행에는 결정론적 키 도출이 필요하므로, SCP1의 정적 추출 방어는 핸들러별 런타임 얽힘(vm.anchor + black_box) MBA 솔트 분쇄와 256개 핸들러 전반에 걸친 상태 의존적 스펀지 체이닝으로 제공됩니다.--sep-lock / --host-sep-lock): P-256 개인 키를 대상 Mac의 물리적 Secure Enclave UID(kSecAttrTokenIDSecureEnclave 하드웨어 래핑된 rk1/dacl 블롭) 내부에 직접 봉인합니다. Mach-O 바이너리 어디에도 봉인 해제 가능한 키 자료가 존재하지 않습니다—대상 Mac의 Secure Enclave 실리콘 없이는 오프라인 키 도출이 물리적으로 불가능합니다.if (is_debugged) exit() 분기 대신, scLock은 커널 sysctl P_TRACED 비트와 ARM64 프롤로그 BRK(0xD4200000) 스캔을 256비트 스펀지 상태 누산기에 직접 혼합하며, 심볼 및 툴체인 경로 자동 스크러빙(sclock protect-app)을 수행합니다.저희 말만 믿지 마시고, 지금 바로 여러분의 디스어셈블러와 디버거에서 scLock을 테스트해 보세요.
이 저장소에는 scLock으로 보호된 독립 실행형 Mach-O arm64 바이너리가 포함되어 있습니다(v1.0.0, Portable SCP1 모드로 컴파일되어 모든 Apple Silicon Mac에서 실행됨):
crackme/challenge_protected (또는 scLock-CrackMe-Challenge-macOS-arm64.zip 다운로드)Mach-O 64-bit executable arm64 (Apple Silicon M1 / M2 / M3 / M4)# 1. Clone this repository (or unzip the release archive)
git clone https://github.com/planners1490/sclock.git
cd sclock/crackme
# 2. Clear macOS Gatekeeper quarantine (if downloaded via browser) & make executable
xattr -cr ./challenge_protected
chmod +x ./challenge_protected
# 3. Inspect symbol table & strings (Zero VM/Obfuscator leaks)
nm -gU ./challenge_protected
strings ./challenge_protected | grep -iE "sclock|vm|opcode|mba|chaff" || echo "0 leaks found"
# 4. Execute the protected binary on any Apple Silicon Mac
./challenge_protected # Runs built-in self-test (seats=20, pin=1234 -> 83300)
./challenge_protected 20 1234 # Pass custom <seats> <unlock_pin>
Ghidra, IDA Pro, Binary Ninja 또는 LLDB에서 crackme/challenge_protected를 열고 다음을 시도하십시오:
>330s)을 트리거하지 않고 256개의 핸들러별 MBA 솔트(h_salt)를 모두 복구하고 가상화된 가격 책정/검증 루틴을 디컴파일합니다.lldb를 연결하고 P_TRACED와 얽힌 스펀지 상태를 손상시키지 않으면서 가상화된 디스패치 루프를 단계별로 실행합니다.arg2 != 1234)과 가상화된 루틴 내부의 정확한 64비트 대수적 혼합 상수를 찾습니다.흥미로운 분석이나 해설을 찾으셨나요? 이슈 #1 (공식 CrackMe 챌린지 스레드)에 게시해 주세요!
Apple Silicon(macOS arm64, Release 프로파일)에서 테스트:
| 분석 벡터 | 보호되지 않은 바이너리 (clang -O3) | scLock v1.0.0 보호 바이너리 |
|---|---|---|
Ghidra 11.x 디컴파일러 (DecompileCallback) | 0.4초 (전체 C 소스 복구됨) | > 330초 타임아웃 (디컴파일러 프로세스 종료됨) |
| IDA Pro / Binary Ninja CFG 복구 | 깔끔한 제어 흐름 그래프 | 256방향 간접 디스패치 벽 + 84개의 Chaff 트랩 |
| 키 및 솔트 아키텍처 | __TEXT,__const에 상수가 노출됨 | 핸들러별 black_box MBA 솔트 분쇄 + 휴대용 SCP1 / 노드 잠금 --sep-lock |
동적 디버깅 (lldb / frida) | 간단한 중단점 및 레지스터 수정 | 분기 없는 P_TRACED 얽힘을 통한 조용한 상태 손상 |
난독화기 심볼 및 경로 감사 (nm / strings) | 함수 이름 및 /rustc/ / .llvm. 경로 노출 | 난독화기/VM 심볼 또는 /rustc/ 경로 누출 0건 (자동 정리된 Mach-O) |
scLock은 전체 UI 계층을 비대하게 만드는 대신 핵심 고가치 함수(라이선스 검증, 독점 DSP/AI 가중치, 암호화 키 스케줄, 변조 방지 게이트)를 대상으로 하기 때문입니다:
| 지표 | 측정값 | 비고 |
|---|---|---|
| 단일 가상화 함수 호출 지연 시간 | ~8–12 µs (~0.01 ms) | 전체 256슬롯 다형성 VM + MBA 평가 |
| 지속 처리량 | ~85,000–120,000 호출 / 초 | 단일 코어 Apple Silicon (arm64) |
| 120 FPS 실시간 프레임 예산 영향 | < 0.15% (0% 프레임 드롭) | 실시간 오디오 플러그인(AU/VST3), 게임 및 macOS 앱에 안전 |
scLock이 작동하는 방식상용 scLock SDK는 단일 자체 포함 네이티브 arm64 CLI 바이너리(bin/sclock)로 제공됩니다.
# Default: Portable All-Mac SEP-Attested + Per-Handler MBA Mode (runs on any Apple Silicon Mac)
sclock compile examples/01_quickstart_c/protect_me.c \
-o protect_me_locked
# Optional: Single-Machine Physical SEP UID Node-Locked Mode (zero unsealable keys in binary)
sclock compile examples/01_quickstart_c/protect_me.c \
-o protect_me_node_locked \
--sep-lock
# Scrub internal compiler/LLVM paths, strip symbol tables, and apply Hardened Runtime signature
sclock protect-app ./target/release/my_commercial_app
sclock verify ./protect_me_locked