Ghidra Script Managerでできること
Script Managerは、Ghidraに組み込まれたスクリプト検索・実行用のワークスペースです。同じ確認や整理作業を複数のプロジェクトで行う場合に役立ちます。パターンに一致する関数の一覧化、シンボルの一括リネーム、選択データの書き出し、コメント追加、レポート用の証拠収集などが例です。結果は通常のGhidra解析の一部なので、CodeBrowser、Listing、Decompilerで確認してください。
スクリプトはバイナリを理解する代わりにはなりません。対象プロジェクトを決め、最小限の変更だけを行い、書き換えを伴う場合はコピーを作り、変更内容を記録する小さな実験として扱います。静的解析の流れはGhidra初心者チュートリアルで確認でき、このページではその中の自動化に集中します。
調査する権限のあるファイルとシステムだけを扱ってください。Script Managerはプロジェクトをすぐに変更できるため、まずコピーで試します。
- Ghidra付属またはスクリプトディレクトリに保存したスクリプトを探す。
- スクリプトを開き、言語とimportを確認してアクティブなプログラムで実行する。
- プログラムモデルとコンソールで小さく再現可能な変更を行う。
- Script Manager内の自動化とPyGhidraによるネイティブCPython自動化を分けて考える。
Script Managerを開いてスクリプトを探す
プロジェクトを開き、GhidraのツールメニューからScript Managerを起動します。メニュー位置は使用中のツールやリリースで少し変わることがありますが、スクリプト一覧、検索またはフィルター、エディター、実行と更新の操作が表示されます。コピーしたばかりのスクリプトが見つからないときは、コードを疑う前に一覧を更新してください。
最初は読み取り専用またはレポート用のスクリプトを選びます。Runを押す前にヘッダーコメントとimportを読み、開いているプログラム、選択範囲、現在の関数、プロセッサなどの前提条件を確認します。
- 1
練習用プロジェクトを開く
共有しないプロジェクトを作り、調査が許可されたバイナリだけをインポートします。元ファイルとプロジェクトのコピーを変更せずに保管します。
File > New Project > Non-Shared Project - 2
Script Managerを起動する
ツールメニューからスクリプトワークスペースを開き、検索やフィルターで一覧を絞ります。
Window > Script Manager - 3
実行前に確認する
言語、必要なコンテキスト、import、出力先、シンボル・コメント・データ型・メモリへの変更有無を確認します。
ヘッダーとimportを先に読む - 4
実行して検証する
小さな対象で一度実行し、コンソールを読み、ListingまたはDecompilerでプログラムの状態を確認します。
Run > Run Script

停止点を決めた小さなスクリプトを書く
最初のスクリプトは一つの質問だけに答えるようにします。関数数のカウント、接頭辞に一致する名前の表示、定義済み文字列の一覧、現在の選択範囲の報告などです。最初から解析・リネーム・書き出し・整理を組み合わせないでください。範囲の狭いスクリプトほどレビューと再実行が簡単です。
表示されたUIを読み取るのではなく、Ghidraがスクリプトに公開しているプログラムモデルを使います。関数、シンボル、参照、命令、メモリブロックを取得し、短い結果をコンソールに出します。メソッド名はGhidraScript APIリファレンスで確認し、古いフォーラム例をそのまま信頼しないでください。
プログラムを変更するスクリプトでは、変更を出力から追跡できるようにします。前後の件数、関係するアドレスやシンボル名を表示し、想定外の状態では黙って続行せず停止します。これにより繰り返し実行も監査しやすくなります。
コンテキスト確認 -> 1つの対象を調査 -> 結果を表示 -> 変更しない -> 繰り返す対象: practice.bin | 範囲: 現在のプログラム | 書き込み: なし | 結果: 12関数
Java、Python、そしてGhidra 12.1.3の境界
検索ではGhidra scripting、Ghidra scripts、GhidraのPythonが混在しますが、同じ実行環境を指すとは限りません。Script Managerはアプリ内の入口です。GhidraのJava APIを使う共有可能な自動化ではJavaスクリプトが分かりやすい選択です。Pythonの利用可否はGhidraの起動方法とインストールされている統合機能に依存します。
組み込みのスクリプトウィンドウの外でネイティブCPythonを使う場合は、PyGhidraインストールガイドを参照してください。PyGhidraは外部CPythonプロセスをGhidra APIへ接続しますが、Script ManagerのスクリプトはGhidraアプリケーションのコンテキストで動作します。
まずScript Manager内、PyGhidraで起動したGhidraプロセス、外部CPythonプロセスのどこで動いているかを確認します。その後で環境に合った資料と切り分け手順を選びます。
| 目的 | まず使うもの | 理由 |
|---|---|---|
| 開いているプロジェクトで小さな操作をする | Script Manager | 可視化されたコンテキストで素早く確認できる |
| 再利用可能なJava API自動化 | Javaスクリプト | ネイティブAPIモデルに合う |
| ネイティブCPythonのワークフロー | PyGhidra | 外部Pythonプロセス向けに設計されている |
| 大規模で反復可能な処理 | ログ付きスクリプト | 入力・出力・失敗を確認できる |
実際のプロジェクトで使えるScript Managerのパターン
役立つスクリプトは、コンテキストの確立、小さな対象集合の選択、一つの操作、結果の報告という四つの部分で構成されます。コンテキストは現在のプログラム、位置、選択範囲、関数です。選択は名前フィルター、アドレス範囲、メモリブロック、関数属性、参照集合などで明示します。
二回の実行を比較できるよう出力を構造化します。一行の要約だけでなく、アドレスやシンボル名を含む対象ごとの短い行があるとデバッグしやすくなります。遅い場合は一つの関数やメモリブロックで試し、進捗マーカーを出します。
- グローバルな状態を取得する前に現在のプログラムと位置を読む。
- 無制限の走査ではなく、範囲を限定したイテレーターや選択を使う。
- アドレス、シンボル、データ型をListingで確認すべき証拠として扱う。
- 読み取り専用の発見と書き込み操作を分ける。
- 大量のリネーム、型変更、コメント生成の前にプロジェクトのコピーを保存する。
コンテキスト -> 選択 -> 操作 -> 証拠 -> ロールバック計画Ghidraスクリプトのよくある問題を直す
スクリプトが失敗したら、まず正確なメッセージと実行環境を記録します。Ghidraのバージョン、OS、スクリプト言語、プログラムの有無、選択範囲、プロセスの起動方法を残してください。これにより、Script Managerの問題にPyGhidra向けの対処を適用するミスを防げます。
エラーを再現する最小ケースも確認します。特定のプロセッサ、壊れた関数、空の選択範囲だけで失敗するなら、全面的な書き直しより境界条件の確認が必要です。
完全なエラー文、最小再現用のファイルまたはプロジェクトコピー、スクリプトのバージョンを保存します。未知のバイナリや機密解析データを公開Issueに貼らないでください。
| 症状 | 最初に確認 | 安全な次の操作 |
|---|---|---|
| スクリプトが一覧に出ない | 更新、場所、拡張子、スクリプトディレクトリ | 一覧を再読み込みし、可能ならファイルを直接開く |
| Pythonが使えない | Ghidraの起動方法とPyGhidra設定 | Javaを使うかPyGhidraの境界を確認する |
| プログラムや選択範囲がない | アクティブなツール、プロジェクト、プログラム、選択 | プログラムを開いて一つの関数で試す |
| 出力が正しく見えない | アーキテクチャ、アドレス、Listing、型 | スクリプトを変える前にCodeBrowserで仮定を確認する |
安全で再現可能なスクリプト実行手順
一度だけの作業なら手順は短くて構いません。チームや繰り返しの調査では、入力、期待結果、スクリプトの版、Ghidraの版、プロジェクトを書き換えるかどうかを記録します。結果の確認にはGhidra Decompilerガイドが役立ち、インストールガイドではアプリ、JDK、プロジェクト、バックアップを分けて管理する方法を説明しています。
読み取り専用の出力から始め、Listingと照合してから変更を有効にします。前後の件数と、戻すための計画またはプロジェクトコピーを残します。外部入力、テスト、CPython依存を持つ本格的な自動化になったら、PyGhidraや専用ハーネスを検討します。
- 1
準備
Ghidraのバージョンを固定し、プロジェクトのコピーを開いて対象範囲を記録します。
バージョン + 入力 + 範囲 - 2
観察
読み取り専用スクリプトを実行し、アドレス付きの小さな出力例を保存します。
まず読み取り専用 - 3
変更
一つの制御された変更を行い、件数を報告して解析ビューで結果を確認します。
一操作 + 証拠 - 4
保存
スクリプト、メモ、出力、プロジェクトコピーを保存し、実行を比較または戻せるようにします。
スクリプト + ログ + コピー
Ghidra Script Managerに関する質問
Ghidra Script Managerとは何ですか?
アクティブなプロジェクトやプログラムに対してスクリプトを探し、編集し、実行するGhidra内蔵のワークスペースです。小さく確認可能な自動化に向いており、外部CPythonプロセスとは異なります。
Script ManagerでPythonを使えますか?
Pythonが使えるかどうかはGhidraのランタイムと起動方法に依存します。Pythonが利用できないと表示された場合は、内蔵自動化にはJavaを使い、CPythonにはPyGhidraガイドを確認します。
Ghidra scriptingとPyGhidraは同じですか?
いいえ。Script ManagerはGhidra内で動作し、PyGhidraはネイティブCPythonプロセスをGhidra APIへ接続します。インストール方法と切り分けも異なります。
スクリプトが一覧に表示されないのはなぜですか?
一覧を更新し、拡張子、スクリプトディレクトリ、言語やフィルター設定を確認します。ヘッダーとimportが現在のGhidraリリースに合っているかも確認してください。
最初のスクリプトでプロジェクトを変更すべきですか?
まず読み取り専用のレポートから始めるのが安全です。ListingやDecompilerで出力を確認してから、コピー上で件数と戻す計画を記録して変更を試します。