IWM Utilities

(2025年5月14日更新)

ダウンロード

準備中

IWM Utilitiesとは

IWM UtilitiesはUNIX系OSおよびWindowsで動作する逆アセンブラ、ダンプ、アンパッカーなどを1つのパッケージにまとめたバイナリ解析ユーティリティです。

ライセンス

GNU GENERAL PUBLIC LICENSE

IWM Utilitiesが動作する環境

動作環境

C89規格に基づくCコンパイラでコンパイルできます。OSやハードウェアには依存しません。IWM Utilitiesが用意している関数の代わりにGTK+-2.0を利用することもできます。

開発環境

GTK+版はXubuntu 20.04、Windows版はWindows 10 Professional 日本語版

alignw32

書式
alignw32 [option...] infile [outfile]
説明
バイナリから32ビットWindows実行可能プログラムを作成して標準出力またはファイルに出力する。
alignw32 sample.exe sample.aaa

32ビットWindows実行可能プログラムまたは任意のバイナリから32ビットWindows実行可能プログラムを作成する。 作成される32ビットWindows実行可能プログラムはファイルアライメントとセクションアライメントが一致する。 入力されたファイルが32ビットWindows実行可能プログラムではないときには、ファイルの先頭にPEヘッダを付加して32ビットWindows実行可能プログラムにする。 このときのデフォルトのセクションアライメントは1000h、ベースアドレスは400000h、エントリーポイントはバイナリの先頭になる。

disw32

書式
disw32 [option...] exefile [asmfile]
説明
32ビットWindows実行可能プログラムを逆アセンブルして標準出力またはファイルに出力する。
disw32 sample.exe sample.asm

標準ではエントリーポイントおよびエクスポートされているサブルーチンをエクスポートテーブルの順番で強制逆アセンブルをする。 強制逆アセンブルでは、たとえそのサブルーチンで逆アセンブルが正常に終了しなくても逆アセンブルを行う。 次にここでサブルーチンと思われるコードの逆アセンブルを試みる。 相対アドレス指定は分岐命令しかありえないので、相対アドレス指定の場合には強制逆アセンブルをする。 即値アドレス指定の場合には(正常終了した場合のみ)逆アセンブルをする。 オフセット値指定の場合にはそのアドレスがまだ未解決のときに、そのアドレスにある値が示すアドレスに対してサブルーチンのcallならば強制逆アセンブル、それ以外ならば逆アセンブルをする。 32ビットの配列指定の場合にはそのアドレスにある値が示すアドレスに対して逆アセンブルが可能な限り繰り返す。 逆アセンブルの優先順位はこの順番であり、同じならばアドレスが小さい方を優先する。 強制逆アセンブルを除いて、逆アセンブルができなかった場合にはデータ参照として扱われる。

データ参照では即値アドレス指定の場合には、そのアドレスが文字列として有効かどうか調べる。 オフセット値指定の場合にはそのアドレスに8~32ビットのデータがあると仮定する。 また32ビットのときにはその値が示すアドレスが文字列として有効かどうか調べる。 32ビットの配列指定の場合には、そのアドレスにある値が示すアドレスが文字列として有効かどうか調べる。 これを文字列が有効な限り繰り返す。

--analyse-linearが有効ならば、アドレスの下位から順番に逆アセンブルを試みる。 逆アセンブルが可能ならば、そのアドレスをエントリーポイントやエクスポートと同様に扱う。

--analyse-refererが有効ならば、アドレスの下位から順番にその32ビットの値が示すアドレスの逆アセンブルを試みる。 逆アセンブルが可能ならば、そのアドレスを32ビットのデータとし、値が示すアドレスをエントリーポイントやエクスポートと同様に扱う。

--analyse-dataが有効ならば、未定義の領域をデータとして扱う。

dumpw32

書式
dumpw32 command... exefile
説明
32ビットWindows実行可能プログラムの情報を表示する。
dumpw32 h sample.exe

32ビットWindows実行可能プログラムの情報を表示する。 長いコマンドはスペースで区切る。 短いコマンドはh、e、i, r, lの5種類ありスペースなしで複数のコマンドを与えることができる。 引数の最後はファイル名になる。

findep

書式
findep command [option...] [file|string...]
説明
バイナリからエントリーポイントを探す。
findep c sample.exe
findep d
findep e sample.exe
findep f sample.exe
findep i sample.exe
findep r call,jmp,mov
findep r n0001

バイナリの解析方法は静的解析と動的解析がある。 静的解析では逆アセンブルを行ってニーモニックを得る。 動的解析では仮想環境で実行してニーモニックを得る。 デフォルトは静的解析である。 静的解析と動的解析は同一のデータベースに登録される。

entryコマンドでは引数で与えられた複数の32ビットWindows実行可能ファイルのエントリーポイントのニーモニックを登録する。 最低でも8ステップのニーモニックが必要であり、最大で24ステップのニーモニックを登録する。

ignoreコマンドでは引数で与えられた複数の32ビットWindows実行可能ファイルのエントリーポイントのニーモニックを無視するために登録する。 登録されたニーモニックはentryコマンドで登録できない。

displayコマンドは登録されているエントリーポイントのニーモニックを表示する。

removeコマンドは登録されているニーモニックを削除する。 引数で先頭から一致した場合には、該当するニーモニックをすべて削除する。

checkコマンドでは引数で与えられた複数の32ビットWindows実行可能ファイルのエントリーポイントのニーモニックが登録されているか確認する。

findコマンドでは引数で与えられたファイルの中に登録されているエントリーポイントがあるか確認する。 ファイルは32ビットWindows実行可能ファイルに限らない。 また引数で2つ目のファイルを指定したときには、見つけたエントリーポイントに変更した32ビットWindows実行可能ファイルを書き出す。 入力ファイルが32ビットWindows実行可能ファイルではないときにはヘッダが先頭に付加される。 --dumpおよび--rawオプションは入力ファイルが32ビットWindows実行可能ファイルか任意のバイナリかを明示的に指定する。 どちらのオプションもないときには自動的に判定する。 デフォルトのセクションアライメントは1000h、ベースアドレスは400000hである。

findコマンドはホームディレクトリの.maid.org/iwmutlis/findep.iniにデータを保存する。 このファイルはWindows XPでは C:\Documents and Settings\<ユーザ名>\Local Settings\maid.org\iwmutlis\findep.ini であり、Windows Vista以降では C:\Users\<ユーザ名>\AppData\Local\maid.org\iwmutlis\findep.ini になる。

findsh

書式
findsh [option...] infile [outfile]
説明
バイナリから最も多くのステップ数の実行が可能なアドレスを探す。
findsh sample.bin

入力ファイルの先頭から順番に静的解析(逆アセンブル)または動的解析(仮想環境による実行)を行い、多くのステップ数が得られたアドレスを順番に表示する。 また出力ファイルを指定したときには、そのファイルに32ビットWindows実行可能ファイルを出力する。 32ビットWindows実行可能ファイルのエントリーポイントは最も多くのステップが得られたアドレスになる。 デフォルトでは静的解析を行う。 仮想環境による実行の最大のステップ数は256である。

UnPacker

書式
unpk [option...] exefile [argument...]
説明
暗号化された32ビットWindows実行可能プログラムを復号する。
findsh sample.bin

仮想環境でプログラムを実行することで、Unpackされたイメージの取得を行う。 実装されていない命令やAPIの呼び出しなど、継続して実行することができなくなったときには、その時点で終了する。 仮想環境のメモリにはレベルという概念があり、プログラムによって書き換えられたメモリのレベルは、そのプログラムコードがあるメモリのレベルよりも1つ大きくなる。 またレベルが高いメモリにプログラムの制御が移ったときには、そのアドレスをオリジナルのエントリーポイントの候補とする。 レベルの初期値は0である。

--dynamicオプションではプログラムが終了するときに確保されているメモリを出力ファイルに含める。

--importオプションが指定されると、プログラムが終了するとき状態でインポートテーブルを再構築して出力ファイルに加える。

--breakオプションではプログラムを終了させるアドレスを16進数で指定する。 「-b 401000」では401000を実行する時に終了する。 また「-b 401000,402000-403000」というようにカンマで区切り複数指定することや、一定の範囲の指定も可能である。

--entryオプションが指定されるときには、新たなエントリーポイントを見つけることができなかったときにはファイルに出力しない。

Flash

cws2fws

書式
cws2fws infile outfile
説明
圧縮されたFlashファイルを展開する。
cws2fws infile.swf outfile.swf

zlibで圧縮されたFlashファイルを展開する。 LZMAで圧縮されたFlashファイルには対応していない。

swfanalyser

書式
swfanalyser swffile
説明
未圧縮のFlashファイルのtag block構造を表示する。
swfanalyser file.swf

未圧縮のFlashファイルのtag block構造を表示する。 圧縮されたFlashファイルは事前に展開しなければならない。

Win32

loaderex

書式
loader [option...] file
説明
シェルコードをメモリに読み込んで実行する。
loader -a 401000 sample.sc

シェルコードを実行可能メモリに読み込んで実行する。 デフォルトでは任意のメモリに配置され、シェルコードの先頭から実行される。 シェルコードの実行前に指定のファイルを開いておくことができる。

tlhlp

書式
tlhlp pid | name [address] [length] [/o outfile]
説明
指定プロセスのメモリまたはモジュールのイメージを保存する。
tlhlp sample.exe 400000 5000
tlhlp 1632 /o sample

プロセスIDまたはプロセスのファイル名を指定する。 アドレスとバイト数を指定したときには、その範囲のメモリの内容をファイルに保存する。 デフォルトではプロセスを作成したモジュールのイメージをファイルに保存する。 保存時に、メモリのイメージとともにインポートテーブルの情報を保存する。 デフォルトではモジュールのファイルの名前で拡張子が「.dmp」にメモリのイメージ、「.imp」にインポートテーブルの情報を保存する。 モジュールのイメージでは、セクションヘッダのファイルオフセットと仮想相対アドレスは一致する。

mki

書式
mki dmpfile impfile zzzfile
説明
メモリのイメージとインポートデーブルの情報からインポートテーブルを再構築する。
mki sample.dmp sample.imp sample.zzz

tlhlpが作成したメモリのイメージとインポートデーブルの情報からインポートテーブルを再構築してファイルに保存する。


戻る