Immunity Debuggerを使ってみる
Immunity Debuggerとは
高機能なGUIユーザーモードデバッガ。Pythonによる機能拡張が可能。
以下のリンクからダウンロードできる(はず)
http://debugger.immunityinc.com/
メインインタフェース
Immunity Debuggerのメインインタフェースは次の5つの区画で構成されている。
①プロセスのアセンブリコードを表示するウィンドウ
②各種レジスタを表示するウィンドウ
③メモリの16進ダンプを表示するウィンドウ
④スタックを表示するウィンドウ
⑤コマンドバー
PyCommandとは
Immunity Debuggerの内部で動かせるPythonスクリプト。ここでは、簡単なPyCommandを作成して実際に動作させてみる。
PyCommandは次のコードのように、必ず一つのパラメータ(PyCommandに渡される引数のリスト)を受け取り、文字列を返す必要がある。
import immlib def main(args): imm = immlib.Debugger() return "PyCommand Executed!"
PyCommandを実行させるためには、Immunity Debuggerのインストールディレクトリ中のPyCommandsというディレクトリにスクリプトを保存し、Immunity Debuggerのコマンドバーで感嘆符に続けてスクリプト名を入力(!<スクリプト名>
)する。このとき、拡張子は入力しない。
簡単なPyCommandを作成してみる
環境
・Windows 10 Pro 64bit版
・Immunity Debugger v1.85
・Python 2.7.9
デバッグ対象
・notepad.exe
Immunity Debuggerは64bitアプリケーションには対応していないため、ここではC:\Windows\SysWOW64*1\notepad.exeをデバッグ対象とする。
モジュールntdll.dll内の関数を列挙するスクリプトは次のように書ける。
import immlib def main(args): imm = immlib.Debugger() #immlib.Debuggerをインスタンス化 ntdll = imm.getModule("ntdll.dll") #モジュールオブジェクトを返す addr_ntdll = ntdll.getBaseAddress() #ベースアドレスを取得 imm.log("================================") imm.log("Address of ntdll.dll : 0x%08x" % addr_ntdll) imm.log("================================") func_list = imm.getAllFunctions(addr_ntdll) #関数のアドレスのリストを返す for func in func_list: imm.log("0x%08x" % func) return "F I N I S H !!!"
Immunity DebuggerのAPIリファレンスについてはインストールディレクトリ中のDocumentation\Refを参照のこと。
出力結果はLogウィンドウ([View] -> [Log]
)に出力される。
*1:Windows 32bit On Windows 64bit