
scLock (Supercluster Lock)ハードウェアバインド型256スロット多態VM、非線形MBA($\mathbb{Z}_{2^{64}}$)、およびmacOS(arm64 Apple Silicon)向け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)ディスパッチャに依存しており、1つの鍵を復元するだけでバイトコードストリーム全体が露呈します。
scLock(Supercluster Lock) は、コンパイル時256スロット多態仮想化、ハンドラごとのMBA鍵シャタリング、そしてデュアルティアApple Silicon Secure Enclave(SEP)バインディングを組み合わせています:
sclock compile)は、64ビットの多態的シードから、まったく新しい256エントリの命令セット(172個のアクティブなマイクロオペレーション + 84個の状態破壊チャフハンドラ)を合成します。2つのビルドが同じバイトコードエンコーディングやハンドラテーブルを共有することは決してありません。black_box + vm.anchor)MBAソルト破砕: アナリストがポータブルモードで外側のスポンジキー (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)上でオフライン動作します。外側のスポンジキー (k0, k1) を、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フック下での実行を毒する)を組み合わせて導出します。すべての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シリコンなしでは、オフラインでの鍵導出は物理的に不可能です。if (is_debugged) exit() 分岐の代わりに、scLock はカーネルの sysctl P_TRACED ビットとARM64プロローグの BRK(0xD4200000)スキャンを256ビットのスポンジ状態アキュムレータに直接混入させ、シンボルとツールチェーンパスの自動スクラブ(sclock protect-app)を行います。私たちの言葉を鵜呑みにしないでください—今すぐご自身のディスアセンブラとデバッガで scLock をテストしてください。
このリポジトリには、scLock で保護されたスタンドアロンのMach-O arm64 バイナリが含まれています(v1.0.0、ポータブル 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 (Official CrackMe Challenge Thread) に投稿してください!
Apple Silicon(macOS arm64、Release プロファイル)でテスト済み:
| 分析ベクトル | 保護なしバイナリ(clang -O3) | scLock v1.0.0 保護バイナリ |
|---|---|---|
Ghidra 11.x デコンパイラ(DecompileCallback) | 0.4 秒(C ソース全体を復元) | > 330 秒 タイムアウト(Decompiler process killed) |
| 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 の使い方(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