## 5.2 Immunity Debugger 101
在研究強大的 immlib 庫之前,先看下 Immunity 的界面。

圖 5-1:Immunity 調試器主界面
調試器界面被分成 5 個主要的塊。左上角是 CPU 窗口,顯示了正在處理的代碼的反匯 編指令。右上角是寄存器窗口,顯示所有通用寄存器。左下角是內存窗口,以十六進制的形 式顯示任何被選中的內存快。右下角是堆棧窗口,顯示調用的堆棧和解碼后的函數參數(任何原生的 API 調用)。最底下白色的窗口是命令欄,你能夠像 WindDbg 一樣使用命令控制調 試器,或者執行 PyCommands。
### 5.2.1 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>
```
### 5.2.2 PyHooks
Immunity 調試器包含了 13 總不同類型的 hook。每一種 hook 都能單獨實現,或者嵌入 PyCommand。
`BpHook/LogBpHook`
當一個斷點被觸發的時候,這種 hook 就會被調用。兩個 hook 很相似,除了 BpHook 被 觸發的時候,會停止被調試的進程,而 LogBpHook 不會停止被調試的進程。
`AllExceptHook`
所有的異常的都會觸發這個 hook。
`PostAnalysisHook`
在一個模塊被分析完成的時候,這種 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 都會制動加載這些目錄。接下來看些實例。
- 序
- 1 搭建開發環境
- 1.1 操作系統準備
- 1.2 獲取和安裝 Python2.5
- 1.3 配置 Eclipse 和 PyDev
- 2 調試器設計
- 2.1 通用 CPU 寄存器
- 2.2 棧
- 2.3 調試事件
- 2.4 斷點
- 3 自己動手寫一個 windows 調試器
- 3.2 獲得 CPU 寄存器狀態
- 3.3 實現調試事件處理
- 3.4 全能的斷點
- 4 PyDBG---純 PYTHON 調試器
- 4.1 擴展斷點處理
- 4.2 處理訪問違例
- 4.3 進程快照
- 5 IMMUNITY----最好的調試器
- 5.1 安裝 Immunity 調試器
- 5.2 Immunity Debugger 101
- 5.3 Exploit 開發
- 5.4 搞定反調試機制
- 6 HOOKING
- 6.1 用 PyDbg 實現 Soft Hooking
- 6.2 Hard Hooking
- 7 Dll 和代碼注入
- 7.1 創建遠線程
- 7.2 邪惡的代碼
- 8 FUZZING
- 8.1 Bug 的分類
- 8.2 File Fuzzer
- 8.3 改進你的 Fuzzer
- 9 SULLEY
- 9.1 安裝 Sulley
- 9.2 Sulley primitives
- 9.3 獵殺 WarFTPD
- 10 Fuzzing Windows 驅動
- 10.1 驅動通信
- 10.2 用 Immunity fuzzing 驅動
- 10.4 構建 Driver Fuzzer
- 11 IDAPYTHON --- IDA 腳本
- 11.1 安裝 IDAPython
- 11.2 IDAPython 函數
- 11.3 腳本例子
- 12 PyEmu
- 12.1 安裝 PyEmu
- 12.2 PyEmu 一覽
- 12.3 IDAPyEmu