Immunity Debugger學習筆記

Image_060

圖1::Immunity主界面python

注意事項:最下方的PyCommands窗格既能夠執行調試命令也能夠執行python腳步文件。數組

一、PyCommands學習

在 Immunity 中執行 Python 的方法即便用 PyCommands。PyCommands 就是一個個 python 腳本文件,存放在 Immunity 安裝目錄的 PyCommands 文件夾裏。每一個 python 腳本都執行一 個任務(hooking,靜態分析等待),至關於一個 PyCommand。每一個 PyCommand 都有一個 特定的結構。如下就是一個基礎的模型:函數

from immlib import * 
def main(args):
    # Instantiate a immlib.Debugger instance 
    imm = Debugger()
    return "[*] PyCommand Executed!"

PyCommand 有兩個必備條件。一個 main()函數,只接收一個參數(由全部參數組成的 python 列表)。另外一個必備條件是在函數執行完成的時候必須返回一個字符串,最後更新在 調試器主界面的狀態欄。執行命令以前必須在命令前加一個感嘆號。學習

!<scriptname>

二、PyHooks

Immunity 調試器包含了 13 總不一樣類型的 hook。每一種 hook 都能單獨實現,或者嵌入 PyCommand。線程

BpHook/LogBpHook調試

當一個斷點被觸發的時候,這種 hook 就會被調用。兩個 hook 很類似,除了 BpHook 被 觸發的時候,會中止被調試的進程,而 LogBpHook 不會中止被調試的進程。code

AllExceptHookblog

全部的異常的都會觸發這個 hook。進程

PostAnalysisHookip

在一個模塊被分析完成的時候,這種 hook 就會被觸發。這很是有用,當你在在模塊分 析完成後須要進一步進行靜態分析的時候。記住,在用 immlib 對一個模塊進行函數和基礎 塊的解碼以前必須先分析這個模塊。

AccessViolationHook

這個 hook 由訪問違例觸發。經常使用於在 fuzz 的時候自動化捕捉信息。

LoadDLLHook/UnloadDLLHook

當一個 DLL 被加載或者卸載的時候觸發。

CreateThreadHook/ExitThreadHook

當一個新線程建立或者銷燬的時候觸發。

CreateProcessHook/ExitProcessHook

當目標進程開始或者結束的時候觸發。

FastLogHook/STDCALLFastLogHook

這兩種 hook 利用一個彙編跳轉,將執行權限轉移到一段 hook 代碼用以記錄特定的寄存 器,和內存數據。當函數被頻繁的調用的時候這種 hook 很是有用;第六章將詳細講解。

如下的 LogBpHook 例子代碼塊可以做爲 PyHook 的模板。

from immlib import *
class MyHook( LogBpHook ): 
    def init ( self ):
        LogBpHook. init ( self )
    def run( regs ):
        # Executed when hook gets triggered

咱們重載了 LogBpHook 類,而且創建了 run()函數(必須)。當 hook 被觸發的時候,所 有的 CPU 寄存器,以及指令都將被存入 regs,此時咱們就能夠修改它們了。regs 是一個字 典,以下訪問相應寄存器的值:

regs["ESP"]

hook 能夠定義在 PyCommand 裏,隨時調用。也能夠寫成腳本放入 PyHooks 目錄。每 次啓動 Immunity 都會制動加載這些目錄。接下來看些實例。

相關文章
相關標籤/搜索