SENTO NO OBOEGAKI

技術よりのメモやポエムを書いていきます。

MENU

Immunity Debuggerを使ってみる

Immunity Debuggerとは

高機能なGUIユーザーモードデバッガ。Pythonによる機能拡張が可能。

以下のリンクからダウンロードできる(はず)

http://debugger.immunityinc.com/

 

メインインタフェース

 Immunity Debuggerのメインインタフェースは次の5つの区画で構成されている。

f:id:sentoneibisu:20151003114146p:plain

①プロセスのアセンブリコードを表示するウィンドウ

②各種レジスタを表示するウィンドウ

③メモリの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])に出力される。

f:id:sentoneibisu:20151003032116p:plain

*1:Windows 32bit On Windows 64bit