## 10.1 驅動通信
幾乎每個在 Windows 上注冊了的驅動程序都有一個設備名和一個符號鏈接。用戶模式 的程序能夠通過符號鏈接獲得驅動的句柄,然后使用這個句柄和驅動進行聯系。具體函數如 下:
```
HANDLE WINAPI CreateFileW(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttribute
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
```
第一個參數,填寫文件名或者設備名,這里填寫目標驅動的符號連接。 dwDesiredAccess 表示訪問方式,讀或者寫(可以既讀又寫,也可以不讀不寫),GENERIC_READ (0x80000000) 讀,GENERIC_WRITE (0x40000000)寫。dwShareMode 這里設置成 0,表示在 CreateFileW 返回并且安全關閉了句柄之后,才能訪問設備。 lpSecurityAttributes 設置成 NULL,表示使 用 默 認 的 安 全 描 述 符 , 并 且 不 能 被 子 進 程 繼 承 。 dwCreationDisposition 參 數 設 置 成 OPEN_EXISTING (0x3),表示如果設備存在就打開,其余情況返回錯誤。最后兩個參數簡 單的設置成 NULL。
當 CreateFileW 成功返回一個有效的句柄之后,我們就能使用 DeviceIoControl(由 kernel32.dll 導出)傳遞一個 IOCTL 給設備。
```
BOOL WINAPI DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped
);
```
第 一個 參數 由 CreateFileW 返 回的 句柄 。 dwIoControlCode 是 要傳 遞給 設備 啟動 的 IOCTL 代碼。這個代碼決定了調用驅動中的什么功能。參數 lpInBuffer 指向一個緩沖區,包 含了將要傳遞給驅動的數據。這個緩沖區是我們后面要重點操作的地方,fuzz 數據將存在這。 nInBufferSize 為傳遞給驅動的緩沖區的大小。 lpOutBuffer 和 lpOutBufferSize,和前兩個參 數一樣,不過是用于接收驅動返回的數據。lpBytesReturned 為驅動實際返回的數據的長度。 最后一個參數簡單的設置成 NULL。
現在對于驅動的交互,大家應該不陌生了,接下來就祭出我們的 Immunity,用它 Hook 住 DeviceIoControl 然后變形輸入緩沖區內的數據,最后 fuzzing every driver。
- 序
- 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