Ghidra ヘッドレスアナライザーとは何か、いつ使うか
Ghidra ヘッドレスアナライザーは、デスクトップ画面を開かずに解析を実行するコマンドラインの入口です。プロジェクトを新しく作成または補完し、インポート済みまたは既存のプログラムを解析し、サンプルフォルダー、ファームウェアのトリアージ、定期レポート、管理されたビルドパイプライン向けにGUIを使わないスクリプトを実行できます。
ヘッドレス実行はリモートサーバーではなく、すべての判断を自動化する機能でもありません。Ghidraのインストール、プロジェクトの場所、ローダー、アナライザー、スクリプト、通常のプロジェクト規則に依存します。リリース、入力セット、オプション、出力プロジェクト、ログを記録し、解析は許可を得た素材だけに限定してください。
利用できるオプションは、公式ドキュメントとインストールしたリリースに付属するsupport/analyzeHeadlessランチャーで確認します。このページは安全な作業手順を説明するもので、インストール済みリリースのヘルプを置き換えるものではありません。
インストール、プロジェクト、入力ファイルを準備する
公式Ghidra ZIPと、対応する64ビットJDKから始めます。このサイトで確認したリリースは2026年8月18日公開のGhidra 12.1.3で、アーカイブのsupport/にランチャーが含まれています。デスクトップ版が起動しない場合はGhidraインストールガイドを確認してください。JDKの不備や展開漏れは、ヘッドレス実行も失敗させます。
アプリケーション、プロジェクト、入力・レポート用フォルダーは分けて管理します。調査中にライブプロジェクトをバッチジョブから編集したり、確認前に既知の正常なコピーを上書きしたりしないでください。スクリプトやアナライザー設定を試すときは、新しいプロジェクト名を使います。
- 1
ランチャーを確認する
Ghidraのインストール先で、使用するOSのランチャーが存在し、ヘルプを表示できることを確認します。Windowsはバッチファイル、macOSとLinuxはシェルランチャーを使います。
support/analyzeHeadless.bat または support/analyzeHeadless - 2
書き込み可能なプロジェクト領域を選ぶ
インポートしたプログラム、データベース、キャッシュ、レポートを置ける容量を確保します。ファイルロックや同時書き込みを調べる間は、同期フォルダーを避けます。
D:\analysis\projects /srv/ghidra/projects - 3
入力セットを記録する
ファイル名、ハッシュ、想定アーキテクチャー、収集日を記録します。中身を記録しないディレクトリパスは、再現可能な入力とは言えません。
samples/firmware-a.bin samples/firmware-b.bin - 4
処理前にバックアップする
シンボルやデータ型の変更、プログラムの削除、保存を行うスクリプトを実行する前に、プロジェクトをコピーします。
ProjectName.gpr + ProjectName.rep/

-import と -process の使い分け
Ghidra ヘッドレスアナライザーで最初に決めるのは、入力ファイルからプロジェクトを作成または補完するのか、すでにプロジェクトにあるプログラムを開いて処理するのかです。ファイルやディレクトリをプロジェクトのプログラムにしたい場合は-importを使います。プログラムがすでにプロジェクトにある場合は-processを使います。
インターネット上の例に両方が書かれているからといって、両方のモードを追加しないでください。まずは説明できる小さなジョブを作り、必要な場合だけローダーやプロセッサーを指定し、成功したコマンドをバージョン管理したスクリプトに保存します。
| 目的 | モード | 代表的な入力 | 確認する点 |
|---|---|---|---|
| バイナリからプロジェクトを作る | -import | ファイルまたはディレクトリ | ローダー、言語、プロジェクト名 |
| 既存プログラムを解析する | -process | 既存プロジェクト | プログラム名とプロジェクトのコピー |
| インポート中にスクリプトを実行する | -import + -postScript | 新しい入力セット | スクリプトのパスと保存結果 |
| プロジェクト内のディレクトリを処理する | -process + -recursive | 既存プロジェクトのツリー | 範囲と実行ごとのログ |
cd C:\ghidra_12.1.3_PUBLIC\support
analyzeHeadless.bat D:\analysis\projects HeadlessDemo -import D:\analysis\samples\demo.exe./support/analyzeHeadless /srv/ghidra/projects HeadlessDemo -process demo.exe再現性を失わずにスクリプトを使う
ヘッドレスジョブは、解析状態を小さく確認しやすい結果へ変換するスクリプトと組み合わせると便利です。pre-scriptでプロジェクト操作を準備し、post-scriptで解析済みプログラムを調べてレポートを書けます。関数、文字列、インポート、メタデータの一項目を出力するような狭いスクリプトは、大きなプロジェクトを黙って改名するスクリプトよりテストしやすくなります。
スクリプトはバージョン管理したディレクトリに置き、-scriptPathで渡します。役割を明確にするため-preScriptと-postScriptを使い、対応するログも保存します。Ghidraの外でCPythonを使う場合はPyGhidraガイドを参照してください。二つの自動化境界は関連しますが、同じランタイムではありません。
- 読み取り専用またはレポート作成の作業と、許可を得た小さなサンプルから始める。
- スクリプトのリビジョンをコマンドとGhidraのリリースの横に固定する。
- スクリプトがプロジェクトデータを保存する必要がなければ、レポートはプロジェクト外に書く。
- 空の結果、存在しない項目、未対応のプログラム種別、2回目の実行をテストする。
- シンボルやデータ型の変更を受け入れる前に、バックアップしたプロジェクトと比較する。

ディレクトリ処理、ログ、CIジョブ
ディレクトリを扱う場合、ファイルを一つのプロジェクトにまとめるか、分離したプロジェクトを使うか決めます。一つのプロジェクトならファイル間の確認が便利ですが、分離すれば意図しない混在を減らせます。-recursiveは、入れ子のフォルダーまで範囲に含める場合だけ使います。広すぎるパスは想定外のデータをインポートする可能性があります。
コマンド、Ghidraのリリース、Javaのバージョン、入力マニフェスト、スクリプトのリビジョン、終了ステータス、ログ、プロジェクトパス、想定外の出力ファイルを記録します。CIではログとレポートを保存し、ランチャーやpost-scriptがエラーを報告したら失敗にします。プロセスが正常終了しても、期待した関数や文字列がすべて見つかった証拠にはなりません。
入力ディレクトリ、プロジェクトプロファイル、拡張機能、スクリプトのリビジョン、Ghidraのリリースが変わると、同じコマンドでも結論が変わることがあります。これらの境界をレポートの横に記録してください。
./support/analyzeHeadless /srv/ghidra/projects BatchSet -import /srv/ghidra/samples -recursive -scriptPath /srv/ghidra/scripts -postScript export_summary.pyrelease=12.1.3 input_manifest=sha256.csv script=export_summary.py@abc123 project=BatchSet log=run-2026-09-16.log結果を読み、Ghidraで検証する
ヘッドレス実行後、プロジェクトを開く前に終了ステータスとログを確認します。ローダーのメッセージ、選択された言語やコンパイラー、解析の完了、スクリプト例外、スキップされたファイル、書き込み失敗を見ます。その後、GUIでコピーを開き、Listing、参照、Decompiler、シンボルなどで少数の結果を確認します。Ghidra検索ガイドとDecompilerガイドも役立ちます。
レポートは出力物であって、それだけで証拠になるわけではありません。スクリプトが文字列を見つけなかった場合は、言語、範囲、APIオブジェクトを確認します。入力マニフェストと正確な実行記録を保存したプロジェクトデータと一緒に残してください。
| 症状 | 最初の確認 | 安全な次の手順 |
|---|---|---|
| プログラムが表示されない | インポートモード、パス、ローダー | 新しいプロジェクト名で1ファイルを実行する |
| スクリプトが見つからない | スクリプトのパスとファイル名 | 絶対パスのスクリプトディレクトリと最小スクリプトを使う |
| 解析が途中で終わる | ログ、タイムアウト、メモリ、アナライザーのメッセージ | 1サンプルで再実行し、プロジェクトのコピーと比較する |
| GUIと出力が違う | リリース、言語、オプション、スクリプトの段階 | 同じプログラムと設定を両方で確認する |

ヘッドレスアナライザー、Script Manager、PyGhidraの違い
ヘッドレスアナライザーはCLIジョブの境界です。Script Managerは、表示中のGhidraアプリケーション内でスクリプトを実行します。PyGhidraは外部のCPythonプロセスをGhidra APIへ接続します。同じ調査で組み合わせることはできますが、実行環境は異なります。
1つのプログラムを画面で確認するならGUI、繰り返し可能なインポートやプロジェクト処理ならヘッドレスアナライザー、外部Pythonプロセスが中心ならPyGhidraを選びます。
| ツールの境界 | 向いている用途 | 主な注意点 |
|---|---|---|
| ヘッドレスアナライザー | CLIによる一括インポートとプロジェクト処理 | プロジェクト、リリース、スクリプト、ログを記録する |
| Script Manager | 表示中のアプリ内スクリプト | 現在のコンテキストとプロジェクトに依存する |
| PyGhidra | 外部CPythonによる自動化 | PythonとGhidraの互換性を確認する |
Ghidra ヘッドレスアナライザー FAQ
GhidraのanalyzeHeadlessはどこにありますか?
Ghidraのインストール先にあるsupport/ディレクトリにあります。WindowsはanalyzeHeadless.bat、LinuxとmacOSはシェルランチャーを使います。インストールしたリリースに対応するランチャーを選んでください。
-import と -process の違いは何ですか?
ファイルやディレクトリからプロジェクトを作成または補完する場合は-import、プログラムがすでにプロジェクトにあり、それを処理する場合は-processを使います。
GUIなしで多くのファイルを解析できますか?
できます。ヘッドレスアナライザーはディレクトリをインポートまたは処理でき、-recursiveなどのオプションで対象範囲を広げられます。最初は許可を得た小さなセットで試し、確認できるよう入力マニフェストを残してください。
analyzeHeadlessでスクリプトを実行できますか?
できます。インストールしたリリースが対応するscript path、pre-script、post-scriptのオプションを使います。スクリプトをバージョン管理し、コピーしたプロジェクトでテストし、ログとレポートをコマンド記録の横に保存します。
ヘッドレスアナライザーにはGhidraプロジェクトが必要ですか?
ランチャーにはプロジェクトの場所と名前を指定します。インポートジョブはプロジェクトデータを作成または補完でき、processジョブは既存のプログラムを前提にします。プロジェクトのパスは書き込み可能にし、アプリケーション本体とは分けてください。
ヘッドレスアナライザーはPyGhidraと同じですか?
同じではありません。ヘッドレスアナライザーはインポート、プロジェクト処理、Ghidraスクリプト向けのCLIランチャーです。PyGhidraは外部CPythonプロセスをGhidra APIへ接続します。必要な自動化の境界に合う方を選んでください。