Ghidra:バイナリの操作と注釈付け
バイナリをインポートし、逆アセンブルコードとデコンパイルコードを操作して、変数名を変更しコメントを追加します。
「Ghidra:バイナリの操作と注釈付け」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
Ghidraとは何ですか
Ghidraは、NSAが開発し、2019年に一般公開した無料のオープンソースリバースエンジニアリングツールです。Linux、macOS、Windowsに対応し、逆アセンブル、デコンパイル、スクリプト、共同分析の機能を提供します。
バイナリの読み込み
Ghidraでバイナリを開く手順は次のとおりです。
- 新しいプロジェクトを作成します
- ファイルをインポートします(File → Import File)
- 自動解析が実行されます。完了するまで待ちます(関数、文字列、データ型を認識します)
- CodeBrowserが開き、逆アセンブリとデコンパイラのビューが表示されます
Ghidraのインターフェース
Ghidraの主なウィンドウは次のとおりです。
- Program Trees — セクション(.text、.data、.plt)
- Symbol Tree — 関数、ラベル、インポート、エクスポート
- Listing — 逆アセンブリビュー
- Decompiler — pseudo-Cによる再構成
- Functions — 識別されたすべての関数の一覧
エントリポイントへの移動
プログラムのエントリポイントまたはmain()から解析を開始します。
Gを押して、アドレスまたはシンボルを「Go To」で指定します- Symbol Treeで「main」を検索します
- 任意の関数をダブルクリックして移動します
デコンパイラ出力の読み方
Ghidraのデコンパイラは、アセンブリよりも読みやすいpseudo-Cを生成します。完全に正確とは限らず、変数名は一般的な名前(param_1、local_10)になり、制御フローが不自然に見えることもあります。それでも、コードが何をしているのかを理解するのに十分な形でロジックを明らかにしてくれます。
変数と関数の名前変更
アノテーションによって、コードが読みやすくなります。
- 変数を右クリックして「Rename」を選択します(または
Lを押します) - 関数を右クリックして「Rename Function」を選択します
;(行末コメント)または/*...*/形式でコメントを追加します
バイナリについて理解が深まるにつれて名前を変更していくことで、コンテキストを積み上げられます。
文字列の特定
文字列は、プログラムの目的を理解するうえで非常に役立ちます。
- Window → Defined Stringsですべての文字列定数を表示します
- 文字列をクリックすると、コード内での使用箇所に移動します
- エラーメッセージ、ファイルパス、URL、レジストリキーから機能を推測できます
クロスリファレンス(XREF)
XREFsは、関数や変数がどこから呼び出されているか、またはどこで使用されているかを示します。任意のシンボル上でXを押すと、すべての参照を確認できます。これは、ユーザー入力が関数に入る箇所や、セキュリティチェックが行われる箇所を見つけるうえで重要です。
Ghidraによるスクリプティング
GhidraにはPython/JavaスクリプティングAPIがあります。
# Python script to find all calls to strcpy:
from ghidra.program.model.symbol import RefType
for ref in currentProgram.getReferenceManager().getReferencesTo(toAddr(0x401234)):
print(ref.getFromAddress())Ghidraによるマルウェア解析
マルウェアを解析する場合は、次の点を確認します。
- アンチ解析の手法(アンチデバッグ、コード難読化)を特定します
- ネットワーク通信に関係する関数(socket、connect、WinInet)を探します
- 暗号関数を特定します(AESのS-box定数として0x63、0x7c...などを探します)
- 復号された文字列からC2 URLを抽出します
GhidraとIDA Proの比較
GhidraとIDA Proの比較:
- Ghidra:無料、オープンソース、スクリプト対応、優れたデコンパイラ
- IDA Pro:業界標準、解析が高速、プラグインエコシステムが充実、高価($$$)
- ほとんどの作業ではGhidraで十分に対応できます。専門的なマルウェア解析ラボではIDAが使われます
クイックチェック:Ghidra
特定の関数や変数を呼び出している、または参照しているバイナリ内のすべての場所を表示するGhidraの機能はどれですか。
レッスンのまとめ
Ghidraは、NSAが開発した無料のREツールで、逆アセンブリ、デコンパイル、スクリプティングに対応しています。主なワークフローは、バイナリを読み込み、自動解析を実行し、main()に移動し、デコンパイラでロジックを確認し、変数名を変更し、XREFを使ってデータフローを追跡し、文字列を検索してコンテキストを把握することです。アノテーションを繰り返し行うことで理解が深まり、スクリプティングによって反復的な解析作業を自動化できます。
よくある質問
「Ghidra:バイナリの操作と注釈付け」レッスンは無料ですか?
はい。「Ghidra:バイナリの操作と注釈付け」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「Ghidra:バイナリの操作と注釈付け」で何を学びますか?
バイナリをインポートし、逆アセンブルコードとデコンパイルコードを操作して、変数名を変更しコメントを追加します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Ghidra:バイナリの操作と注釈付け」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Ghidra:バイナリの操作と注釈付け
- リバースエンジニアリングのためのx86/x64アセンブリ基礎
- GDBとpwndbgによる動的解析
- 難読化解除とアンチ解析技法