llvm-obfuscation について
ソフトウェア保護とリバースエンジニアリングの妨害に取り組む開発者向けの、LLVMベースのコード難読化リファレンスです。一般的な変換やフレームワークに加え、カスタムパス、ツールチェーン連携、実装上のトレードオフを扱います。
主な機能
- 01制御フロー難読化技術
- 02データ・文字列の難読化
- 03命令置換と仮想化
- 04OLLVMフレームワークの概要
- 05カスタムLLVMパスの指針
- 06ツールチェーン連携の参考情報
活用シーン
- 01コードベース向け難読化手法の評価
- 02LLVM難読化パス実装の計画
- 03OLLVMフレームワークの機能比較
- 04コンパイラツールチェーンへの難読化導入
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ gmh5225/ awesome-llvm-security --skill llvm-obfuscationインストール後、Claude Code で/llvm-obfuscationを入力して読み込まれたか確認します。
詳細
LLVM コード難読化スキル
このスキルでは、ソフトウェア保護とリバースエンジニアリング対策のための、LLVM ベースのコード難読化フレームワークと手法に関する包括的な知識を提供します。
主な難読化手法
制御フローの難読化
- 制御フローの平坦化(CFF):構造化された制御フローを、状態機械を使った単一のディスパッチャーループに変換します
- 偽の制御フロー(BCF):不透明な述語と実行されないコードパスを挿入します
- CFG のランダム化:基本ブロックの順序をランダム化し、偽のエッジを追加します
データの難読化
- 文字列の暗号化:文字列リテラルをコンパイル時に暗号化し、実行時に復号します
- 定数の置換:定数を複雑な式に置き換えます
- 変数の分割:変数を複数の要素に分割します
コード変換
- 命令の置換:標準的な命令を、同等の複雑な命令列に置き換えます
- MBA(混合ブール演算・算術演算):難読化に混合ブール演算・算術演算式を使用します
- 仮想化(VMP):コードを、組み込み VM で実行されるカスタムバイトコードに変換します
主な OLLVM フレームワーク
Classic OLLVM
- Original OLLVM:https://github.com/obfuscator-llvm/obfuscator
- 機能:BCF、CFF、命令の置換、文字列の暗号化
最新の派生版
- Hikari:関数ラッパー、クラスダンプ対策などの高度な機能
- Pluto-Obfuscator:MBA、間接分岐、グローバル暗号化を備え、保守が行き届いています
- Arkari:機能を強化した最新の実装
- o-mvll:iOS/Android 向けのモバイル特化型難読化ツール
特化型ツール
- IR VMP:仮想化には GANGE666/xVMP、NiTianErXing666/SmallVmp
- Warbird:Microsoft の商用難読化技術
実装ガイドライン
カスタム LLVM 難読化パスの作成
#include "llvm/Pass.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
class MyObfuscationPass : public llvm::FunctionPass {
public:
static char ID;
MyObfuscationPass() : FunctionPass(ID) {}
bool runOnFunction(llvm::Function &F) override {
// Implement obfuscation logic
for (auto &BB : F) {
for (auto &I : BB) {
// Transform instructions
}
}
return true;
}
};
ベストプラクティス
- セマンティクスの保持:変換によってプログラムの正しさが損なわれないようにします
- ランダム化:再現可能なビルドのため、シード付きの乱数生成器を使用します
- 多層的なアプローチ:複数の難読化手法を組み合わせます
- パフォーマンスのバランス:実行時のオーバーヘッドと保護レベルを考慮します
- テスト:さまざまな入力やプラットフォームで広範にテストします
ツールチェーンとの統合
NDK との統合
- Android NDK(r17-r23+)での OLLVM
- 例:android-ndk-aarch64-host-LLVM6.0-Ollvm-Armariris
コンパイラツールチェーン
- ollvm-mingw:Windows 向けクロスコンパイル
- ollvm-rust:Rust ツールチェーンとの統合
- Swift との統合:swift-Ollvm11
難読化解除への対策
難読化を実装する際は、次の点を考慮してください。
- シンボリック実行(SymCC、KLEE)への耐性を考慮します
- パターンマッチングを行う難読化解除ツールへの対策を追加します
- デバッグ対策のチェックを実装します
- 静的解析を妨げるために動的ディスパッチを使用します
リソース
OLLLVM の実装と関連ツールの包括的な一覧については、メインの README.md を参照してください。
詳細情報の取得
詳細で最新のリソースリンク、ツール一覧、プロジェクトの参照情報が必要な場合は、次から最新データを取得してください。
https://raw.githubusercontent.com/gmh5225/awesome-llvm-security/refs/heads/main/README.md
この README には、次の項目を網羅した厳選リストが含まれています。
- 80 件を超える OLLVM の実装とフォーク(OLLVM セクション)
- MSVC Warbird の難読化ツール(MSVC Warbird セクション)
- IR ベースの VMP と仮想化プロジェクト
- 各バージョンの NDK 統合例
コメント
Markdown 対応