VPSSpark ブログ
← 開発日記へ戻る

Ghidra 2026 チュートリアル:NSA オープンソース逆向ツールの導入、デコンパイル、デバッグ、バイナリ解析

サーバーメモ · 2026.09.18 · 約 14 分

よくある検索:Ghidra 2026 · Ghidra 12.1.3 · デコンパイル · バイナリ解析 · NSA

暗い画面のノートPCに HTML とコードエディタが表示されている
デコンパイラは仮説。先にバイトと型を確認してから「復元」と呼ぶ。

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 を先に読み、三年前のスクリーンショットを信じない。

12.1.3
公開版 2026-08-18
JDK 21
64-bit、PATH か JAVA_HOME
4 GB+
公式下限。大型は 16 GB
ghidraRun の前に赤線を引く
デコンパイルとデバッグは許可された範囲だけ。商用ソフトのクラック、ライセンス回避、他人のシステムへの無断接続は対象外。権限が曖昧なら止める。未知サンプルは隔離機で扱い、銀行と社用メールが入った日常ノートでは開かない。

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 より先にメモリが死ぬ」。

Ghidra 2026 の四段階:導入、インポートと解析、デコンパイル、デバッグとクロス参照
順番を逆にしない。公式 ZIP を検証し、自分のプログラムを入れ、構造を読み、デバッグは権限のある対象だけ。

導入:先に 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。手元でハッシュし、違えば消して取り直す。

公式パッケージの検証(macOS / Linux)
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 で揃える。

ネイティブ部品が OS に合わないとき
配布 ZIP には少なくとも一系統の Decompiler ネイティブが入る。古い glibc や未収録プラットフォームでは Getting Started の手順でネイティブを再構築する。デコンパイラが空白、GNU Demangler が死ぬ、という症状はだいたいこれだ。

初回: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キー点検 と同じで、対象は違っても「日常と実験を分ける」は一条の規律だ。

デバッガが起きないとき先に見る三点
Python が 3.9–3.14 か。GDB/LLDB が同じ Python を埋め込んでいるか。ターミナルの python3 に入れた包を、別マイナーの埋め込み処理系が読んでいないか。Debugger Notes は率直で、コネクタが「どの包をどの機械へ」と教える。

バイナリ解析:勘ではなく手順

解析してよい見知らぬバイナリには順番を固定する。一、形式・アーキテクチャ・記号の有無。二、文字列とインポートでネットワーク・ファイル・暗号ライブラリに印。三、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 の意味は、電源オフで隔離し、スナップショットで戻し、膝の上のノートを日常専用のままにすることだ。

専用クラウド Mac が安くなるとき
解析が夜通し、サンプルが日常ディスクに触れてはいけない、JDK 21 と Ghidra 12 と Xcode/LLDB だけの清潔な機械が欲しい——家庭の共有機も社用ノートも不向きだ。日単位の Apple Silicon は、「今回はホームを書かない」と賭けるより安い。

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 の帯域は夜通し解析に耐える。電源を切れば、サンプルは膝の上に残らない。

クラウド Mac のプランを見る →

期間限定

Ghidra 専用の隔離 Mac が必要ですか?

JDK 21 · Ghidra 12 · 専用クラウド Mac · 日/月

ホームへ
期間限定 プランを見る