IDAの便利プラグイン3選!!!
これはセキュリティツール系 Advent Calendar 2018 の25日目の記事です。
この記事では便利なIDAのプラグインを3つ紹介したいと思います。
findCrypt
findCryptは暗号に使われる定数をgrepすることで、どんな暗号が使われているか判別するIDAプラグインです。
使い方
IDAにバイナリを読み込ませた状態で、メニューバーのFile->Script file...
からfindcrypt.pyを実行することで使えます。
実行すると以下のようにOutput windowにスキャンの結果が出力されます。以下の例ではRijndaelで用いられている定数が見つかっていますね。
また、見つけた定数に名前をつけてくれるので、ディスアセンブル結果が表示されているIDA View-A
上からも定数を確認しやすいです。
シュッと用いられている暗号がわかって便利ですね。定数を使わないようにカスタムされた暗号が用いられている場合はこのプラグインでは見つけられないので、自力でがんばる必要があります。
LazyIDA
LazyIDAはMake your IDA Lazy!
を目指しているプラグインです。
いくつか機能がありますが、データをC/C++の配列やPythonのlistに変換してくれる機能が便利です。
使い方
IDAのplugins
ディレクトリ以下にLazyIDA.pyを配置すると使えるようになります。
IDAの画面上で左クリックすると、Convert
というメニューが追加されていると思います。ここから好きなフォーマットを選択し変換することができます。
ここでは、先ほどfindCryptで見つけたRijndaelの定数をLazyIDAでPythonのlistに変換してみます。
変換した結果はOutput windowに出力され、これをコピペしてPythonスクリプトから扱うことができます。
これはエンコードされたデータをデコードするときや、暗号化を解くときのスクリプトを書くときに便利です。
KeyPatch
IDAにはx86/x64を対象にしたアセンブラが組み込まれていますが、他のアーキテクチャを対象としたものはありません。 Keypatchは軽量なmulti-platform, multi-architecture assembler frameworkである Keystone – The Ultimate Assemblerを使って、IDA上で様々なアーキテクチャへのアセンブルを実現し、x86/x64以外のバイナリへパッチを当てやすくするプラグインです。
このプラグインはHex-Raysが行っているPlug-In Contest 2016で3位になっています。
使い方
Keystoneをインストールし、
IDAのplugins
ディレクトリ以下にkeypatch.pyを配置すると使えます。
macOS上のIDAPythonは/usr/bin/python
を使っているため、普段macOSのデフォルトではないPython(pyenvでインストールしたPythonなど)を使っている場合は、
IDAPythonからpipでインストールしたライブラリを使えません。
その場合はpipでインストールしたライブラリをIDAのディレクトリの中にコピーする必要があります。
わたしはpyenvでインストールしたPythonを使っているので以下のようなコマンドになりました。パスは適宜変更してください。
$ sudo cp -r ~/.pyenv/versions/2.7.15/lib/python2.7/site-packages/keystone /Applications/IDA\ Pro\ 7.2/ida.app/Contents/MacOS/python/
インストールに成功していると、IDAの画面上で左クリックして出るメニューにKeypatch
が追加されています。ここからPatcherを選択することでKeyPatchのWindowが出現します。
ここではMOV R0, R3
というARMのアセンブリをMOV R0, 1
に変更しています。
以下はパッチを当てたあとの様子です。コメントにパッチを当てる前のアセンブリが残されていて親切ですね。
このプラグインを使わずに、現状のIDAでx86/x64以外のバイナリに対しパッチを当てるには機械語のパッチを当てることになります。 このプラグインのおかげでARMなどのバイナリにパッチを当てる作業は楽になりました。