scLock(Supercluster Lock)面向 macOS(arm64 Apple Silicon)的硬件绑定 256 槽多态虚拟机、非线性 MBA($\mathbb{Z}_{2^{64}}$)与 Apple Secure Enclave 二进制保护器
由 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 密钥粉碎以及双层 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 保护的仿射参数与实时 vm.anchor([x0, #0xa0])通过非线性 MBA 多项式组合而重建——从而击败 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 反模拟 / 反 Hook 门($d_{\text{SEP}} \cdot Q_P \stackrel{?}{=} d_P \cdot Q_{\text{SEP}}$ 在 Secure Enclave 上执行,以在非 SEP 模拟器或 API Hook 下毒化执行)来派生外层海绵密钥 (k0, k1)。由于跨所有 Mac 的离线执行需要确定性密钥派生,SCP1 中的静态提取防御由每处理器运行时纠缠(vm.anchor + black_box)MBA 盐粉碎和跨所有 256 个处理器的状态相关海绵链提供。--sep-lock / --host-sep-lock):将 P-256 私钥直接密封在目标 Mac 的物理 Secure Enclave UID(kSecAttrTokenIDSecureEnclave 硬件包装的 rk1/dacl blob)内。Mach-O 二进制文件中不存在任何可解封的密钥材料——没有目标 Mac 的 Secure Enclave 硅片,离线密钥派生在物理上是不可能的。scLock 不使用可修补的 if (is_debugged) exit() 分支,而是将内核 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,并尝试:
h_salt),并在不触发 Ghidra 反编译器超时(>330s)的情况下反编译虚拟化的定价/验证例程。lldb 并单步执行虚拟化分派循环,同时不破坏与 P_TRACED 纠缠的海绵状态。arg2 != 1234)以及虚拟化例程内部精确的 64 位代数混合常量。发现了有趣的分析或撰写文章?请发布到 Issue #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. 路径暴露 | 0 个混淆器/VM 符号或 /rustc/ 路径泄漏(自动清理的 Mach-O) |
因为 scLock 针对关键高价值函数(许可证验证、专有 DSP/AI 权重、密码密钥调度、防篡改门控),而不是膨胀整个 UI 层:
| 指标 | 测量值 | 备注 |
|---|---|---|
| 单次虚拟化函数调用延迟 | ~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 如何用 3 条命令工作商业 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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
scLock Security & Zero-Leak Stealth Auditor v1.0.0-commercial (by relay)
Target: ./protect_me_locked
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[1/5] Symbol Table Stealth Check (nm) : PASS [0 Leaks] (0 internal symbols exposed)
[2/5] Plaintext String Leak Check (strings) : PASS [0 Leaks] (0 hint strings exposed)
[3/5] Apple Secure Enclave Silicon Key Binding : PASS [P-256 SEP Key Blob (rk1/dacl) verified]
[4/5] Kernel Anti-Debug (P_TRACED) & CryptoKit : PASS [Branchless ECDH + sysctl entangled]
[5/5] Binary Shannon Entropy : 6.5414 bits/byte (High-Entropy VM Active)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
完整的即插即用集成模板请参见 examples/01_quickstart_c(protect_me.c、Makefile、run_demo.sh)和 examples/02_rust_workspace(build.rs、run_rust_demo.sh)。