IDA Free版でホットキーの割当てをする

バイナリの静的解析にはよくIDAを使っている。
最新版を使えると良いのだけど、お値段が10数万とかしてしまい、またデコンパイラまで全部揃えると50万円じゃ足りないので、Free版を使っている。

前回のエントリで「IDAがFree版ではバイナリの書き換え機能がない」と書いていたが、設定ファイルを見ていたところ、実はそんなことはなかったので、それについて書くことにする。

設定ファイルを書き換える

IDAは、起動時に設定ファイルを読み、カーソルの形や表示項目の有無、ホットキーの設定などを読み込んでいる。
このファイルをいじることで、前回できないと言っていた機能の表示や、ホットキーの割当て変更ができる。
IDAは海外で作られているソフトということもあり、ホットキーがUSキーボード向けになっている。
しかもFree版ではホットキーの割当て用のUIが用意されていない。

今回は、設定ファイルを変更することで、これらの設定を変更してみる。
設定ファイルは、Windows7の場合は以下にあるものを編集する。

C:\Program Files (x86)\IDA Free\cfg\idagui.cfg

また、この中でさらにインクルードファイルとして

C:\Program Files (x86)\IDA Free\cfg\idauserg.cfg

を読み込んでいるので、これを書き換えても良い。
自分の環境ではもともと idauserg.cfg が存在していなかったので、 idagui.cfg を編集した。
なお、書き換えに失敗するとIDAが起動しないので、戻せるように元ファイルはバックアップを取っておくと良い。

idagui.cfg

idagui.cfg ファイルを開くと、中身はわかりやすい記載となっている。
ただし変数名だけでは何だかわからないものもあるので、これは自分で試してみて動作を確認する。
以下は idagui.cfg の一部。
f:id:f_rin:20140810155040p:plain

すべて試したわけではないけど、いくつか設定をいじってみたので紹介する。

バイナリ書き換え機能

何もいじっていない状態だと、IDA Free版ではバイナリを書き換えるための表示が出てこない。
Demo版だと [Edit] > [Patch program] > [Change byte] があるのにFree版だとできないと思っていたのはこのためだ。
f:id:f_rin:20140810155746p:plain

設定ファイルを見ていくと、以下のような記述がある。

DISPLAY_PATCH_SUBMENU    = NO           // Display the Edit,Patch submenu

ここを書き換えてみる。

//DISPLAY_PATCH_SUBMENU    = NO           // Display the Edit,Patch submenu
DISPLAY_PATCH_SUBMENU    = YES           // 20140810 Edit.

これでIDAを再起動してみると、
f:id:f_rin:20140810160620p:plain
Free版でもバイナリの書き換えができるようになっている。

さらに、ホットキーの設定を見ていくと、以下のような記載もある。

"PatchByte"             =       0

変数名から、上記機能のホットキーが無効になっていると推測できるので、以下のようにしてみる。

//"PatchByte"             =       0
"PatchByte"             =       "Shift-B"   // 20140810 Edit.

すると、 "Shift + B" を押すだけでパッチダイアログが開くようになった。
f:id:f_rin:20140810161137p:plain

これで他のバイナリエディタを一緒に開かなくて良くなるので、だいぶ大きな収穫だ。
せっかくなので、ひととおり設定を見ながら、自分が便利だなーと思うところを変えてみた。

Viewの色付け

解析が途中までいったときや、気になる箇所にはマーカーを付けたいけど、今までコメントアウトとかで対応していた。
[Edit] > [Other] > [Color instruction]
からやることができるけど、これもキーボード操作だけでできるようにしてみる。

//"ColorInstruction"      =       0
"ColorInstruction"      =       "Shift-C"    // 20140810 Edit.

これで、"Shift + C" で好きな色のマーカーを付けられる。
f:id:f_rin:20140810162027p:plain

配列の定義

arrayの定義をするホットキーも設定してあるが、Numpad の "*" を入力する必要があり、ノートPCからはやりにくい。
どうせなので Numpadでない "*" で定義できるように直す。

//"MakeArray"             =       "Numpad*"
"MakeArray"             =       "*"           // 20140810 Edit.

これでarrayの定義を開けるようになった。
f:id:f_rin:20140810165126p:plain

ビット操作

// commented out because the french version of windows nt with sp4 complains
// if you want, you may uncomment it - anyway it doesn't make big difference
"ChangeSign"          =       "Shift+-"      // 20140810 uncomment.

符号変更した値を確認したい場合がもしあったら確認できる。
f:id:f_rin:20140810235322p:plain

その他ホットキー設定

グラフビューを新規に開く。

//"WindowOpen"            =       0
"WindowOpen"            =       "Shift-W"    // 20140810 Edit.

選択しているニーモニックと同じ命令が書いてある次の箇所にジャンプする。

//"SearchNext"            =       0
"SearchNext"            =       "Shift-S"    // 20140810 Edit.


コマンド覚えるのが大変になりそうなので、ホットキーの編集はこの辺で終わりにした。

読み込むファイルの拡張子制限を増やす

たとえばelfファイルで "*.out" の拡張子ファイルを読み込みたくても、ファイル選択ダイアログ起動時はデフォルトで読めない。
f:id:f_rin:20140810174133p:plain

デフォルトで読ませたい拡張子があるときは、以下のように拡張子を追加してやると読めるようになる。

// Identifier, Name,                                     Extension(s)
FILE_EXTENSIONS = {

  ・・・

  ELF_BIN,     "ELF files",                                  "*.out"

  ・・・
}

もしくは、デフォルトですべての拡張子のファイルを読めるようにしてしまっても良いかもしれない。

// 20140810 Change seq.
DEFAULT_FILE_FILTER = { ALL KNOWN IDB EXE DLL DRV OBJLIB ELF_BIN JAVA NET DRV_NETWARE GEOS EXE_FLEX EXE_RT11 ARM EPOC SPSX EXE_PALM EXE_XBOX EXE_N64 EXE_SDC HEX MAS SBN RAW_BIN ROM_BIN DUMP_BIN }

f:id:f_rin:20140810174953p:plain

もともと記載してあったこと以上のことはしなかったけど、便利機能をすぐに呼び出せるようになったのは良かった。
もしFree版を使っていてキー操作やホットキーに不満を持っていたら、これを機に設定を変えてみるのも良いと思う。