とある情報工学科の大学生活

--/--/--(--) --:--:--

[スポンサー広告] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2011/08/01(月) 18:57:14

[セキュリティキャンプ] 【入門】初めてのIDAPro体験記

課題及び予習においてIDAProを使う必要があります。
しかしIDAProについて検索しても日本語の情報が少なすぎて操作が良く分かりませんでした。
そのため簡易ながら昨日数時間いじって分かったことをメモしておきたいと思います。

環境
OS:Windows7 32bit
プロセッサ:Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz 2.67GHz
IDAPro:Freeware Version5.0

解析プログラム

#include <stdio.h>

int main(void) {
int a = 3;
int b = 4;
int c = a+b;

printf("%d\n",c);

return 0;
}

をEclipce(MinGW)でコンパイルしたもの(test.exeファイル)

解析
起動

About(IDAProのバージョン情報が表示される
↓Okを押す
IDAPro1.jpg
↓Goボタンを押す
Drag a file here to disassembleと表示される
↓test.exeをドラック&ドロップし、Okを押し続ける
IDAPro2.jpg
逆アセンブルが終了したものと思われる。
↓メニューの「View」→「Graphs」→「Function calls」を押す
IDAProFunctionGraph.jpg
この画面が別窓で出てくる。sub_○○はおそらくサブルーチンのことを指す。
この短いプログラムでこれだけ多くのサブルーチンが呼ばれているのはおそらくコンソールアプリケーションでもWindowsの何かしらが呼ばれているからだと思われる(LinuxをGdbで解析したこと時はこんなことは無かったのに)。
このプログラムではprintfサブルーチンを読んでおり、printfサブルーチンを呼んでいるのはsub_4012D0だけだので、おそらくこの部分がプログラムの実態に関係する部分だと思われる。
↓Graphを最小化して元の画面に戻る
IDAPro2.jpg
startから実態に関係するサブルーチン「sub_4012D0」を見るために上からたどっていく。
↓「sub_401020」と表示されている部分をダブルクリックすると「sub_401020」のアセンブリがみれる。
IDAProView1.jpg
↓同様に「sub_4012D0」をダブルクリック
IDAProView2.jpg
sub_4012D0の解析ができる。正直良く分からないが
mov [ebp+var_4], 3により[ebp+var_4]に3が格納されたことが分かる。
mov [ebp+var_8], 4により[ebp+var 8]に4が格納されたことが分かる。
mov eax,[ebp+var_8]によりeaxに[ebp+var 8]の値4が格納されたことが分かる。
add eaxm[ebp+var_4]によりeaxに[ebp+var_4]の値3が加算されたことが分かる。
call printfによりおそらく加算により得られた値7が出力されたと思われる。(printfはeaxの値を出力?)

以上のような手順でIDAProによってプログラムを逆アセンブルして解析できるのだと思う。
またアセンブリを全て一度に表示したい場合はIDA-Viewのタブ画面で「右クリック」→「Text Viewをクリック」で可能。「Text View」モードの方が個人的には見やすいと思いました。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。