Ghidra is 何
Ghidra は NSA が開発したリバースエンジニアリングツールです。
"ギドラ" と読むそうです。名前といい、開発元といい、とても強そうですね(何が)。
インストールと最初の起動
Mac の場合は Homebrew でインストールできます。
brew install java # JDK がインストール済みの場合は不要
brew install ghidra
このままでも起動はするのですが、途中 GateKeeperでエラーになります。
issueは提案されていていくつか回避策はあるようですが、いまいちな気がしたので以下のようにしました。
xattr -d com.apple.quarantine /usr/local/Caskroom/ghidra/9.2.1,20201215//ghidra_9.2.1_PUBLIC/GPL/DemanglerGnu/os/osx64/demangler_gnu_v2_33_1
xattr -d com.apple.quarantine /usr/local/Caskroom/ghidra/9.2.1,20201215/ghidra_9.2.1_PUBLIC/Ghidra/Features/Decompiler/os/osx64/decompile
ghidraRun
コマンドで起動します。
初回の起動時のみ JDK HOME を聞かれます。Homebrew でインストールした場合は /usr/local/opt/openjdk/libexec/openjdk.jdk/Contents/Home
になります。
$ ghidraRun
******************************************************************
JDK 11+ (64-bit) could not be found and must be manually chosen!
******************************************************************
Enter path to JDK home directory: /usr/local/opt/openjdk/libexec/openjdk.jdk/Contents/Home
Saved changes to /Users/user/.ghidra/.ghidra_9.2.1_PUBLIC/java_home.save
Hello World!
Hello World!を解析してみましょう。
適当に対象のプログラムを作っておきます。
$ cat main.c
#include <stdio.h>
int main(void) {
printf("Hello World!");
return 0;
}
$ cc main.c
Ghidra を起動して、プロジェクトを作成します。
- File > New Project
- Non-Shared Project
- Project Directory/Name は適当に。
File > Import File からこのプロジェクトに先程の a.out を登録します。
でもって登録した a.out をダブルクリックするとコードの解析画面になります。
左に3つ並んでいるパネルの Symbol Tree パネルで、Functions > Entry をクリックすると、main 関数にジャンプできます。