Hallucina について
Hallucina は LLVM 17 ベースのコンパイラツールで、単一のソースファイルや大規模なプロジェクトにコード難読化を適用します。コンパイル済みプログラムの解析を難しくしたい開発者向けで、逆アセンブラ MCP サーバーを使うワークフローにも関連します。
主な機能
- 01間接ジャンプの難読化
- 02間接関数呼び出しの難読化
- 03間接グローバル変数参照の難読化
- 04C 文字列の暗号化
- 05制御フローの平坦化
活用シーン
- 01単一の C ソースファイルの難読化
- 02プロジェクトのビルドへの難読化フラグ追加
- 03コンパイル済みコードの解析難度向上
MCP 対応
Hallucina 自体は MCP サーバーではなく、LLVM ベースの難読化ツールです。Ghidra や IDA PRO などの逆アセンブラ向けカスタム MCP サーバーと併用する用途が説明されています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Hallucina
Hallucinaは、GhidraやIDA PROなどの逆アセンブラー向けカスタムMCPサーバーとともに使用されるLLMクライアントを混乱させ、幻覚を引き起こすよう設計された強力な難読化ツールです。
Hallucinaを使えば、人間主導のリバースエンジニアリングが必須になります。LLMにリバースエンジニアリングを任せることはできません!残念でしたね、お子様たち :)
使い方
Hallucinaでは、簡単な操作で難読化手法を適用できます。以下に使用例を示します。
単一ファイルの難読化
生成されたclang(LLVM 17)を使って、単一のソースファイルを難読化するには、次のコマンドを実行します。
path_to_build/bin/clang -mllvm -irobf -mllvm --irobf-indbr test.c -o test_obfuscated
このコマンドは、フラグ-mllvm -irobfおよび-mllvm --irobf-indbrで指定された難読化手法をtest.cファイルに適用し、test_obfuscatedという名前の難読化済み出力ファイルを生成します。
以下では、元のテストコードと難読化されたテストコードの違いを確認できます。

プロジェクトの難読化
大規模なプロジェクトでは、Hallucinaをビルドシステムに組み込んでください。
CC=path_to_build/bin/clang
CFLAGS+="-mllvm -irobf -mllvm --irobf-indbr"
./configure
make
利用可能な難読化フラグ
- 難読化処理間の相関。
- 間接ジャンプ。ジャンプ先を暗号化します(
-mllvm -irobf-indbr)。 - 間接関数呼び出し。対象関数のアドレスを暗号化します(
-mllvm -irobf-icall)。 - 間接グローバル変数参照。変数のアドレスを暗号化します(
-mllvm -irobf-indgv)。 - C文字列の暗号化(
-mllvm -irobf-cse)。 - プロシージャ関連の制御フローフラット化難読化(
-mllvm -irobf-cff)。 - 上記すべての機能を包括的に適用(
-mllvm -irobf-indbr -mllvm -irobf-icall -mllvm -irobf-indgv -mllvm -irobf-cse -mllvm -irobf-cff)。
Hallucinaのビルド
HallucinaはLLVM 17でのビルドに対応しています。以下の手順に従ってビルド環境を設定してください。
前提条件
Windows
- Ninjaをインストールし、PATHに設定されていることを確認してください。
- C++開発ツールを含むVisual Studio 2022をインストールしてください。
Linux
次のコマンドを実行して、前提条件をインストールしてください。
sudo apt update && sudo apt install -y build-essential cmake ninja-build python3
ビルド手順
Windows
- x64 Native Tools Command Prompt for VS 2022を開きます。
- 次のコマンドを実行します。
mkdir build
cd build
cmake -DCMAKE_CXX_FLAGS="/utf-8" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" -G "Ninja" ../llvm
ninja
Linux
- 次のコマンドを実行します。
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" -G "Ninja" ../llvm
ninja
よくある問題のトラブルシューティング
コンパイルエラー
ヘッダーの不足やGCC固有の問題など、コンパイル中にエラーが発生した場合は、次の点を確認してください。
std::ifstreamが見つからないというエラーが報告されたファイルに#include <fstream>を追加してください。- 互換性を確保するため、最新バージョンのGCCまたはClangを使用してください。
ビルド中のメモリの問題
ビルド中にメモリの問題が発生した場合は、次の手順でスワップメモリを増やせます。
Linux
スワップメモリを一時的に増やすには、次のコマンドを実行します。
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
この変更を永続化するには、/etc/fstabに次の行を追加します。
/swapfile none swap sw 0 0
重要な注意事項
ビルド後は、build/binディレクトリにある生成済みのclangバイナリを使用してください。このバージョンのclangはLLVM 17をベースとしており、Hallucinaが提供する難読化機能が含まれています。
Hallucinaへの貢献
貢献を歓迎します!開発環境の設定方法とプルリクエストの送信方法については、DEVELOPMENT.mdをご覧ください。
ライセンス
このプロジェクトはGNU v3 Licenseのもとでライセンスされています。詳細についてはLICENSEファイルをご覧ください。
参考資料
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。