daiki0508'足跡

Ghidraのインストールと基本操作

今回は今話題となっているGhidraのインストール手順や、簡単な基本操作を紹介していきたいと思います。

Ghidraとは

f:id:daiki0508:20200619222352p:plain:w570

Ghidraは、国家安全保障局が開発した無料のオープンソースリバースエンジニアリングツールです。バイナリは2019年3月のRSA会議でリリースされました。ソースは1か月後にGitHubで公開されました。(wikipedia引用)

Ghidraと似たようなツールにIDAというツールが存在します。このツールもGhidraと同じく逆アセンブルが可能なのですが、有償版のIDAProでしかデバッグ機能がありません。
その反面、IDAにも劣る部分もあるのですがGhidraはオープンソースソフトウェアなので様々な方々からプラグイン拡張機能)が配布されると思うのでいずれはIDAより優秀なツールになるのでは……?

Ghidraのインストール要件

  • メモリ4GB推奨
  • 1GBのストレージ容量
  • OracleJDKのインストール

OracleJDKのインストール方法(Ubuntuの場合)

こちらのサイトを参考にしました。

www.sejuku.net


1. アップデートの確認を行う
sudo apt update

2. javaが自分の環境に導入されているか確認する
java --version
この時にjavaのバージョンが表示されている人は既にjavaが導入されているので大丈夫です。
また、下記のメッセージが表示されている人はjavaが導入されていないので、javaを導入しましょう。

Command 'java' not found, but can be installed with:


3. まずJREを導入する。
sudo apt install default-jre
これでJREの導入は終了です。

さて、次にJDKを導入するのですが実はこの時点で既にJDKが導入されている可能性があります。
もう一度、
java --version
を実行しましょう。
ここで(2020年5月時点)

openjdk 11.0.7 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing)

と表示されていればOKです。
最近の環境だとほぼ確実にこの時点でJDKがインストールされるようなので、この時点でJDKがインストールされてない方は参考サイトに書いてあることを実行してみてください。(ここでは説明を省略します)

Ghidraのインストール

それでは実際にGhidraをインストールしていきましょう。

1. [Ghidraの公式サイト](https://ghidra-sre.org/)にアクセス

2. ダウンロードボタンをクリックし、ダウンロード

3. ダウンロードしたZIPファイルを解凍してください

(Ghidraにインストーラは存在しないため、これでGhidraのインストール作業は終了になります。)

Ghidraの起動

1. 端末を起動し先ほど解凍したGhidraのディレクトリに移動してください

2. ghidraRunを実行します。
f:id:daiki0508:20200620155316p:plain:w1000
似たような名前のghidraRun.batもあるので間違えないようにしてください
(ghidraRun.batはwindows用の実行ファイルです)

3. 表示されるラインセンスに同意してください
f:id:daiki0508:20200620155819p:plain:w780

4. 『Ghidra:NO ACTIVE PROJRCT』、『Ghidra HELP』と『Tip of the Day』の3つが開かれます
また、『Ghidra:NO ACTIVE PROJRCT』以外は閉じて構いません。

5. 新しいプロジェクトを作成します
「File」から「New Project」を選択してください
f:id:daiki0508:20200620162131p:plain:w1000

その後、プロジェクトを共有するか聞かれるので今回は「Non-Shared Project」を選択しました。
f:id:daiki0508:20200620162459p:plain:w1000

そしてプロジェクトを作成するディレクトリの場所とプロジェクトの名前を設定します。 f:id:daiki0508:20200620163114p:plain:w1000
これでプロジェクトの作成は終了です。

6. ファイルを解析する
まず初めに、『Project』ウィンドウのドラゴンのアイコンをクリックする。
f:id:daiki0508:20200620163717p:plain:w1000

そうすると解析ウィンドウが表示されるので、上の「File」タブから「Import File」をクリックし解析したいファイルの選択画面を表示させます。

今回コンパイルしたソースコードは以下の通りです。

#include <stdio.h>
int main(void){
     int a, b;
     a = 5;
     b = 10;
     printf("answer_is_%d\n", a + b);
     return 0;
}

f:id:daiki0508:20200620164005p:plain:w1000

読み込ませたいファイルを選択したら、「Select File To Inport」をクリックしてファイルを読み込ませます。
f:id:daiki0508:20200620164659p:plain:w1000

その後、『フォーマット設定』や『言語設定』を設定した後にOKボタンをクリックすることでファイルの読み込みが完了します。
f:id:daiki0508:20200620164939p:plain:w1000

6. 読み込んだファイルを解析する
先ほどのファイルの読み込み作業が終わると直ぐに「Analyze」ウィンドウが開くので「Yes」をクリックしてください。
f:id:daiki0508:20200620165553p:plain:w1000

すると解析オプションの設定を聞かれますが普通は初期設定で構わないので「Analyze」ボタンをクリックしてください。
これで解析作業は終了です。
ここまで終了すると『Decompiler』ウィンドウに元のソースコードに近いものが表示されているのではないでしょうか?
f:id:daiki0508:20200620171208p:plain:w1000

また、以下の記事で実際にGhidraを用いてCTFの問題を解いているので見てみてください。

daiki0508.hatenablog.com