テスト・評価¶
単体 / 回帰テスト¶
Lit ベースの FileCheck テストは tests/ 配下にあります。テストマトリクスは tests/regression/README.md と tests/pass-inputs/README.md を参照。
再現可能ビルドの検証¶
固定シードでビルドした2回の出力がバイト単位で同一であることを検証:
差分テスト¶
難読化バイナリが平文バイナリと同じ出力を生成することを検証:
./scripts/differential-test.sh
# [diff-test] arithmetic_test ... PASS
# [diff-test] combined_test ... PASS
# Results: 8 passed, 0 failed, 0 skipped
App Store / Google Play 審査リスク評価¶
コンパイル済みバイナリをスキャンし、ストア審査拒絶を招くパターンを検出 (非 PIE, 平文 API キー, セレクタを漏らすデバッグシンボル等):
./scripts/review-risk-assessment.sh path/to/MyApp.dylib --platform ios
# [HIGH ] [SEC-PIE] ...
# [INFO ] [ENC-DECL] No obvious encryption keyword references found.
# RESULT: No critical or high review risks detected.
セキュリティ評価ハーネス¶
# シンボリック実行耐性 (angr)
cd tests/symbolic_exec && python3 run_angr_eval.py \
--binary /tmp/my_binary --timeout 30
# デコンパイラ耐性 (Ghidra)
cd tests/decompiler_eval && python3 run_ghidra_eval.py \
--binary /tmp/my_binary --ghidra /path/to/ghidra
# Frida 計装耐性 (プローブ F1-F8)
cd tests/frida_resistance && for s in probes/F*.js; do
frida -l "$s" -f /tmp/my_binary
done
# フル レッドチームレポート
cd tests/redteam && python3 run_redteam.py \
--binary /tmp/my_binary --report report.json
各サブディレクトリには独自の README があります — それぞれ
tests/symbolic_exec/README.md、
tests/decompiler_eval/README.md、
tests/frida_resistance/README.md、
tests/redteam/README.md を参照。
追加解析ツール¶
| スクリプト | 目的 |
|---|---|
scripts/kagura-cli.py |
設定ジェネレータ、監査ログビューア、シンボルマップアナライザ |
scripts/kagura-diff.py |
ベースラインと難読化バイナリのセクション / シンボル / 文字列差分 (text or HTML) |
scripts/kagura-strip.py |
ビルド後の衛生処理 — LC_UUID (Mach-O) / .note.gnu.build-id (ELF) をゼロ化してリビルド指紋を消す |
scripts/variant_generator.py |
カスタム鍵を使った顧客 / アプリごとのバリアント生成 |
scripts/attacker_cost_model.py |
攻撃者のリバースエンジニアリングコスト (アナリスト時間) を推定 |
scripts/battery_impact.py |
ランタイムパスのバッテリー / CPU 影響をモデル化 |
scripts/license_manager.py |
期限付きライセンストークンの生成、検証、失効 |
kagura-diff — 実際にパスが何を変えたか¶
ベースラインバイナリと難読化済みバイナリを比較し、セクション増加・シンボル数・文字列数の差分を表示します。リリースビルドが本当に平文 API キーを除去し、非公開シンボルを隠したかを検証するのに便利です。
scripts/kagura-diff.py baseline.dylib obfuscated.dylib
scripts/kagura-diff.py baseline.dylib obfuscated.dylib --html report.html
kagura-strip — 残存ビルドメタデータを消去¶
IR レベルのパスはリンカが後で書き込むメタデータ (LC_UUID, .note.gnu.build-id, 埋め込みビルドパス) に届きません。strip の後に kagura-strip を実行してください: