Ghidra インストールガイド
Ghidraについて
2019年3月5日にNSAがOSSのリバースエンジニアリングツール「Ghidra(ギドラ)」を公開しました。 有料の「IDA Pro」と違い無料でデコンパイルまでしてくれるので、非常に魅力的なツールです。
今回は、Ghidra の公式サイトを参考にインストール手順を紹介します。 特に下記の2つが参考になりました。
他にも、Ghidraの使い方やプロジェクト共有機能などについてまとめていますので、こちらの記事も参考にしてください。
最小要件
ハードウェア
- 4 GBのRAM
- 1 GBの空き容量(Ghidraのインストール用)
- (デュアルモニター推奨)
ソフトウェア
- Java Development Kit 11(JDK 11)
※ JDK Builds from Oracle が配布しているOpenJDK 推奨
- Java Development Kit 11(JDK 11)
Ghidraのインストール
OpenJDK 11のインストール
- Windows10の場合 (OpenJDK11のインストール方法メモ - Qiitaを参考)
- JDK Builds from Oracle にアクセスする。
- Windows/x64と書いてあるzipファイルをダウンロードする。
- ダウンロードしたzipファイルを展開する。
- C:\ProgramFiles\Java\ に展開したファイルを移動する。
- 環境変数を設定する。
- Linux(Debian 9)の場合
$ wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz $ tar xvf openjdk-11.0.2_linux-x64_bin.tar.gz $ sudo mkdir /opt/java/ $ sudo mv jdk-11.0.2 /opt/java/ $ echo 'JAVA_HOME=/opt/java/jdk-11.0.2' >> ~/.bashrc $ echo 'PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc $ source ~/.bashrc
Ghidraのインストール
Ghidra公式サイトにアクセスし、「Download Ghidra」からダウンロードする。
ダウンロードしたzipファイルを展開する(7-Zipやunzipなど)。
※ Ghidraにインストーラはありません。好きな場所に保存してください。
Ghidraの起動
Ghidraの起動用スクリプトを実行します。
利用規約が表示されるので、「I Agree」ボタンを押す。
「Ghidra: NO ACTIVE PROJECT」、「Ghidra Help」、「Tip of the Day」の3つのウインドウが表示される。 「Ghidra Help」と「Tip of the Day」は使わないので、閉じてください。
新しいプロジェクトを作成します。「File」→「New Project..」から作成できます。
プロジェクトを共有するかどうかを選択します。今回は共有しないので、「Non-Shared Project」を選択して「Next >>」をクリックします。
プロジェクトを管理するディレクトリとプロジェクト名を設定します。今回は、下記の通りに設定しました。
- Project Directory →「/home/test/GhidraProjects」
※ この画面でディレクトリを新しく作成することができないので、あらかじめ作成しておいてください。 - Project Name →「myProject」
- Project Directory →「/home/test/GhidraProjects」
「Finish」をクリックすると、プロジェクトが作成されます。
をクリックすると、「CodeBrowser」が起動します。ここで解析作業が行えます。
解析したいファイルをインポートします。「File」→「Import File...」からインポートできます。
解析したいファイルを選択します。今回は、サンプルとして下記のファイルをコンパイルしたものを指定しました。 gist.github.com
「Format」や「Language」などを確認し、「OK」をクリックする。
解析するかどうかを聞かれるので、「Yes」をクリックします。
「Analyze」をクリックすると、解析が開始されます。
指定したファイルのサマリも表示されています。「OK」をクリックすると、閉じることができます。
Ghidraデバッグモードにおける注意点
※ こちらの内容は、Ghidra v9.0.1で修正されました。
Ghidra: Release Notes より
Basic Infrastructure. Running Ghidra in debug mode no longer opens remotely accessible ports by default. (Issue #6)
Ghidraをデバッグモードで起動すると、JDWP用のデバッグポート(18001番)が開かれます。 ただし、デフォルトでローカルだけでなく、インターネットにも公開状態となってしまいます。 通常、インターネットに公開する必要はないので、閉じておきましょう。 既にJDWPのデバッグポートを利用したPoCも公開されています。
Ghidra opens up JDWP in debug mode listening on port 18001, you can use it to execute code remotely 🤦♂️.. to fix change line 150 of support/launch.sh from * to 127.0.0.1 https://t.co/J3E8q5edC7
— Hacker Fantastic (@hackerfantastic) 2019年3月6日
修正方法
- Windows系の場合
ghidra_9.0\support\launch.bat 140行目
set VMARG_LIST=!VMARG_LIST! -Xrunjdwp:transport=dt_socket,server=y,suspend=!SUSPEND!,address=*:!DEBUG_PORT!
↓ 下記のように書き換える
set VMARG_LIST=!VMARG_LIST! -Xrunjdwp:transport=dt_socket,server=y,suspend=!SUSPEND!,address=127.0.0.1:!DEBUG_PORT!
- Linux系の場合
ghidra_9.0\support\launch.sh 150行目
VMARG_LIST+=" -Xrunjdwp:transport=dt_socket,server=y,suspend=${SUSPEND},address=*:${DEBUG_PORT}"
↓ 下記のように書き換える
VMARG_LIST+=" -Xrunjdwp:transport=dt_socket,server=y,suspend=${SUSPEND},address=127.0.0.1:${DEBUG_PORT}"
参考になるサイト
Ghidraの使い方をまとめた記事
JDWPのデバッグポートがインターネットに公開されている件について