Windows內核調試技術

譚文

  • 出版商: 電子工業
  • 出版日期: 2025-04-01
  • 售價: $474
  • 語言: 簡體中文
  • 頁數: 292
  • ISBN: 712150023X
  • ISBN-13: 9787121500237
  • 下單後立即進貨 (約4週~6週)

相關主題

商品描述

本書以為安全系統所開發的Windows驅動程序為例,由淺入深地介紹了Windows內核調試所需要的環境、工具、相關知識及技巧。書中列舉了Windows內核編程開發者容易犯的各類錯誤,以及由此導致的不同缺陷的調試和解決方法。對遠程調試、面向海量用戶的內核驅動程序的質量控制、程序沖突、無文檔編程等內核開發中常遇到的問題,也提供了對應的解決方案。本書適合具有C語言基礎的電腦相關專業大中專院校學生、軟件行業Windows相關的底層開發者、電腦安全行業的開發和研究人員閱讀。

目錄大綱

第1章 內核開發與調試的準備 001
1.1 環境部署和工具安裝 001
1.1.1 選擇調試工具 001
1.1.2 安裝Visual Studio和WDK 003
1.1.3 安裝被調試的虛擬機 004
1.2 WinDbg的用法和存在的各種問題 007
1.2.1 做好快照並快速連接WinDbg 007
1.2.2 符號表和卡頓 008
1.2.3 源代碼問題 010
1.3 內核調試的實際操作示例 011
1.3.1 WinDbg中有用的主要窗口 011
1.3.2 常用的調試命令 013
1.3.3 調用棧與當前進程 014
1.4 編寫第一個例子 017
1.4.1 無法加載問題 017
1.4.2 不起作用的代碼 020
1.4.3 正確的代碼結構與異常處理 023
1.4.4 以覆蓋為目的的調試 025
第2章 常見錯誤和非法地址訪問藍屏 028
2.1 非法指針導致的藍屏 028
2.1.1 空指針訪問導致的藍屏 028
2.1.2 空指針寫入導致的藍屏 030
2.1.3 簡單亂指針導致的藍屏 032
2.1.4 亂指針遍歷鏈表導致的藍屏 033
2.1.5 出現亂指針的原因 035
2.2 越界導致的藍屏 037
2.2.1 分配邊界頁面的函數 037
2.2.2 字符串越界導致的藍屏 038
2.2.3 內存掃描越界導致的藍屏 041
2.2.4 棧越界導致的藍屏 043
2.3 非法地址執行導致的藍屏 045
2.3.1 執行空函數指針導致的藍屏 045
2.3.2 執行棧地址函數指針導致的藍屏 046
2.3.3 執行已卸載驅動函數導致的藍屏 047
2.4 各類非法訪問錯誤總結 050
第3章 內核開發中的泄漏、卡死與重入 052
3.1 內存泄漏 052
3.1.1 通過任務管理器觀察內存泄漏 052
3.1.2 通過PoolTag來排查泄漏 056
3.1.3 分三級管理的內存分配 058
3.1.4 快速定位內存泄漏 064
3.2 卡死 067
3.2.1 死循環導致的進程強卡死 068
3.2.2 死循環導致的系統卡死 071
3.2.3 自旋鎖未釋放導致的系統卡死和藍屏 075
3.3 重入 080
3.3.1 遞歸導致的雙重失敗崩潰 081
3.3.2 回調重入導致的崩潰 083
3.3.3 文件系統設備棧引起的重入 087
第4章 用戶環境缺陷的調試 093
4.1 與用戶保持聯系 093
4.1.1 無法及時聯系用戶的原因 093
4.1.2 簡單快速獲取反饋 094
4.1.3 用正確的方式和用戶接觸 095
4.2 建議用戶使用轉儲文件協助調試 095
4.2.1 手動開啟崩潰轉儲的設置 096
4.2.2 默認開啟崩潰轉儲並上傳轉儲文件 097
4.2.3 強制生成轉儲文件 099
4.3 編寫一個強制藍屏工具 100
4.3.1 使用代碼安裝一個驅動程序 100
4.3.2 以管理員模式運行及提權 103
4.3.3 加載驅動程序 106
4.3.4 完成並加載藍屏驅動程序 108
4.4 轉儲文件分析示例 111
4.4.1 非法內存訪問的轉儲文件 111
4.4.2 進程強卡死的轉儲文件 115
4.4.3 內存泄漏的轉儲文件 119
第5章 海量用戶項目開發與調試 122
5.1 “無法調試”的缺陷 123
5.1.1 缺陷到底能否被解決 123
5.1.2 解決缺陷的通用手段和模式 125
5.1.3 用分段排除法調整定位缺陷 126
5.2 模塊劃分為基礎的調整 128
5.2.1 通用的模塊劃分方法 128
5.2.2 內核程序功能劃分與開關 131
5.2.3 利用配置進行動態開關 135
5.3 建立自監控機制 138
5.3.1 初始化過程的監控 139
5.3.2 功能有效性的自我監控 144
5.3.3 持續執行的心跳監控 148
5.4 利用海量用戶定位未知缺陷 151
5.4.1 用隨機對照試驗來確認未知缺陷 151
5.4.2 確定外網內核驅動程序“健康度” 154
5.4.3 繼續分組對比以確認未知缺陷 155
5.4.4 在發布和更新中持續監控健康度 157
第6章 內核掛鉤與沖突問題調試 158
6.1 解決沖突的正確方式 158
6.1.1 積極但低調地解決問題 158
6.1.2 用戶價值才是唯一取向 159
6.2 掛鉤的開發 161
6.2.1 被掛鉤的程序 162
6.2.2 枚舉和註冊回調的時序 164
6.2.3 導入地址表的檢索 170
6.2.4 掛鉤的實現 175
6.3 沖突的發現、分析與解決 183
6.3.1 沖突的現象 183
6.3.2 用dps命令手工解析調用棧 185
6.3.3 逆向分析第三方程序並解決問題 189
6.3.4 肇事方視角定位解決問題 192
第7章 文件系統過濾與逆向調試 195
7.1 微過濾驅動 195
7.1.1 補齊微過濾驅動所需要的註冊表項 196
7.1.2 啟動微過濾驅動程序 202
7.1.3 對文件打開進行過濾 205
7.2 微過濾驅動的動態卸載問題 210
7.2.1 重現缺陷並進行初步定位 211
7.2.2 尋找案發第一現場 213
7.3 利用IDA Pro進行靜態分析 216
7.3.1 IDA Pro操作入門 216
7.3.2 利用IDA Pro F5逆向FltUnregisterFilter 219
7.3.3 逆向nt模塊中的ExWaitForRundownProtectionRelease 223
7.4 IDA Pro分析和WinDbg調試的協同 225
7.4.1 通過符號表查找線索 225
7.4.2 IDA Pro靜態分析尋找調用者 226
7.4.3 WinDbg動態調試尋找調用者 229
第8章 非文檔開發與調試 233
8.1 使用非文檔方式定位函數 233
8.1.1 內核函數的公開、導出和未導出 234
8.1.2 繞過導入表來定位函數 236
8.1.3 間接定位函數的代碼實現 239
8.2 使用非文檔方式探索內核功能 243
8.2.1 嘗試監控MmMaploSpace的調用 243
8.2.2 研究PTE Tracker如何開啟 246
8.2.3 解決PTE Tracker開啟後的藍屏問題 249
8.3 逆向Windows內核數據結構 251
8.3.1 從公開參數到未公開參數 251
8.3.2 從參數到內部變量和結構 254
8.3.3 通過各種參考資料逆向內核 260
8.4 實現非文檔操作的編碼實現 264
8.4.1 從確認操作系統的版本開始 264
8.4.2 確定需要的全局變量和數據結構 265
8.4.3 定位全局變量的位置 268
8.4.4 讀取PTE Tracker記錄並進行驗證 275