Ghidra MCP Zig Plugin について
JNIを介してGhidraとZigベースのMCPサーバーを接続するプラグインです。プログラム分析向けに、関数の逆コンパイルやシンボル管理、インポートとエクスポートの一覧表示を提供します。
主な機能
- 01GhidraとZigのJNIブリッジ
- 02関数の逆コンパイルと改名
- 03データシンボルの管理
- 04インポートとエクスポートの一覧表示
活用シーン
- 01関数の逆コンパイル結果の確認
- 02関数やデータオブジェクトの改名
- 03プログラムのインポートとエクスポートの確認
MCP 対応
Zig MCPサーバーが、逆コンパイル、改名、一覧取得などのGhidra分析ツールをMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Ghidra MCP Zig プラグイン
プログラム解析機能を強化するために、Ghidra と Zig ベースの MCP サーバーを連携させる Ghidra プラグインです。
機能
- Ghidra と Zig 間の JNI ベースの通信
- 関数のデコンパイルと名前変更
- データシンボルの管理
- インポート/エクスポートの一覧表示
- MCP サーバーとの連携
- 包括的なテストスイート
- Zig による最新のビルドシステム
- 効率的なメモリ管理
- 型安全な JNI ブリッジの実装
- 簡単に連携できる Go クライアントライブラリ
前提条件
- Zig(バージョン 0.13.0 以降)
- Ghidra(バージョン 11.3.1 以降)
- Java Development Kit(JDK)17 以降
- Go(バージョン 1.22.4 以降)
- Gradle(バージョン 8.13 以降)
- Make
プロジェクト構成
ghidra-mcp-zig/
├── src/
│ ├── plugin/
│ │ ├── jni/
│ │ │ └── bridge.zig # JNI interface implementation
│ │ ├── analysis.zig # Program analysis logic
│ │ └── plugin.zig # Plugin initialization
│ └── server/
│ └── main.zig # MCP server implementation
├── java/ # Ghidra plugin Java code
│ ├── build.gradle # Gradle build configuration
│ ├── gradlew # Gradle wrapper script
│ └── src/ # Java source files
├── pkg/
│ └── mcp/
│ └── client/ # Go MCP client library
│ ├── client.go # Client implementation
│ └── client_test.go # Client tests
├── build.zig # Build configuration
├── build.zig.zon # Dependencies configuration
├── go.mod # Go module definition
└── Makefile # Build automation
依存関係
- zig-jni(v0.0.9) - Zig 用 JNI バインディング
ビルド
-
リポジトリをクローンします:
git clone https://github.com/yourusername/ghidra-mcp-zig.git cd ghidra-mcp-zig -
次の変数を含む
.envファイルを作成します:GHIDRA_PATH=/path/to/ghidra_11.3.1_PUBLIC/Ghidra/Features/Base/lib/Base.jar JAVA_HOME=/path/to/your/jdk -
プロジェクトをビルドします:
# Build everything make all # Or build specific components make build-server # Build the MCP server make build-plugin # Build the Ghidra plugin -
サーバーを実行します:
make run-server
ビルドターゲット
| ターゲット | 説明 | 使用例 |
|---|---|---|
all | すべてのコンポーネントをビルド | make all |
build-server | MCP サーバーをビルド | make build-server |
build-plugin | Ghidra プラグインをビルド | make build-plugin |
clean | すべての生成物をクリーンアップ | make clean |
clean-server | サーバーの生成物をクリーンアップ | make clean-server |
clean-plugin | プラグインの生成物をクリーンアップ | make clean-plugin |
実行ターゲット
| ターゲット | 説明 | 使用例 |
|---|---|---|
run-server | MCP サーバーを起動 | make run-server |
run-plugin | Ghidra プラグインを起動 | make run-plugin |
テストターゲット
| ターゲット | 説明 | 使用例 |
|---|---|---|
test | すべてのテストを実行 | make test |
test-server | サーバーのテストを実行 | make test-server |
test-plugin | プラグインのテストを実行 | make test-plugin |
利用可能なターゲットの一覧を確認するには、次を実行します:
make help
インストール
-
プラグインをビルドします:
make build-plugin -
ビルドしたプラグインを Ghidra のプラグインディレクトリにコピーします:
cp zig-out/lib/libghidra-mcp-zig.dylib /path/to/ghidra/Extensions/Ghidra/ghidra-mcp-zig/ -
Ghidra を再起動します
使用方法
- Ghidra を起動し、解析するプログラムを開きます
- MCP プラグインは Ghidra のプラグインマネージャーから利用できます
- Ghidra のインターフェースからプラグインの機能を使用します
利用可能な MCP コマンド
| コマンド | 説明 | パラメーター |
|---|---|---|
decompile | 関数をデコンパイル | address: u64 |
rename_function | 関数の名前を変更 | address: u64, new_name: string |
rename_data | データオブジェクトの名前を変更 | address: u64, new_name: string |
list_functions | すべての関数を一覧表示 | なし |
list_data | すべてのデータオブジェクトを一覧表示 | なし |
list_imports | すべてのインポートを一覧表示 | なし |
list_exports | すべてのエクスポートを一覧表示 | なし |
エラー処理
この実装には、特定のエラータイプによる包括的なエラー処理が含まれています。
| エラータイプ | 説明 |
|---|---|
ConnectionError | 接続関連のエラー |
MessageError | メッセージ処理のエラー |
ResponseError | 応答の解析エラー |
InvalidAddress | 無効なメモリアドレス |
InvalidFunction | 無効な関数参照 |
InvalidData | 無効なデータ参照 |
DecompilationFailed | 関数のデコンパイルに失敗しました |
RenameFailed | 名前変更操作に失敗しました |
OutOfMemory | メモリの割り当てに失敗しました |
InvalidProgram | 無効なプログラム状態 |
JNIError | JNI ブリッジのエラー |
開発
新機能の追加
src/plugin/jni/bridge.zigの JNI インターフェースを更新しますsrc/plugin/analysis.zigに対応する機能を実装します- 必要に応じて
src/server/main.zigのサーバー実装を更新します - 再ビルドしてテストします
デバッグ
make cleanを使用してビルド成果物を削除します- Ghidra のログでプラグイン関連のメッセージを確認します
make run-serverで実行すると、サーバーのログがコンソールに表示されます
JNI ブリッジの実装
JNI ブリッジは、Zig と Java 間に型安全なインターフェースを提供します。
- 適切な割り当てと解放によるメモリ管理
DeleteLocalRefによる JNI 参照の管理- null チェックによるエラー処理
- Zig と Java の型間の型変換
- 配列の作成と要素の設定
- オブジェクトの作成とフィールドの設定
主な機能
-
メモリ安全性
- JNI 参照の自動クリーンアップ
- UTF-8 変換による適切な文字列処理
- 安全なメモリの割り当てと解放
-
型安全性
- すべての JNI 操作での強い型付け
- コンパイル時の型チェック
- 安全な型変換
-
エラー処理
- 包括的なエラータイプ
- すべての JNI 操作での null チェック
- エラー発生時の適切なクリーンアップ
-
オブジェクト管理
- 安全なオブジェクトの作成と破棄
- 型チェックを伴うフィールドアクセス
- 境界チェックを伴う配列処理
コントリビューション
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更をコミットします
- ブランチにプッシュします
- プルリクエストを作成します
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。