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
下準備
下記は説明不要かと思うので省略。
- ホストOSに VMware Workstation をインストール
- ホストOSの VMware Workstation 上に解析環境(Windows など)を構築
- 解析環境に JDK をインストール(Ghidra 用)
- 解析環境に Python3.x をインストール(GhidraMCP 用)
- 解析環境で
pip install mcp requests
を実行(GhidraMCP 用) - 解析環境の Windows ファイアウォールで TCP/8081 を開放
- 解析環境の 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 -> Developer で GhidraMCPPlugin を有効化
(任意)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