🐉

GhidraMCPをgpt-oss-20bで使ってみる

に公開

概要

静的解析ツール GhidraローカルLLM でしばきたい。
解析環境をホストOSに置くのは避けたいので、MCPホスト(今回は LM Studio)だけ外に出しておく。

概念図にするとこんな感じ?

環境

ギリ最近のゲームができる程度のスペック。10万円前後あれば組める。

CPU: 12th Gen Intel Core i5-12400F
GPU: NVIDIA GeForce RTX 3060
RAM: 32GB

下準備

下記は説明不要かと思うので省略。

  1. ホストOSに VMware Workstation をインストール
  2. ホストOSの VMware Workstation 上に解析環境(Windows など)を構築
  3. 解析環境に JDK をインストール(Ghidra 用)
  4. 解析環境に Python3.x をインストール(GhidraMCP 用)
  5. 解析環境で pip install mcp requests を実行(GhidraMCP 用)
  6. 解析環境の Windows ファイアウォールで TCP/8081 を開放
  7. 解析環境の VMware ネットワーク設定を 「ホストオンリー」 に設定

ゲストOSの準備

GhidraMCP のダウンロード

ここから新しいものを取得。私は GhidraMCP 1.4 を使用。
https://github.com/LaurieWired/GhidraMCP/releases

説明に下記の文言があるので、Ghidra のバージョンも合わせる。

Add support for Ghidra 11.3.2

ダウンロード後、zip を展開しておく。

Ghidra のダウンロード

上記のとおり 11.3.2 をダウンロード。
https://github.com/NationalSecurityAgency/ghidra/releases

こちらも zip を展開しておく。

GhidraMCP(拡張機能)のインストール

README に沿ってインストール。
https://github.com/LaurieWired/GhidraMCP/releases

Run Ghidra
Select File -> Install Extensions
Click the + button
Select the GhidraMCP-1-2.zip(または使用バージョン)
Restart Ghidra
File -> Configure -> DeveloperGhidraMCPPlugin を有効化
(任意)Edit -> Tool Options -> GhidraMCP HTTP Server でポート設定

bridge_mcp_ghidra.py の実行

コマンドプロンプトで同ファイルがあるフォルダを開き、下記を実行。

> python bridge_mcp_ghidra.py --transport sse --mcp-host 0.0.0.0 --mcp-port 8081 --ghidra-server http://127.0.0.1:8080/

起動後は下記のようなメッセージが出る。あとは放置でOK。

Connecting to Ghidra server at http://127.0.0.1:8080/
Starting MCP server on http://0.0.0.0:8081/sse
Using transport: sse
←[32mINFO←[0m: Started server process [←[36m7908←[0m]
←[32mINFO←[0m: Waiting for application startup.
←[32mINFO←[0m: Application startup complete.

ホストOSの準備

LM Studio をインストールする(ポチポチするだけ)。
いつの間にか商用利用も無償になっていたらしい。嬉しいね。
https://lmstudio.ai/

gpt-oss-20b を推しているのかダイアログが出たので、そのままポチっとしてモデルもインストール。

mcp.json の編集

赤枠のところを上から順に押していくと Edit mcp.json が開く。
編集画面に下記のように入力(IPアドレスは解析環境上で ipconfig で確認)。

{
  "mcpServers": {
    "ghidra": {
      "url": "http://192.168.xxx.xxx:8081/sse"
    }
  }
}

設定後、サイドバーのボタンから GhidraMCP を有効化。
うまく MCP サーバと通信できると、画像のようにツール一覧が出てくる。

ここでうまくいかない場合は、ホスト→ゲストの疎通などを確認しておく。

解析

解析環境側

手頃なプログラムがなかったので、Hello World を tcc でコンパイルして exe を作成。

#include <stdio.h>

int main(int argc, char** argv){
    printf("Hello World.\n");
    return 0;
}

通常どおり Ghidra に読み込ませればよい。Non-Shared Project でOK。


特にいうこともない Ghidra の画面

LM Studio 側

MCP の設定はできているので、雑に話を振ってみる。

ツールの使用許可を求められるので、ボタンでポチっと許可。

以下、回答例。

このバイナリどう?
openai/gpt-oss-20b
Thought for 0.91 seconds

list_strings
mcp/ghidra

Thought for 0.36 seconds

list_functions
mcp/ghidra

Thought for 1.01 seconds

バイナリの概要

項目	内容
エントリポイント	00401038
実行時に出力される文字列	"Hello World.\n"
使用しているDLL / 関数	msvcrt.dll → printf, __set_app_type, _controlfp, __getmainargs, exit など
主要な関数	FUN_00401000(内部で printf を呼び出す)
実際に何をしているか
エントリポイント (00401038) から実行が始まり、FUN_00401000 が呼ばれる。
FUN_00401000 は msvcrt.dll の printf を使って "Hello World.\n" を標準出力に表示するだけの処理で、他に特別なロジックは存在しない。
出力後、exit(0) でプログラムを終了している。
結論
機能:単純に「Hello World」をコンソールへ出力するだけのサンプル/テストプログラムです。
危険性:特に悪意あるコードや不正な挙動は検出されていません。
解析対象として有用か:学習・デモ目的であれば十分ですが、実際の攻撃サンプルなどではないため、セキュリティ分析の練習素材としては限定的です。
もしさらに詳細な逆アセンブルやソースレベルの解説が必要なら、decompile_function_by_address で FUN_00401000 をデコンパイルしてみると良いでしょう。

思ったより優秀だな。。。

おわりに

設定も簡単だし、ローカルでこれだけ性能の良い LLM が動くのはかなり衝撃的でした。
MacBook Pro は爆速らしいから、買っちゃおうか迷うな〜。

お し ま い

Discussion