LoginSignup
2

More than 3 years have passed since last update.

posted at

updated at

Organization

IDA Proで関数の配列を見つけた後に行うべきこと

概要

IDA Pro上で関数ポインタが連続する領域(関数の配列)を見つけた後には、構造体とプロトタイプ宣言を利用。
すると、各関数呼び出し時に引数が自動で識別されるようになり、解析がはかどる。

関数がWin32 APIの場合にはFireEyeのflare-idaStructTyperを利用することでプロトタイプ宣言の自動化も可能。
synbolic-constant.png

設定フロー

  1. 関数の配列から、配列要素の関数呼び出しを見つける
  2. 構造体を定義して配列要素の各関数を定義
  3. 各関数にプロトタイプ宣言を定義【ココをStructTyperで自動化
  4. 引数を定数表示

関数の配列から、配列要素の関数呼び出しを見つける

今回の例では、スタック上に積まれた関数の配列へのポインタをcallしている部分を見つけたところから開始します。
raw-assembly.png

構造体を定義して配列要素の各関数を定義

1) Structureタブで右クリックし、Add struct typeを選択
add-struct.png
2) 構造体名を入力しOKで構造体作成
3) 構造体名を右クリックし、Data選択
4) 追加された要素上でd押下により要素サイズをdd(4 bytes)とする
  ※ 本説明中では32bitのプログラムを解析しているためポインタサイズは4 bytesであるが、
   64bitのプログラムを解析する場合には要素サイズを 8 bytesとすること
data.png
5) 配列の要素数分だけ(3)~(4)を繰り返す
6) 各要素を右クリックし、Renameを選択で関数名を付与
prepared-structure.png
7) 配列要素の関数呼び出し箇所でオペランドを右クリック(※)し、Structure offset->作成した構造体を選択
  ※ 本説明中ではcall dword ptr [eax+4]eaxを右クリック
structure-offset.png

各関数にプロトタイプ宣言を定義【ココをStructTyperで自動化

手動でのプロトロタイプ宣言方法

Structureタブで(6)で付与した関数名を右クリックし、Set type選択、Microsoftのドキュメントで確認した関数定義を設定
set-type.png

自動でのプロトタイプ宣言方法(StructTyper利用)

1) Github上にてfireeye/flare-idaをダウンロード
2) StrutTyperをIDA proへインストール

plugins
To install, copy the contents of the plugins directory in this repository to your %PROGRAMFILES%\IDA\plugins folder.

python
The python directory here can be copied to your %PROGRAMFILES%\IDA\python folder, or you can modify your PYTHONPATH environment variable to include the directory.

3) IDA Pro上部メニューのEdit > Plugins > StructTyperにて作成した構造体を選択

structtyper.png
「手動でのプロトロタイプ宣言方法」と同様の結果が得られる。

プロトタイプ宣言実施後

after-structtyper.png

引数を定数表示

引数の数値を右クリックし、Symbolic constant選択、適切な定数を設定
synbolic-constant.png

最後に

今後も、バイナリ解析用のテクニックを自分のメモとして残していくつもりです。
間違いや改善点がありましたら、ご一報いただけるとありがたいです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2