TSALVIA技術メモ

CTFのWriteupや気になったツールについて書いていきます。また、このサイトはGoogle Analyticsを利用しています。

Ghidra インストールガイド

Ghidraについて

2019年3月5日にNSAOSSリバースエンジニアリングツール「Ghidra(ギドラ)」を公開しました。 有料の「IDA Pro」と違い無料でデコンパイルまでしてくれるので、非常に魅力的なツールです。

news.mynavi.jp

今回は、Ghidra の公式サイトを参考にインストール手順を紹介します。 特に下記の2つが参考になりました。

他にも、Ghidraの使い方やプロジェクト共有機能などについてまとめていますので、こちらの記事も参考にしてください。

tsalvia.hatenablog.com

tsalvia.hatenablog.com

最小要件

  • ハードウェア

    • 4 GBのRAM
    • 1 GBの空き容量(Ghidraのインストール用)
    • (デュアルモニター推奨)
  • ソフトウェア

Ghidraのインストール

OpenJDK 11のインストール

  • Windows10の場合OpenJDK11のインストール方法メモ - Qiitaを参考)
    1. JDK Builds from Oracle にアクセスする。
    2. Windows/x64と書いてあるzipファイルをダウンロードする。
    3. ダウンロードしたzipファイルを展開する。
    4. C:\ProgramFiles\Java\ に展開したファイルを移動する。
    5. 環境変数を設定する。
      1. 下記の手順で設定画面を開く。
        「コントロールパネル」→「システムとセキュリティ」→「システム」→「システムの詳細設定」→「環境変数(N)...」
      2. ユーザ環境変数の「Path」を選択し、「編集」をクリックする。
      3. 「新規(N)」をクリックし、「C:\ProgramFiles\Java\jdk-11.0.2\bin」を指定する。
        ※ 環境に合わせてパスを変更してください。
      4. 「OK」を3回押して閉じる。


  • LinuxDebian 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のインストール

  1. Ghidra公式サイトにアクセスし、「Download Ghidra」からダウンロードする。

  2. ダウンロードしたzipファイルを展開する(7-Zipやunzipなど)。

※ Ghidraにインストーラはありません。好きな場所に保存してください。

Ghidraの起動

  1. Ghidraの起動用スクリプトを実行します。

    • Windowsの場合、ghidraRun.batを実行する。
    • Linuxの場合、ghidraRunを実行する。
  2. 利用規約が表示されるので、「I Agree」ボタンを押す。 f:id:tsalvia:20190313015242p:plain

  3. 「Ghidra: NO ACTIVE PROJECT」、「Ghidra Help」、「Tip of the Day」の3つのウインドウが表示される。 「Ghidra Help」と「Tip of the Day」は使わないので、閉じてください。 f:id:tsalvia:20190313015431p:plain

  4. 新しいプロジェクトを作成します。「File」→「New Project..」から作成できます。 f:id:tsalvia:20190313015524p:plain

  5. プロジェクトを共有するかどうかを選択します。今回は共有しないので、「Non-Shared Project」を選択して「Next >>」をクリックします。 f:id:tsalvia:20190313015630p:plain

  6. プロジェクトを管理するディレクトリとプロジェクト名を設定します。今回は、下記の通りに設定しました。

    • Project Directory →「/home/test/GhidraProjects」
      ※ この画面でディレクトリを新しく作成することができないので、あらかじめ作成しておいてください。
    • Project Name →「myProject」 f:id:tsalvia:20190313020309p:plain
  7. 「Finish」をクリックすると、プロジェクトが作成されます。 f:id:tsalvia:20190313022712p:plain

  8. f:id:tsalvia:20190313022758p:plainをクリックすると、「CodeBrowser」が起動します。ここで解析作業が行えます。 f:id:tsalvia:20190313020744p:plain

  9. 解析したいファイルをインポートします。「File」→「Import File...」からインポートできます。 f:id:tsalvia:20190313020824p:plain

  10. 解析したいファイルを選択します。今回は、サンプルとして下記のファイルをコンパイルしたものを指定しました。 gist.github.com f:id:tsalvia:20190313020859p:plain

  11. 「Format」や「Language」などを確認し、「OK」をクリックする。 f:id:tsalvia:20190313020924p:plain

  12. 解析するかどうかを聞かれるので、「Yes」をクリックします。 f:id:tsalvia:20190313020959p:plain

  13. 「Analyze」をクリックすると、解析が開始されます。 f:id:tsalvia:20190313021024p:plain

  14. 指定したファイルのサマリも表示されています。「OK」をクリックすると、閉じることができます。 f:id:tsalvia:20190313021047p:plain

  15. このように逆アセンブルデコンパイルできています。 f:id:tsalvia:20190313021146p:plain

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_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!

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}"

参考になるサイト