付録.プログラム解説

プログラムは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種類。
  • dot 共通するAPIの推移をGraphvizのdot形式のファイルを標準出力に出力する。
  • txt 共通するAPIの推移を比較しalignによる配列のアライメントを行った結果と互換性のある形式で標準出力に出力する。出力されるファイルはSHIFT_JISの標準テキスト形式。
関連プログラム
apiflw.plmsaconv
./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.plparser.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.plctlflw.plmxroot.pl
./apiflw.pl < w32krg_a.dot > w32krg_a.dot

configure.pl

書式
configure.pl
説明
カレントディレクトリ以下のディレクトリに拡張子が.lstのファイルがある場合、それらを解析の対象としてMakefileを作成する。ida.plmkallow.plconfigure.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.plgeqmkallow.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.plgraph.plparser.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.plparser.plの実行に必要である。DLLファイルにはワイルドカードを指定することができる。
関連プログラム
ctlflw.plparser.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.plalign
./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をカレントディレクトリに作る。
関連プログラム
alignapiflw.plmxrtmk.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.plmxroot.pl
./mxrtmk.pl w32krg_a.dot w32krg_a.api w32krg_a.dot

parser.pl

書式
parser.pl
説明
ida.plの出力結果を標準入力から受け取りAPIのリストを標準出力に出力する。
関連プログラム
alignida.plmkallow.pl
./parser.pl < w32krg_a.lst > w32krg_a.api

グラフ付録-1 プログラムとファイルの生成関係 グラフ付録-1