mcpField
G
Ghidra MCP Zig Plugin

Ghidra MCP Zig Plugin

ローカル
github.com/streamerd開発ツール783 週間前に更新

Ghidra MCP Zig Plugin について

JNIを介してGhidraとZigベースのMCPサーバーを接続するプラグインです。プログラム分析向けに、関数の逆コンパイルやシンボル管理、インポートとエクスポートの一覧表示を提供します。

主な機能

  1. 01GhidraとZigのJNIブリッジ
  2. 02関数の逆コンパイルと改名
  3. 03データシンボルの管理
  4. 04インポートとエクスポートの一覧表示

活用シーン

  1. 01関数の逆コンパイル結果の確認
  2. 02関数やデータオブジェクトの改名
  3. 03プログラムのインポートとエクスポートの確認

MCP 対応

Zig MCPサーバーが、逆コンパイル、改名、一覧取得などのGhidra分析ツールをMCPクライアントに公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Ghidra MCP Zig プラグイン

Ghidra Zig License

Go Gradle

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 バインディング

ビルド

  1. リポジトリをクローンします:

    git clone https://github.com/yourusername/ghidra-mcp-zig.git
    cd ghidra-mcp-zig
    
  2. 次の変数を含む .env ファイルを作成します:

    GHIDRA_PATH=/path/to/ghidra_11.3.1_PUBLIC/Ghidra/Features/Base/lib/Base.jar
    JAVA_HOME=/path/to/your/jdk
    
  3. プロジェクトをビルドします:

    # Build everything
    make all
    
    # Or build specific components
    make build-server    # Build the MCP server
    make build-plugin   # Build the Ghidra plugin
    
  4. サーバーを実行します:

    make run-server
    
ビルドターゲット
ターゲット説明使用例
allすべてのコンポーネントをビルドmake all
build-serverMCP サーバーをビルドmake build-server
build-pluginGhidra プラグインをビルドmake build-plugin
cleanすべての生成物をクリーンアップmake clean
clean-serverサーバーの生成物をクリーンアップmake clean-server
clean-pluginプラグインの生成物をクリーンアップmake clean-plugin
実行ターゲット
ターゲット説明使用例
run-serverMCP サーバーを起動make run-server
run-pluginGhidra プラグインを起動make run-plugin
テストターゲット
ターゲット説明使用例
testすべてのテストを実行make test
test-serverサーバーのテストを実行make test-server
test-pluginプラグインのテストを実行make test-plugin

利用可能なターゲットの一覧を確認するには、次を実行します:

make help

インストール

  1. プラグインをビルドします:

    make build-plugin
    
  2. ビルドしたプラグインを Ghidra のプラグインディレクトリにコピーします:

    cp zig-out/lib/libghidra-mcp-zig.dylib /path/to/ghidra/Extensions/Ghidra/ghidra-mcp-zig/
    
  3. Ghidra を再起動します

使用方法

  1. Ghidra を起動し、解析するプログラムを開きます
  2. MCP プラグインは Ghidra のプラグインマネージャーから利用できます
  3. 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無効なプログラム状態
JNIErrorJNI ブリッジのエラー

開発

新機能の追加
  1. src/plugin/jni/bridge.zig の JNI インターフェースを更新します
  2. src/plugin/analysis.zig に対応する機能を実装します
  3. 必要に応じて src/server/main.zig のサーバー実装を更新します
  4. 再ビルドしてテストします
デバッグ
  • make clean を使用してビルド成果物を削除します
  • Ghidra のログでプラグイン関連のメッセージを確認します
  • make run-server で実行すると、サーバーのログがコンソールに表示されます
JNI ブリッジの実装

JNI ブリッジは、Zig と Java 間に型安全なインターフェースを提供します。

  • 適切な割り当てと解放によるメモリ管理
  • DeleteLocalRef による JNI 参照の管理
  • null チェックによるエラー処理
  • Zig と Java の型間の型変換
  • 配列の作成と要素の設定
  • オブジェクトの作成とフィールドの設定
主な機能
  1. メモリ安全性

    • JNI 参照の自動クリーンアップ
    • UTF-8 変換による適切な文字列処理
    • 安全なメモリの割り当てと解放
  2. 型安全性

    • すべての JNI 操作での強い型付け
    • コンパイル時の型チェック
    • 安全な型変換
  3. エラー処理

    • 包括的なエラータイプ
    • すべての JNI 操作での null チェック
    • エラー発生時の適切なクリーンアップ
  4. オブジェクト管理

    • 安全なオブジェクトの作成と破棄
    • 型チェックを伴うフィールドアクセス
    • 境界チェックを伴う配列処理

コントリビューション

  1. リポジトリをフォークします
  2. 機能ブランチを作成します
  3. 変更をコミットします
  4. ブランチにプッシュします
  5. プルリクエストを作成します

ライセンス

このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルを参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。