GhidrAssist
著者: Jason Tang
Ghidra における対話型リバースエンジニアリング支援のための高度な LLM 搭載プラグイン
説明
GhidrAssist は、大規模言語モデル(LLM)を Ghidra に統合し、バイナリ探索およびリバースエンジニアリングに対するインテリジェントな支援を提供します。OpenAI v1 互換の任意の API をサポートしており、ローカルモデル(Ollama、LM-Studio、Open-WebUI)やクラウドプロバイダー(OpenAI、Anthropic、Azure)に対応しています。
主な機能
コア機能:
- コード説明 - 逆アセンブルおよび逆コンパイルされた疑似 C の両方で関数と命令を説明します
- リスクレベル、アクティビティプロファイル、API 使用状況を表示するセキュリティ分析パネル
- 自動上書きからのユーザー編集を保護する編集可能なサマリー
- 対話型チャット - 永続的なチャット履歴を持つマルチターン会話クエリ
- カスタムクエリ - 現在の関数/場所からのオプションのコンテキスト付きダイレクト LLM クエリ
Graph-RAG ナレッジシステム:
- セマンティック知識グラフ - バイナリ分析の階層的表現
- 5 レベルのセマンティック階層: ステートメント → ブロック → 関数 → モジュール → バイナリ
- 事前計算された LLM サマリーにより、LLM を使用しない高速なクエリを実現
- JGraphT グラフアルゴリズムによる SQLite 永続化
- サマリーとセキュリティ注釈の全文検索(FTS5)
- コミュニティ検出 - Leiden アルゴリズムによる自動モジュール発見
- 関連する関数を論理モジュールにグループ化
- サマリー付きの階層的コミュニティ構造
- 設定可能な深さでのビジュアルグラフ探索
- セキュリティ特徴抽出 - 包括的なセキュリティ分析
- ネットワーク API: POSIX ソケット、WinSock、DNS、SSL/TLS、WinHTTP、WinINet
- ファイル I/O API: POSIX、Windows、C ライブラリ関数
- 暗号 API: OpenSSL、Windows 暗号化、プラットフォーム固有
- 文字列パターン: IP アドレス、URL、ドメイン、ファイルパス、レジストリキー
- リスクレベル分類(LOW/MEDIUM/HIGH)とアクティビティプロファイリング
- セマンティックグラフタブ - ビジュアル知識グラフインターフェース
- N ホップ深度探索付きグラフビュー
- インデックス化された全関数のリストビュー
- サマリーにわたるセマンティック検索
- ワンクリックでの再インデックス化とセキュリティ分析
高度な機能:
- 拡張思考/推論制御 - 品質と速度のトレードオフのために LLM の推論深度を調整
- OpenAI o1/o3/o4、拡張思考対応 Claude、ローカル推論モデルをサポート
- 設定可能な努力レベル: Low(高速)、Medium(バランス)、High(徹底)
- プログラムごとの永続化 - バイナリごとに異なる推論レベルを使用可能
- プロバイダーに依存しない実装(Anthropic、OpenAI、Azure、LiteLLM、LMStudio、Ollama)
- ReAct エージェントモード - 構造化された推論(Think-Act-Observe)を使用した自律調査
- LLM がクエリに基づいて調査手順を提案
- TODO リストによる進捗追跡を伴う体系的なツール実行
- すべての調査手順を示す反復履歴の保存
- 包括的な回答と重要な発見による最終総合
- 正確なメトリクス(反復回数、ツール呼び出し、所要時間)
- MCP 統合 - ツールベースの分析のための Model Context Protocol クライアント
- Ghidra 固有のツール用に GhidrAssistMCP と連携
- 自動関数実行による対話型ツール呼び出し
- SSE(Server-Sent Events)トランスポートをサポート
- 関数呼び出し - LLM がバイナリを自律的にナビゲートし、分析を変更可能
- 関数と変数の名前変更
- アドレスと相互参照へのナビゲーション
- Ghidra コマンドの実行
- アクションタブ - 一括分析の改善を提案および適用
- セキュリティ脆弱性の検出
- コード品質分析
- 自動リファクタリングの提案
- RAG(Retrieval Augmented Generation) - コンテキスト文書によるクエリの拡張
- カスタムドキュメント、エクスプロイトノート、アーキテクチャ参照を追加
- Lucene ベースの全文検索
- クエリへのコンテキスト注入
- RLHF データセット生成 - モデルのファインチューニングのためのフィードバック収集
アーキテクチャ
このプラグインは、モジュール式のサービス指向アーキテクチャを採用しています。
コアサービス:
- クエリモード: 通常クエリ、MCP 拡張クエリ、または完全なエージェント調査
- ReAct オーケストレーター: TODO 追跡と発見事項の蓄積を備えた自律調査ループを管理
- 対話型ツールハンドラー: マルチターンのツール呼び出しセッションを管理
- MCPToolManager: 特殊なツール用に外部 MCP サーバーとインターフェース
Graph-RAG バックエンド:
- BinaryKnowledgeGraph: セマンティック知識のためのハイブリッド SQLite + JGraphT ストレージ
- GraphRAGEngine: 事前計算されたサマリーを使用した LLM 不要のクエリエンジン
- SemanticExtractor: バッチ処理による LLM 駆動の関数要約
- SecurityFeatureExtractor: ネットワーク、ファイル I/O、暗号 API の静的解析
- CommunityDetector: モジュール発見のための Leiden アルゴリズム実装
データレイヤー:
- AnalysisDB: チャット履歴、RLHF フィードバック、知識グラフ用の SQLite データベース
- SchemaMigrationRunner: 透過的なアップグレードのためのバージョン管理されたデータベースマイグレーション
- RAGEngine: カスタムコンテキスト注入のための Lucene ベースのドキュメント検索
UI コンポーネント:
- タブベースのインターフェース: Explain、Query、Actions、Semantic Graph、RAG Management、MCP Servers
- TabController によるサービスオーケストレーション
将来のロードマップ:
- 収集した RLHF データセットを使用したモデルのファインチューニング
- 追加の MCP ツール統合
- エージェント機能の強化、マルチエージェントコラボレーション
- 埋め込みベースの類似性検索
スクリーンショット
Screenshot
https://github.com/user-attachments/assets/bd79474a-c82f-4083-b432-96625fef1387
クイックスタート
- 必要に応じて、バイナリリリース ZIP アーカイブを Ghidra_Install/Extensions/Ghidra ディレクトリにコピーします。
- Ghidra を起動 -> File -> Install Extension -> GhidrAssist を有効化します。
- バイナリをロードし、CodeBrowser を起動します。
- CodeBrowser -> File -> Configure -> Miscellaneous -> GhidrAssist を有効化します。
- CodeBrowser -> Window -> GhidraAssistPlugin。
- RLHF および RAG データベースのパスが環境に適していることを確認します。
- API ホストを希望の API プロバイダーに指定し、API キーを設定します。
- (オプション)Analysis Options タブで、拡張思考をサポートするモデルの Reasoning Effort レベル(None/Low/Medium/High)を設定します。
- Windows メニューの GhidrAssist オプションで GhidrAssist を開き、探索を開始します。
LLM セットアップ
GhidrAssist は、OpenAI v1 互換の任意の API で動作します。セットアップの詳細はプロバイダー固有です - 参考になるリソースをいくつか紹介します。
ローカル LLM プロバイダー:
- LM Studio - GUI で簡単にローカルモデルをホスト
- Ollama - コマンドラインでローカルモデルを管理
- Open-WebUI - ローカルモデル用の Web インターフェース
クラウドプロバイダー:
LiteLLM プロキシ(マルチプロバイダーゲートウェイ):
- LiteLLM - 100 以上の LLM プロバイダー向けの統一 API
- AWS Bedrock、Google Vertex AI、Azure などに対応
- GhidrAssist 設定でプロバイダータイプとして「LiteLLM」を選択
- 適切なメッセージフォーマットのための自動モデルファミリー検出
推奨モデル
エージェントモード用(強力な推論とツール使用が必要):
- クラウド: GPT-5.1、Claude Sonnet 4.5
- ローカル: GPT-OSS、Llama 3.3 70B、DeepSeek-R1 70B、Qwen2.5 72B
拡張思考/推論サポート付きモデル:
- OpenAI: o1-preview、o1-mini、o3-mini、o4-mini、gpt-5(
reasoning_effort パラメータを使用)
- Anthropic: Claude Sonnet 4.5、Claude Opus 4.5、Claude Haiku 4.5、Claude Opus 4.1/4、Claude Sonnet 4(
thinking.budget_tokens パラメータを使用)
- ローカル: Ollama/LMStudio 経由の openai/gpt-oss-20b(努力レベルをサポート)
推論努力レベルのガイドライン:
- Low: クイック分析、最小限の思考トークン(約 5〜10 秒、低コスト)
- Medium: バランスの取れた推論深度(約 15〜30 秒、中程度のコスト)
- High: 深いセキュリティ分析(約 30〜60 秒、2 倍のコスト、脆弱性ハンティングに推奨)
注記: エージェントモードには、強力な関数呼び出しとマルチステップ推論機能を備えたモデルが必要です。小規模なモデルは複雑な調査に苦労する可能性があります。拡張思考はオプションですが、複雑なリバースエンジニアリングタスクの分析品質を大幅に向上させることができます。
ツールベース分析のための GhidrAssistMCP の使用
GhidrAssistMCP は、LLM が Ghidra の解析機能と直接対話できるようにする MCP ツールを提供します。
セットアップ
-
MCP サーバーを起動します
-
GhidrAssist を設定します:
- Tools → GhidrAssist Settings → MCP Servers タブを開きます
- サーバーを追加します:
http://127.0.0.1:8081 を GhidrAssistMCP として、トランスポートタイプ SSE で追加
-
クエリで MCP を有効にします:
- Custom Query タブで「Use MCP」にチェックを入れます
- 自律調査モードでは、オプションで「Agentic」を有効にします
使用モード
通常の MCP クエリ:
- 「Use MCP」チェックボックスを有効にします
- 「現在の関数は何をしますか?」のような質問をします
- LLM はツールを呼び出して、逆コンパイル、相互参照などを取得できます
エージェントモード(推奨):
- 「Use MCP」と「Agentic」の両方のチェックボックスを有効にします
- 「この関数の脆弱性を探す」や「コールグラフを分析する」のような複雑な質問をします
- ReAct エージェントは次のことを行います:
- 調査手順を TODO リストとして提案
- ツールを体系的に実行して情報を収集
- 進捗を追跡し、発見事項を蓄積
- 証拠付きの包括的な回答を総合
クエリの例:
- 「この関数にはどのようなセキュリティ脆弱性がありますか?」
- 「ユーザー入力からこの呼び出しまでのデータフローを追跡してください」
- 「グローバル変数 X を変更するすべての関数を見つけてください」
- 「現在の関数のエラーハンドリングを分析してください」
セマンティックグラフ(Graph-RAG)の使用
Semantic Graph タブは、毎回のクエリで LLM 呼び出しを必要とせずにバイナリ分析結果を探索するための知識グラフインターフェースを提供します。
はじめに
-
バイナリをインデックス化します:
- Semantic Graph タブを開きます
- 「ReIndex Binary」をクリックして構造的関係を抽出します
- 「Semantic Analysis」をクリックして LLM サマリーを生成します(API が必要)
- 進捗はステータスバーに表示されます
-
グラフを探索します:
- リストビュー: サマリーとセキュリティフラグ付きの全インデックス化関数を参照
- グラフビュー: 設定可能な N ホップ深度でコール関係を可視化
- 検索ビュー: サマリーとセキュリティ注釈にわたる全文検索
-
セキュリティ分析:
- 「Security Analysis」をクリックしてセキュリティ関連機能をスキャンします
- 結果には次が含まれます: ネットワーク API、ファイル I/O、暗号使用、文字列パターン
- 検出された機能に基づいてリスクレベル(LOW/MEDIUM/HIGH)が割り当てられます
Explain タブの統合
Explain タブで関数を表示する場合:
- 関数がインデックス化されている場合、事前計算されたサマリーが即座に表示されます
- セキュリティパネルには次が表示されます: リスクレベル、アクティビティプロファイル、使用されている API
- 「Edit」をクリックしてサマリーを変更します(自動上書きから保護されています)
- 「Refresh」を使用して LLM でサマリーを再生成します
利点
- 高速クエリ: 事前計算されたサマリーにより、繰り返しのクエリでの LLM レイテンシがなくなります
- オフライン分析: API 接続なしでインデックス化されたデータを参照
- セキュリティフォーカス: セキュリティ関連のコードパターンの自動検出
- モジュール発見: コミュニティ検出が関連する関数を自動的にグループ化
ホームページ
https://symgraph.ai
最低バージョン
このプラグインには、次の最低バージョンの Ghidra が必要です:
ライセンス
このプラグインは MIT ライセンスの下でリリースされています。