出版時間:2012-4 出版社:電子工業(yè)出版社 作者:《黑客防線》編輯部 組編 頁數(shù):424
Tag標簽:無
前言
前言 記得第一次在內核中簡單調用DbgPrint函數(shù)輸出“helloworld”時興奮得手舞足蹈,也記得之后開發(fā)ARP防火墻時遭遇無數(shù)次藍屏而無限接近崩潰的狀態(tài)。時至今日,接觸Windows內核安全編程已有三年時間了,期間斷斷續(xù)續(xù)地寫了一些小程序,直到偶然一天收到《黑客防線》雜志的邀請而萌生了寫一本書記錄自己一路走來經歷的想法,對于和我一樣正走在學習Windows內核安全編程之路上的菜鳥們來說,有很大的閱讀價值,尤其對于那些正準備上路或者剛剛上路的新晉菜鳥而言,通過閱讀本書,可以少走很多無謂的彎路?! ”緯慕Y構 本書共包括10章,其中: 第1~3章為基礎篇,介紹基于Windows編程的基礎知識; 第4~8章為提升篇,通過具體示例介紹各Windows組件相關的編程方法; 第9~10章為輔助篇,簡單介紹安全編碼及逆向與調試程序的方法?! ”緯睦碚摬糠种饕訵DK文檔作為支撐,全書關于理論介紹的知識絕大部分來源于WDK,另外一小部分知識直接或間接來源于其他文檔(如Windbg文檔等)、書籍(如WindowsInternal4等)、網絡及個人經驗等?! ”緯膶嵺`部分來源于WDK提供的例子及個人項目,建議讀者在虛擬機中運行示例?! ”緯拈喿x說明 讀者可以根據需要選擇閱讀感興趣的章節(jié),也可以從頭至尾完整地閱讀全書。 除了特別說明適用于Windows7或其他系統(tǒng)的內容除外,本書所有的內容默認適用于WindowsXP系統(tǒng)。 每章提供的示例建議在虛擬機環(huán)境下運行。由于本人能力和時間有限,并沒有在真機環(huán)境中測試過,不能保證所提供的示例程序穩(wěn)定運行在各種環(huán)境下,若直接運行于真機環(huán)境中,可能會對您的計算機財產造成不必要的損害?! ≈轮x 感謝趙躍華教授對我的悉心培養(yǎng);感謝張翼(xyzreg)學長對我多年的指導和照顧;感謝全體535實驗室的師弟師妹們對本書的文字修正;感謝黑客防線在合作過程中的細致幫助;最后,感謝我的父母對我無盡的給予?! ∪绻陂喿x過程中發(fā)現(xiàn)本書的技術性錯誤,或者有好的建議,歡迎致信ifsecurity588@gmail.com。 作者 2011/12/28ax
內容概要
本書詳細介紹了Windows平臺下的內核安全編程知識。首先簡單介紹了驅動編程的基本方法;然后詳細介紹了Windows各個系統(tǒng)組件的工作原理,如文件系統(tǒng)、網絡系統(tǒng)自上而下的執(zhí)行流程。同時還介紹了各個組件涉及的安全問題,如文件隱藏、鍵盤記錄等,并通過工程項目讓讀者從代碼層級了解這些信息安全問題及解決方法;最后介紹了驅動編程本身的安全問題,如安全編碼的注意事項和脆弱代碼的檢測手段。另外本書還介紹了簡單的調試和逆向技術,幫助解決開發(fā)過程中遇到的技術難題。通過閱讀本書,可以幫助讀者更深層次的了解內核態(tài)下的信息安全知識。
本書適合大專院校計算機系的學生、windows程序員、從事信息安全行業(yè)的工程師以及所有對windows內核安全編程感興趣的愛好者使用。
書籍目錄
第一部分 基礎篇
第1章 前置要求與環(huán)境搭建
1.1 驅動編程的語言
1.2 開發(fā)環(huán)境搭建
1.2.1 Visual Studio 2005/2008的安裝與配置
1.2.2 WDK的安裝與配置
1.2.3 VisualDDK的安裝與配置
1.3 常用工具介紹
第2章 內核編程基礎知識
2.1 Windows主要系統(tǒng)組件
2.1.1 對象管理器
2.1.2 內存管理器
2.1.3 進程和線程管理器
2.1.4 I/O管理器
2.1.5 PnP管理器
2.1.6 電源管理器
2.1.7 配置管理器
2.1.8 安全引用監(jiān)視器
2.2 常見名詞解釋
2.2.1 內核名詞
2.2.2 文件名詞
2.2.3 網絡名詞
2.3 常見內核數(shù)據結構
2.3.1 驅動框架常見數(shù)據結構
2.3.2 進程與線程數(shù)據結構
2.3.3 存儲系統(tǒng)數(shù)據結構
2.3.4 網絡數(shù)據結構
2.3.5 其他一些常見的數(shù)據結構
第3章 基本編程方法
3.1 簡單的NT式驅動模型
3.1.1 驅動模型的選擇
3.1.2 NT式驅動程序基本結構
3.1.3 編譯驅動程序
3.1.4 加載驅動及查看輸出信息
3.2 應用層與內核的通信方法
3.2.1 訪問數(shù)據的I/O方式
3.2.2 讀寫驅動程序
3.2.3 發(fā)送I/O控制碼
3.2.4 內存共享
3.3 同步技術
3.3.1 事件對象
3.3.2 信號燈對象
3.3.3 互斥體對象
3.3.4 定時器對象
3.3.5 自旋鎖
3.3.6 回調對象
3.3.7 原子操作
3.4 IRP處理
3.4.1 簡單的IRP流動圖
3.4.2 IRP的創(chuàng)建
3.4.3 IRP的發(fā)送
3.4.4 為IRP設置完成函數(shù)
3.4.5 IRP的完成
3.4.6 多種典型的 IRP處理示例
3.5 字符串操作
3.5.1 STRING、ANSI_STRING和UNICODE_STRING
3.5.2 初始化和銷毀
3.5.3 復制和添加
3.5.4 比較
3.5.5 轉換
3.6 內存管理
3.6.1 分配系統(tǒng)空間內存
3.6.2 運行時庫管理函數(shù)
3.6.3 使用內核棧
3.6.4 使用Lookaside快速鏈表
3.6.5 訪問用戶空間內存
3.6.6 內存區(qū)對象和視圖
3.6.7 MDL的使用
3.7 注冊表編程
3.7.1 注冊表對象管理函數(shù)
3.7.2 注冊表運行時庫函數(shù)
3.7.3 注冊表調用過濾
3.8 文件編程
3.8.1 打開文件句柄
3.8.2 執(zhí)行相關文件操作
3.9 其他
3.9.1 本地系統(tǒng)服務函數(shù)的Nt和Zw版本
3.9.2 NTSTATUS返回值
3.9.3 雙向鏈表的使用
3.9.4 異常處理
第二部分 提升篇
第4章 進程
4.1 進程監(jiān)控實現(xiàn)原理
4.2 Windows 7系統(tǒng)下的進程
監(jiān)控軟件實例
4.2.1 內核模塊程序實現(xiàn)
4.2.2 用戶模式程序實現(xiàn)
4.3 安裝與使用
第5章 磁盤
5.1 存儲驅動體系結構
5.2 設備樹示例
5.3 diskperf磁盤過濾驅動
5.3.1 diskperf介紹
5.3.2 diskperf的過濾框架
5.3.3 diskperf的PnP支持
5.3.4 diskperf的硬盤訪問監(jiān)控和性能數(shù)據捕獲
5.3.5 diskperf的電源支持
5.3.6 diskperf的安裝與測試
第6章 鍵盤
6.1 原理跟蹤
6.1.1 自下而上的過程
6.1.2 自上而下的過程
6.2 幾種常見的鍵盤記錄行為
6.2.1 應用層的消息鉤子
6.2.2 鍵盤過濾驅動
6.2.3 鍵盤類驅動的分發(fā)函數(shù)Hook
6.2.4 DKOM技術
6.2.5 其他方法
6.3 反鍵盤記錄
6.3.1 實現(xiàn)原理
6.3.2 反鍵盤記錄示例
第7章 文件
7.1 原理跟蹤
7.1.1 Windows存儲棧
7.1.2 不涉及緩存的數(shù)據存儲
7.1.3 涉及緩存的數(shù)據存儲
7.2 簡單的文件隱藏
7.2.1 文件隱藏的原理
7.2.2 文件隱藏的實現(xiàn)
7.3 scanner掃描程序
7.3.1 過濾管理器與微過濾驅動概念
7.3.2 使用過濾管理模型的優(yōu)勢
7.3.3 微過濾驅動的加載和卸載
7.3.4 用戶模式和內核模式的交互
7.3.5 scanner介紹
7.3.6 scanner驅動程序
7.3.7 scanner應用層程序
7.3.8 scanner的安裝與使用
第8章 網絡
8.1 原理跟蹤
8.2 NDIS協(xié)議驅動
8.2.1 DriverEntry
8.2.2 綁定
8.2.3 數(shù)據發(fā)送
8.2.4 數(shù)據接收
8.2.5 數(shù)據流動總結
8.3 OPEN_BLOCK的展示
8.3.1 原理知識
8.3.2 相關代碼
第三部分 輔助篇
第9章 安全編碼
9.1 藍屏的概念
9.2 創(chuàng)建可靠的驅動程序
9.2.1 驗證設備對象
9.2.2 使用安全字符串
9.2.3 驗證對象句柄
9.2.4 支持多CPU
9.2.5 確認驅動狀態(tài)
9.2.6 IRP安全檢查
9.3 使用驅動驗證程序
9.3.1 驅動驗證程序的測試選項
9.3.2 使用驅動驗證程序
第10章 調試與逆向
10.1 靜態(tài)調試
10.1.1 靜態(tài)調試驅動程序
10.1.2 靜態(tài)調試應用程序
10.2 動態(tài)調試
10.2.1 雙機調試的基本方法
10.2.2 WinDbg的常用命令
10.2.3 WinDbg的使用技巧
10.3 逆向與調試相結合
10.3.1 示例
章節(jié)摘錄
版權頁: 插圖: 第2章 內核編程基礎知識 2.1 Windows主要系統(tǒng)組件 2.1.1 對象管理器 Windows對象管理器用來管理對象。文件、設備、同步機制、注冊表鍵值等在內核中都使用對象來表示。每個對象都有一個對象頭(包含對象的一些信息,如名詞、類型和位置等)和一個對象體(包含與各種對象類型相關的數(shù)據)。 Windows包含超過25種類型的對象,如文件、設備、線程、進程、事件、互斥體、信號量、注冊表鍵、作業(yè)、內存區(qū)、符號鏈接等。 對象管理器執(zhí)行如下的操作來管理對象: ?負責對象的創(chuàng)建和銷毀; ?維護一個對象名字空間以跟蹤對象信息; ?跟蹤分配給每一個進程的資源; ?跟蹤具體對象的訪問權限; ?在對象的生命期內管理對象,判斷對象何時可以被銷毀。 對象管理器導出的接口函數(shù)通常包括一個“Ob”前綴,如ObGetObjectSecurity函數(shù)。 2.1.2內存管理器 Windows內存管理器用來管理物理內存,主要執(zhí)行如下的操作: ?管理內存的分配和銷毀: ?支持內存映射文件、共享內存及寫時復制的實現(xiàn)。 內存管理器導出的接口函數(shù)通常包括一個“Mm”前綴,如MmGetPhysicalAddress函數(shù)。 2.1.3進程和線程管理器 進程即當前系統(tǒng)中正在運行的軟件程序,每個進程都有一個ID;線程則代表了程序的哪部分正在運行,每個線程也有一個ID。 一個進程可能包括多個線程,每個線程通過占用CPU時間獲得執(zhí)行。在單核處理器的機器上,雖然一個進程可能擁有多個線程,但在某一時刻只有一個線程正在運行,且每個線程只運行很短的時間便切換到另一個線程繼續(xù)執(zhí)行,從而讓用戶產生錯覺,似乎同一時間有多個程序在執(zhí)行;在多核處理器機器上,在某一時刻可以有多個線程同時運行。如果一個程序包含有多個線程,那么多個線程可以在不同的處理器上同時運行。 Windows的進程和線程管理器負責處理進程中所有線程的執(zhí)行問題。無論機器是單核或是多核,在驅動編程中都必須仔細地處理所有的線程,無論這些線程按照什么順序獲得執(zhí)行,驅動程序都會穩(wěn)定地運行。 進程和線程管理器導出的接口函數(shù)通常包括一個“Ps”前綴,如PsCreateSystemThread函數(shù)。
編輯推薦
《網絡安全入門與提高:Windows內核安全編程從入門到實踐》適合大專院校計算機系的學生、Windows程序員、從事信息安全行業(yè)的工程師以及所有對Windows內核安全編程感興趣的愛好者使用。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載