付録.プログラム解説
プログラムはUbuntu 7.10で動作確認を行っている。ただしmkallow.plはWindows 2000 日本語版(SP4)およびVisual C++ 6.0 日本語版(SP6)、ActivePerl 5.8.8 Build 817で動作を確認している。
afcomp.pl
- 書式
- afcomp.pl COMMAND DOTFILE...
- 説明
- 複数のapiflw.plの出力結果(DOTFILE...)を読み込みコマンド(COMMAND)によりデータを標準出力に出力する。コマンドは下記の2種類。
- 関連プログラム
- apiflw.pl、msaconv
- 例
- ./afcomp.pl dot w32krg_a.dot w32krg_b.dot w32krg_c.dot w32krg_e.dot w32krg_g.dot w32krg_n.dot w32krg_p.dot w32krg_q.dot w32krg_r.dot w32krg_s.dot w32krg_t.dot w32krg_z.dot w32krgab.dot > w32krg.dot
- ./afcomp.pl txt w32krg_a.dot w32krg_b.dot w32krg_c.dot w32krg_e.dot w32krg_g.dot w32krg_n.dot w32krg_p.dot w32krg_q.dot w32krg_r.dot w32krg_s.dot w32krg_t.dot w32krg_z.dot w32krgab.dot > w32krg.txt
align
- 書式
- align APILIST...
- 説明
- 複数のAPIのリスト(APILIST...)を読み込み配列のアライメントを行った結果を標準出力に出力する。出力されるファイルはSHIFT_JISの標準テキスト形式。
- コンパイル
- cc align.c -o align `pkg-config --cflags --libs gtk+-2.0`
- 関連プログラム
- mxroot.pl、parser.pl
- 例
- ./align w32krg_a.api w32krg_b.api w32krg_c.api w32krg_e.api w32krg_g.api w32krg_n.api w32krg_p.api w32krg_q.api w32krg_r.api w32krg_s.api w32krg_t.api w32krg_z.api w32krgab.api > w32krg.txt
apiflw.pl
- 書式
- apiflw.pl
- 説明
- ctlflw.plの出力結果を標準入力から受け取りAPIの推移を示すグラフを標準出力に出力する。
- 関連プログラム
- afcomp.pl、ctlflw.pl、mxroot.pl
- 例
- ./apiflw.pl < w32krg_a.dot > w32krg_a.dot
configure.pl
- 書式
- configure.pl
- 説明
- カレントディレクトリ以下のディレクトリに拡張子が.lstのファイルがある場合、それらを解析の対象としてMakefileを作成する。ida.plとmkallow.plはconfigure.plの対象とならない。このMakefileでは関数の呼び出し関係の解析、制御フロー解析、API推移の解析、最長パスに関する検討を行う。またwebディレクトリにあるHTML形式のファイルにそれらの出力結果を反映させ、Web公開用のディレクトリを構成する。実験に必要なファイルを納めたアーカイブも構成する。なおディレクトリにpublicという名前のファイルがあるときには、そのディレクトリの拡張子が.lstのファイルをWeb公開用のディレクトリおよびアーカイブに含める。
- 例
- ./configure.pl
- make
- make web
- make dist
- make clean
ctlflw.pl
- 書式
- ctlflw.pl
- 説明
- ida.plの出力結果を標準入力から受け取りGraphvizのdot形式で制御フロー解析の結果を標準出力に出力する。関数単位でサブグラフが作られる。
- 関連プログラム
- apiflw.pl、geq、mkallow.pl
- 例
- ./ctlflw.pl < w32krg_a.lst > w32krg_a.dot
geq
- 書式
- geq COMMAND DOTFILE...
- 説明
- 複数のctlflw.plの出力結果(DOTFILE...)を読み込み完全に一致するのか関数単位で比較を行う。一致した関数の比率から距離を求める。コマンド(COMMAND)は下記の2種類。
- html 各検体間の距離を示すHTML形式のテーブルを標準出力に出力する。
- dot 各検体間の距離を示すGraphvizのdot形式のファイルを標準出力に出力する。
- コンパイル
- cc geq.c -o geq `pkg-config --cflags --libs gtk+-2.0`
- 関連プログラム
- ctlflw.pl
- 例
- ./geq html w32krg_a.dot w32krg_b.dot w32krg_c.dot w32krg_e.dot w32krg_g.dot w32krg_n.dot w32krg_p.dot w32krg_q.dot w32krg_r.dot w32krg_s.dot w32krg_t.dot w32krg_z.dot w32krgab.dot > w32krg.dot
- ./geq dot w32krg_a.dot w32krg_b.dot w32krg_c.dot w32krg_e.dot w32krg_g.dot w32krg_n.dot w32krg_p.dot w32krg_q.dot w32krg_r.dot w32krg_s.dot w32krg_t.dot w32krg_z.dot w32krgab.dot > w32krg.dot
gm
- 書式
- gm DOTFILE1 DOTFILE2
- 説明
- 2つのctlflw.plの出力結果(DOTFILE1、DOTFILE2)を読み込みGraphvizのdot形式で共通部分を示すグラフを標準出力に出力する。このプログラムは十分に高速化を試みてはいるが、実際のコンピュータウイルスの制御フロー解析の結果を読み込んで処理するには遅すぎる。
- コンパイル
- cc gm.c -o gm
- 関連プログラム
- ctlflw.pl
- 例
- ./gm graph-4-2-1.dot graph-4-2-2.dot > graph-4-2-3.dot
graph.pl
- 書式
- graph.pl
- 説明
- ida.plの出力結果を標準入力から受け取りGraphvizのdot形式で関数の呼び出し関係を示したグラフを標準出力に出力する。
- 関連プログラム
- ida.pl
- 例
- ./graph.pl < w32krg_a.lst > w32krg_a.dot
html.pl
- 書式
- html.pl ID=FILE...
- 説明
- HTML形式の出力結果をwebディレクトリにあるHTML形式のファイルに反映させる。このプログラムはWeb公開用の文書の作成を容易にするためのものである。
ida.pl
- 書式
- ida.pl EXEFILE
- 説明
- IDA Proの出力結果を標準入力から受け取り数値を追加するなどの加工を行い標準出力に出力する。逆アセンブルの対象となった実行可能ファイル(EXEFILE)が必要となる。
- 関連プログラム
- ctlflw.pl、graph.pl、parser.pl
- 例
- ./ida.pl w32krg_a.exe < w32krg_a.l > w32krg_a.lst
mkallow.pl
- 書式
- mkallow.pl DLLFILE...
- 説明
- 指定されたWindowsのDLLファイル(DLLFILE...)からエクスポートされているAPIを収集してカレントディレクトリのallow.txtに出力する。mkallow.plはMicrosoftの開発環境に含まれるdumpbin.exeを必要とする(ゆえに実行環境はWindowsに限る)。allow.txtはctlflw.plとparser.plの実行に必要である。DLLファイルにはワイルドカードを指定することができる。
- 関連プログラム
- ctlflw.pl、parser.pl
- 例
- mkallow.pl advapi32.dll commctrl.dll commdlg.dll gdi32.dll kernel32.dll msvcrt.dll ntdll.dll ole32.dll oleaut32.dll rasapi32.dll rasdlg.dll shell32.dll user32.dll version.dll winmm.dll winsock.dll
msaconv
- 書式
- msaconv COMMAND APILIST OUTFILE
- 説明
- alignによってアライメントされた結果(APILIST)を読み込みコマンド(COMMAND)に基づきデータを出力(OUTFILE)する。コマンドは下記の3種類。
- png PNG形式の画像を出力する。
- html 各検体間の距離を示すHTML形式のテーブルを出力する。
- dot 各検体間の距離を示すGraphvizのdot形式のファイルを出力する。
- コンパイル
- cc msaconv.c -o msaconv `pkg-config --cflags --libs gtk+-2.0`
- 関連プログラム
- afcomp.pl、align
- 例
- ./msaconv png w32krg.txt w32krg.png
- ./msaconv html w32krg.txt w32krg.html
- ./msaconv dot w32krg.txt w32krg.dot
mxroot.pl
- 書式
- mxroot.pl DOTFILE APILIST
- 説明
- apiflw.plの出力結果(DOTFILE)を読み込み最長のAPI推移を示すパスをparser.plによるAPIのリストと互換性のある形式でファイル(APILIST)に出力する。このプログラムはGLPKを子プロセスとして起動し、作業用ファイルとしてmxroot.modとmxroot.txtをカレントディレクトリに作る。
- 関連プログラム
- align、apiflw.pl、mxrtmk.pl
- 例
- ./mxroot.pl w32krg_a.dot w32krg_a.api
mxrtmk.pl
- 書式
- mxrtmk.pl DOTFILE APILIST OUTFILE
- 説明
- apiflw.plの出力結果(DOTFILE)とmxroot.plで作られた最長パスを示すAPIリスト(APILIST)を読み込み、apiflw.plの出力結果に最長パスを示す。結果はGraphvizのdot形式のファイル(OUTFILE)に出力する。
- 関連プログラム
- apiflw.pl、mxroot.pl
- 例
- ./mxrtmk.pl w32krg_a.dot w32krg_a.api w32krg_a.dot
