Kagura¶
モバイル・デスクトップ・WebAssembly 向けの LLVM ベース難読化・耐タンパーツールキット。
LLVM 17+ の New Pass Manager 上に構築。-fpass-plugin でパスプラグインとしてロードされ、LLVM のソースツリーに手を加える必要はありません。
対応プラットフォーム: iOS · Android · macOS · Windows (MSVC/Clang-CL) · Linux · WebAssembly
はじめての方
クイックスタート からどうぞ。インストールから最初の難読化バイナリまで5分で進めます。
Kagura の引用
研究や本番運用で Kagura に基づく成果を作られた場合は、論文の引用をお願いします — 下記 引用 を参照。DOI は 10.5281/zenodo.20361447。
コミュニティ
質問・アイデア・ユースケース共有は GitHub Discussions で。 バグ報告と機能要望は Issues — テンプレートあり。
なぜ Kagura か¶
ネイティブコードを出荷するということは、リバースエンジニアにスタート地点を提供するということ。静的解析ツール (IDA Pro, Ghidra, Binary Ninja) や動的計装フレームワーク (Frida, Substrate) は、保護されていないバイナリから数時間でロジックを再構成し、鍵を抽出し、セキュリティチェックを回避できます。
Kagura はこれを LLVM IR レベル — コンパイラが IR をマシンコードに変換する前 — で対処するため、すべての保護がアーキテクチャ非依存となり、一度のビルドステップで全ターゲットに適用できます。
| 脅威 | Kagura の対抗策 |
|---|---|
文字列の静的抽出 (strings、IDA imports) |
kagura-str / kagura-str-aes — 文字列は初使用時まで XOR/AES 暗号化されたブロブ |
| デコンパイラで読める制御フロー | kagura-fla + kagura-bcf — CFG が switch ディスパッチの状態機械になり、不透明な死分岐を持つ |
| メモリエディタ / GameGuardian の値フリーズ | kagura-mvo / kagura-pe / Protected<T> — alloca のたびに XOR 暗号化された値で格納 |
| Frida / Substrate の動的計装 | kagura-anti-debug + ロード済みライブラリスキャン — フッキングフレームワークを実行時に検出・応答 |
| バイナリパッチ (整合性チェックを NOP化) | kagura-bbcheck — BB ごとのオペコードチェックサムでバイナリ変更時に abort |
| インポートテーブル分析 (IDA の external calls) | kagura-ci — 外部呼び出しを実行時解決のサンクテーブルにルーティング |
| Jailbreak / root 検出のバイパス | ランタイムモジュール: Mach-O 整合性、ELF 改ざん、Magisk/Zygisk/LSPosed 検出 |
ドキュメントマップ¶
ひとめで分かる例¶
clang -fpass-plugin=KaguraObfuscator.dylib \
-mllvm -kagura-config=kagura.json \
-O1 your_file.c -o your_file
{
"profile": "BALANCED",
"passes": { "str": true, "fla": true, "bcf": true, "mvo": true },
"tuning": { "bcf_prob": 40, "seed": 12345 }
}
詳細は クイックスタート を参照。
引用¶
研究や派生プロジェクトで Kagura を使用された場合は、論文 を引用してください:
@software{kagura,
author = {yotti},
title = {Kagura: LLVM-based Code Obfuscation and Anti-Tamper Toolkit},
year = {2025},
publisher = {Zenodo},
doi = {10.5281/zenodo.20361447},
url = {https://doi.org/10.5281/zenodo.20361447}
}
ライセンス¶
MIT — LICENSE 参照。