# 2 調試器設計
調試器就是黑客的眼睛。你能夠使用它對程序進行動態跟 蹤和分析。特別是當涉及到 exploit ,fuzzer 和病毒分析的時候, 動態分析的能力決定你的技術水平。對于調試器的使用大家都再熟悉不過 了,但是對調試器的實現原理,估計就不是那么熟悉了。當我們對軟件缺陷進行評估的時候,
調試器提供了非常多的便利和優點。比如運行,暫停,步進,一個進程;設置斷點;操作寄存器和內存;捕捉內部異常,這些底層操作的細節,正是我這章要詳細探討的。
在深入學習之前,先讓我們先了解下白盒調試和黑盒調試的不同。許多的開發平臺都會 包含一個自帶的調試器,允許開發工具結合源代碼對程序進行精確的跟蹤測試。這就是白盒 調試。當我們很難得到源代碼的時候,開發者,逆向工程師, Hacker 就會應用黑盒調試跟 蹤目標程序。黑盒調試中,被測試的軟件對黑客來說是不透明的,唯一能看到的就是反匯編 代碼。這時候要分析出程序的運作流程,找出程序的錯誤將變得更復雜,花費的時間也會更 多。但是高超的逆向技術集合優秀的逆向工具將使這個過程變得簡單,輕松,有時候善于此 道的黑客,甚至比開發者更了解軟件:)。
黑盒測試分成兩種不同的模式:用戶模式 和 內核模式。用戶模式(通常指的是 ring3 級的程序)是你平時運行用戶程序的一般模式(普通的程序)。用戶模式的權限是最低的。 當你運行“運算器(cacl.exe)”的時候,就會產生一個用戶級別的進程;對這個進程的調試 就是用戶模式調試。核心模式的權限是最高的。這里運行著操作系統內核,驅動程序,底層 組件。當運行 Wireshark 嗅探數據包的時候,就是和一個工作在內核的網絡驅動交互。如果 你想暫停驅動或者檢測驅動狀態,就需要使用支持內核模式的調試器了。
下面的這些用戶模式的調試器大家應該再熟悉不過了:WinDbg(微軟生產),OllyDbg(一個免費的調試器 作者是 Oleh Yuschuk)。當你在 Linux 下調試程序的時候,就需要使用 標準的 GNU 調試器(gdb)。以上的三個調試器相當的強大,都有各自的特色和優點。
最近幾年,調試器的智能調試技術也取得了長足的發展,特別是在 Windows 平臺。 智能調試體現在強大可擴展性上,常常通過腳本或者別的方式對調試器進行進一步的開發利 用,比如安裝鉤子函數,以及其他的專門為 Hacker 和逆向工程師專門定制的各種功能。在 這 方 面 出 現 了 兩 個 新 的 具 有 代 表 性 的 作 品 分 別 是 PyDbg (byPedram Amini) 和 Immunity Debugger (from Immunity, Inc.)。
PyDbg 是一個純 Python 實現的調試器,讓黑客能夠用 Python 語言全面的控制一個進程, 實現自動化調試。Immunity 調試器則是一個會讓你眼前一亮的調試器,界面相當的友好, 類似 OllyDbg,但是擁有更強大的功能以及更多的 Python 調試庫。這兩個調試器在本書的 后面章節將會詳細的介紹。現在先讓我們深入了解調試器的一般原理。
在這章,我們將把注意力集中在 x86 平臺下的用戶模式,通過對 CPU 體系結構,(堆) 棧以及調試器的底層操作細節的深入探究,理解調試器的工作原理,為實現我們自己的調試 器打下基礎。
- 序
- 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