2026 年 8 月 18 日、NSA は GitHub に Ghidra 12.1.3 を出した。取るべき資産は ghidra_12.1.3_PUBLIC_20260817.zip(約 543 MB)で、SHA-256 はリリース注記にある。「Ghidra 2026 チュートリアル」で詰まる人の大半は、JDK を間違え、Source Code を落とし、権限のないバイナリで練習する——この三点が重なる。ここでは導入、デコンパイル、デバッグ、バイナリ解析まで通す。対象は自分がコンパイルしたプログラム、会社が明示したサンプル、隔離ラボの研究材料だけだ。
Ghidra は「元ソースを復元する魔法」ではない。NSA のオープンソース逆向フレームワークで、ディスアセンブル、デコンパイル、クロス参照、スクリプト、デバッガが一つの Project に載る。2026 年でも学ぶ理由は無料・クロスプラットフォームで、構造を読む力は商用ツールと同格だからだ。12.1 系は実行環境を JDK 21 に固定し、デバッガには Python 3.9–3.14 が要る。公式の Getting Started と What's New in Ghidra 12.1 を先に読み、三年前のスクリーンショットを信じない。
2026 年に生のアセンブリ窓だけを見ない理由
セキュリティ研究とファームウェア切り分けで時間が消えるのは「命令が見えること」ではなく、関数名を正し、型を戻し、xref で誰が誰を呼ぶかを辿ることだ。Ghidra の価値はそこにある。Listing はバイト、Decompiler は読める疑似 C、カーソルは同期する。変数名を変えれば C 側もすぐ言い換える。付箋より一桁速い。
もう一つは工程管理だ。Project にファイル、解析フラグ、ブックマーク、コメントが残る。同じ CLI を二人で見るなら、スクリーンショットを送り合うより工程を共有する。12.1 には Headless、PyGhidra、BSim もあるが、本稿は GUI の本線だけ書く。
公式の床は RAM 4 GB、インストール 1 GB、デュアルモニタ推奨。「起動する」下限だ。数十 MB のファームを全解析するなら 16 GB、ブラウザと争わないなら 32 GB。見積もりの感覚は OpenClaw 2.0 VPS実測:Linuxクラウドに必要なCPU・メモリ・ディスク と同じで、道具は違っても「長時間解析は CPU より先にメモリが死ぬ」。
導入:先に JDK 21、次に公式 ZIP。ソース包は取らない
Ghidra 12.1 は 64-bit JDK 21 が必須。17 や 11 しか無いと起動スクリプトが 21 を探し、無ければ Java home を聞いてくる。Windows / macOS / Linux 共通。無料 LTS として公式が挙げるのは Adoptium Temurin と Amazon Corretto。Adoptium Temurin のリリース頁 から 21 を入れ、java -version が 21 を出し、JAVA_HOME が JDK ルート(bin の親)を指すことを確認する。
Releases の Assets から多プラットフォーム ZIP(ghidra_12.1.3_PUBLIC_20260817.zip)を取る。「Source Code (zip)」は Gradle で自分で組む人向けだ。12.1.3 の SHA-256 は 93a5d11a9ad510622acaaf908c556a7b9b764d338e78a7567f3689bf5081fd54。手元でハッシュし、違えば消して取り直す。
shasum -a 256 ghidra_12.1.3_PUBLIC_20260817.zip
# 期待値: 93a5d11a9ad510622acaaf908c556a7b9b764d338e78a7567f3689bf5081fd54
書き込める場所に展開する。同期ロックのかかるクラウドドライブ直下は避ける。起動は ./ghidraRun か ghidraRun.bat。デバッガと PyGhidra には Python 3.9–3.14 が要る。macOS の LLDB はだいたい Xcode 経由、Linux の GDB は 13 以上かつ埋め込み Python 3 が望ましい。ディストロのパッケージは遅れがちなので、学習は GitHub 公式 ZIP で揃える。
初回:Project、Import、Analyze を連打しない
File → New Project。個人なら Non-Shared で足りる。入れるのは自分でコンパイルした実行ファイルか、権限のあるサンプル。ウィザードが当てる形式(ELF / Mach-O / PE)と言語(x86:LE:64、AARCH64:LE:64)を確認する。Apple Silicon の Mach-O は AARCH64、x86_64 Linux で組んだ物は x86-64。言語を間違えると関数境界が一日中壊れる。
CodeBrowser に入ると Auto Analysis を聞かれる。教材の小さなバイナリは既定でよい。巨大ファームは重い解析を切って、まず一画面の疑似 C を出す。進捗バーが終わる前に改名しない。後段の解析器に上書きされる。
終わったら座標系を作る。Imports / Exports、Defined Strings、Functions。ライブラリ、エラー文字列と URL、自動解析がメインパスを細切れにしていないか。この三枚を先に見る方が、entry に飛び込むより速い。
デコンパイラ:左 Listing、右の疑似 C、中央は名前
命令をクリックすれば C が追随し、変数をクリックすれば Listing がハイライトする。この往復が基本技だ。コメントも型も見えないチャットに疑似 C を貼るより信頼できる。
出力の質は渡した型で決まる。初期値の undefined4 と char * は下書きだ。L で型、; でコメント、関数名はどちらのペインでも変えられる。FUN_100003f80 を parse_config_line にすれば xref のラベルが全部変わる。名前は仮説で、次の xref に殴られて直すのが仕事だ。
型はヘッダとデバッグ記号から借りる。自分のビルドなら DWARF / PDB を残す。記号が剥がれた配布物は、インポートと文字列とドメイン知識で構造体を足す。Data Type Manager に十分使う価値がある。設定ブロックを構造体にすれば、オフセットの山がフィールド名になる。
| 見たいもの | 窓 | やってはいけないこと |
|---|---|---|
| 実バイトと分岐 | Listing | 番地を見ずに C を信じる |
| 関数の仕事 | Decompiler | 無名の FUN_* を結論にする |
| 呼び出し元 | References / Function Graph | 一つのスタックで全体を推測 |
| 依存ライブラリ | Imports / Exports | 動的ロード名を無視 |
デバッグ:さっき組んだプログラムを先に繋ぐ
12.1 の Debugger は Python 経由でホストのデバッガに接続する。Linux は GDB、macOS は LLDB(多くは Xcode)、Windows は WinDbg 系。Python 3.9–3.14 と protobuf などが要る。Ghidra がデバッガを置き換えるのではなく、GDB/LLDB のセッションを Trace に同期し、静的な疑似 C と生きたレジスタを並べる。
合法な初回は、五分前に clang / gcc した小さなプログラム。対応 launcher を選び、自分が書いた関数で止め、レジスタとスタックが仮説と合うか見る。違えば型と名前を直してもう一度走る。
任意プロセスに付ける道具だと思わない。本番機、同僚のセッション、書面の許可が無い環境には繋がない。未知サンプルはホストのデスクトップで走らせない。スナップショット、VM、専用機が先。切り離し方の感覚は OpenClaw 2.0 を VPS で常時起動して安全か?7日間の権限・SSH・APIキー点検 と同じで、対象は違っても「日常と実験を分ける」は一条の規律だ。
バイナリ解析:勘ではなく手順
解析してよい見知らぬバイナリには順番を固定する。一、形式・アーキテクチャ・記号の有無。二、文字列とインポートでネットワーク・ファイル・暗号ライブラリに印。三、main / 入口から主経路の関数だけ命名。四、熱い関数で Function Graph——エラー処理か業務分岐か。五、設定解析らしい関数に構造体を足して疑似 C を読み直す。
xref が時間を買う。怪しいグローバルを見ても書き手を推測しない。参照一覧を開く。書く側はたいていパーサ、読む側は利用者。両端に名前を付ければ呼び出し連鎖が顔を出す。ブックマークは「明日戻る番地」、コメントは仮説と反証で、TODO の山にしない。
スクリプトは繰り返し向けだ。一括改名、文字列パターンのタグ、関数一覧の書き出し。最初は同梱スクリプトで十分。Headless は自分の成果物の CI 向き:リリースごとに取り込み、重要関数が残っているか、インポート表に不必要なライブラリが増えていないかを見る。攻撃演習ではなく衛生だ。
よくある失敗:Java、メモリ、フォント、遠隔画面、日常アカウント
起動失敗の最多は Java。Homebrew の java が 25、社内イメージが 17、Ghidra 12.1 は 21 だけ欲しい。JAVA_HOME で Temurin 21 を固定する。次はヒープ。大型ファームで UI が凍る。起動スクリプト横の設定でヒープを上げ、ブラウザのデザインタブを閉じる。
HiDPI と遠隔デスクトップ(クラウド Mac の VNC 含む)はフォントと分割を崩す。二時間読めるサイズにする。工程を iCloud / OneDrive に置かない。同期衝突が .rep を裂く。ローカルディスクに置き、自分で固めてバックアップする。
衛生:個人クラウド、本番 SSH、会社の永久鍵を分析機に載せない。Ghidra 自体より、入れたサンプルと同時にログインしているものが危ない。専用クラウド Mac の意味は、電源オフで隔離し、スナップショットで戻し、膝の上のノートを日常専用のままにすることだ。
FAQ
Ghidra 12.1.3 は Apple Silicon で動くか
動く。Java アプリなので aarch64 の JDK 21 を入れる。Mach-O は言語を AARCH64 にし、デバッグは LLDB。ネイティブが合わないと Getting Started どおり配布物から組み直す。
12.1.3 必須か。11.x ではだめか
古い工程は開けても、実行環境は移すべきだ。12.1 は JDK 21 必須で、12.1.3 はそれ以前の問題を直している。新しい機械は現行公開版から始める。
デコンパイルした C をソースとして提出できるか
できない。推測の疑似 C で、型もエイリアスも最適化された制御流も嘘をつく。読み補助であって、コンパイル可能な復元ではない。結論は Listing と動的な振る舞いとセット。
マルウェアを解析してよいか
合法な研究文脈と隔離環境があればよい。日常 OS で未知サンプルを開かない。管理されていない共有にも置かない。本稿は悪用や配布の手順を書かない。
Ghidra 12 · 隔離解析機
デコンパイルを日常ノートから出す
Ghidra 12.1 は JDK 21 を欲し、大型ファイルはメモリを食い、デバッグには清潔な LLDB/Python が要る。ブラウザ設定、社用メール、同期クライアントと同じディスクに載せない。クラウド Mac mini は低消費でスナップショットでき、Apple Silicon の帯域は夜通し解析に耐える。電源を切れば、サンプルは膝の上に残らない。