GhidraのScriptまわりについて

はじめに

先日、NSAリバースエンジニアリングツールのGhidraを公開した。 OSSであることや、Hex-rays社が高価で販売しているようなデコンパイラがついていることから注目されている。 SREを「Site Reliability Engineering」ではなく「Software Reverse Engineering」としてSRE frameworkを標榜しているのもかっこいい!!!!!

IDAでいうIDAPythonのように、GhidraでもJavaJythonとしてのPythonで解析に役立つScriptを動かすことができる。 docs/GhidraAPI_javadoc.zipAPIリファレンスがあり、それらのAPIを扱える。 この記事では、そんなGhidraのScriptまわりを見ていこうと思う。

Pythonインタプリタ

CodeBrowserのツールバーのWindow->PythonよりPythonインタプリタを起動できる。 APIの挙動をシュッと確認できて便利。

f:id:TAKEmaru:20190319195839p:plain

上では、currentProgram.getName()でバイナリのファイル名を取得し、 askString()でポップアップを出し、ユーザーからの入力を受け取っている。

Script Manager

Code Browser上の再生ボタンのような▷のボタンを押すとScript Managerが開かれる。

f:id:TAKEmaru:20190318201824p:plain

ダウンロードしてきたScriptを読み込むにはScript Directoriesのボタンを押して、Scriptがあるディレクトリを追加してあげるとよさそう。

f:id:TAKEmaru:20190318204530p:plain

Create New Scriptボタンを選択するとScript Managerの右側に簡易的なエディタが出現する。 Script Manager上でコードを書けるので便利そう。 ここで作成したScriptはデフォルトでは~/ghidra_scriptsに保存される。

f:id:TAKEmaru:20190318204951p:plain

参考になりそうなScript

Ghidra/Features/以下にJavaPythonのScriptがたくさん置かれている。

Script Mangerを開くとExamplesというディレクトリがあり、ここにあるScriptを読んでいくとチュートリアル代わりになりそう。

f:id:TAKEmaru:20190319194623p:plain

ExamplesというディレクトリがあるかのようにUI上では表示されるが、これはカテゴリのようなもののようで、実際には全然違うディレクトリにあるので注意。

$ find . -name ghidra_basics.py
./Ghidra/Features/Python/ghidra_scripts/ghidra_basics.py

便利そうなScript

ghidraninja/ghidra_scriptsというghidraのscriptがいくつか置かれたリポジトリがある。早い。

github.com

binwalkを走らせて見つけたアドレスをBookmarkに登録するbinwalk.pyや、暗号に使われる定数を見つけるyara.py、 swiftの関数名をdemangleしてくれるswift_demangler.py、stripped Go binaryにシンボルをつけ直すgolang_renamer.pyがあり便利そう。