GhidraのScriptまわりについて
はじめに
先日、NSAがリバースエンジニアリングツールのGhidraを公開した。 OSSであることや、Hex-rays社が高価で販売しているようなデコンパイラがついていることから注目されている。 SREを「Site Reliability Engineering」ではなく「Software Reverse Engineering」としてSRE frameworkを標榜しているのもかっこいい!!!!!
IDAでいうIDAPythonのように、GhidraでもJavaやJythonとしてのPythonで解析に役立つScriptを動かすことができる。
docs/GhidraAPI_javadoc.zip
にAPIリファレンスがあり、それらのAPIを扱える。
この記事では、そんなGhidraのScriptまわりを見ていこうと思う。
Pythonインタプリタ
CodeBrowserのツールバーのWindow->PythonよりPythonインタプリタを起動できる。 APIの挙動をシュッと確認できて便利。
上では、currentProgram.getName()
でバイナリのファイル名を取得し、
askString()
でポップアップを出し、ユーザーからの入力を受け取っている。
Script Manager
Code Browser上の再生ボタンのような▷のボタンを押すとScript Managerが開かれる。
ダウンロードしてきたScriptを読み込むにはScript Directories
のボタンを押して、Scriptがあるディレクトリを追加してあげるとよさそう。
Create New Script
ボタンを選択するとScript Managerの右側に簡易的なエディタが出現する。
Script Manager上でコードを書けるので便利そう。
ここで作成したScriptはデフォルトでは~/ghidra_scripts
に保存される。
参考になりそうなScript
Ghidra/Features/
以下にJavaやPythonのScriptがたくさん置かれている。
Script Mangerを開くとExamplesというディレクトリがあり、ここにあるScriptを読んでいくとチュートリアル代わりになりそう。
ExamplesというディレクトリがあるかのようにUI上では表示されるが、これはカテゴリのようなもののようで、実際には全然違うディレクトリにあるので注意。
$ find . -name ghidra_basics.py ./Ghidra/Features/Python/ghidra_scripts/ghidra_basics.py
便利そうなScript
ghidraninja/ghidra_scriptsというghidraのscriptがいくつか置かれたリポジトリがある。早い。
binwalkを走らせて見つけたアドレスをBookmarkに登録するbinwalk.py
や、暗号に使われる定数を見つけるyara.py
、
swiftの関数名をdemangleしてくれるswift_demangler.py
、stripped Go binaryにシンボルをつけ直すgolang_renamer.py
があり便利そう。