mcpField
L
llvm-obfuscation

llvm-obfuscation

github.com/gmh5225セキュリティ890114 回インストール4 週間前に更新
リポジトリ

llvm-obfuscation について

ソフトウェア保護とリバースエンジニアリングの妨害に取り組む開発者向けの、LLVMベースのコード難読化リファレンスです。一般的な変換やフレームワークに加え、カスタムパス、ツールチェーン連携、実装上のトレードオフを扱います。

主な機能

  1. 01制御フロー難読化技術
  2. 02データ・文字列の難読化
  3. 03命令置換と仮想化
  4. 04OLLVMフレームワークの概要
  5. 05カスタムLLVMパスの指針
  6. 06ツールチェーン連携の参考情報

活用シーン

  1. 01コードベース向け難読化手法の評価
  2. 02LLVM難読化パス実装の計画
  3. 03OLLVMフレームワークの機能比較
  4. 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
最新の派生版
  • 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;
    }
};
ベストプラクティス
  1. セマンティクスの保持:変換によってプログラムの正しさが損なわれないようにします
  2. ランダム化:再現可能なビルドのため、シード付きの乱数生成器を使用します
  3. 多層的なアプローチ:複数の難読化手法を組み合わせます
  4. パフォーマンスのバランス:実行時のオーバーヘッドと保護レベルを考慮します
  5. テスト:さまざまな入力やプラットフォームで広範にテストします

ツールチェーンとの統合

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 統合例

コメント