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