注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)操作系統(tǒng)Windows寒江獨(dú)釣:Windows內(nèi)核安全編程

寒江獨(dú)釣:Windows內(nèi)核安全編程

寒江獨(dú)釣:Windows內(nèi)核安全編程

定 價(jià):¥75.00

作 者: 譚文,楊瀟,邵堅(jiān)磊 著
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: WINDOWS

ISBN: 9787121087967 出版時(shí)間: 2009-06-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 487 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  《寒江獨(dú)釣——Windows內(nèi)核安全編程》從Windows內(nèi)核編程出發(fā),全面系統(tǒng)地介紹了串口、鍵盤、磁盤、文件系統(tǒng)、網(wǎng)絡(luò)等相關(guān)的Windows內(nèi)核模塊的編程技術(shù),以及基于這些技術(shù)實(shí)現(xiàn)的輸入密碼保護(hù)、防毒引擎、文件加密、網(wǎng)絡(luò)嗅探、網(wǎng)絡(luò)防火墻等信息安全軟件的核心組件的具體編程。主要知識(shí)重點(diǎn)包括:Windows串口與鍵盤過(guò)濾驅(qū)動(dòng)、Windows虛擬存儲(chǔ)設(shè)備與存儲(chǔ)設(shè)備過(guò)濾驅(qū)動(dòng)、Windows文件系統(tǒng)過(guò)濾驅(qū)動(dòng)、文件系統(tǒng)透明加密/解密驅(qū)動(dòng)、Windows各類網(wǎng)絡(luò)驅(qū)動(dòng)(包括TDI過(guò)濾驅(qū)動(dòng)及3類NDIS驅(qū)動(dòng)),以及最新的WDF驅(qū)動(dòng)開(kāi)發(fā)模型。有助于讀者熟悉Windows內(nèi)核驅(qū)動(dòng)的體系結(jié)構(gòu),并精通信息安全類的內(nèi)核編程技術(shù)。本書的大部分代碼具有廣泛的兼容性,適合從Windows 2000一直到目前最新的Windows 7 Beta版。本書適合大專院校計(jì)算機(jī)系的學(xué)生、普通Windows程序員、Windows內(nèi)核程序員、信息安全行業(yè)的程序員,以及希望了解Windows系統(tǒng)底層知識(shí)的計(jì)算機(jī)編程愛(ài)好者使用。閱讀本書,需要讀者有C語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)知識(shí)。

作者簡(jiǎn)介

  關(guān)于本書作者和貢獻(xiàn)者主要作者:譚文,C程序員。1980年生于湖南。2002年畢業(yè)于西安交通大學(xué)自動(dòng)控制系。畢業(yè)后一直從事各類系統(tǒng)底層軟件的開(kāi)發(fā)設(shè)計(jì)工作;目前在英特爾在上海紫竹科技園的研發(fā)中心參與不同平臺(tái)二進(jìn)制指令動(dòng)態(tài)翻譯系統(tǒng)的項(xiàng)目開(kāi)發(fā)。愛(ài)好聊天、發(fā)帖。曾著有《天書夜讀——從匯編語(yǔ)言到Windows內(nèi)核編程》一書。編寫本書的第1~3,7,8,10~12章,并統(tǒng)稿全書。楊瀟,C程序員。1981年生于陜西。2006年畢業(yè)于西安交通大學(xué)自動(dòng)控制研究所。一直從事各類系統(tǒng)軟硬件接口部分的開(kāi)發(fā)設(shè)計(jì)工作;目前在Comodo北京研發(fā)中心任職,負(fù)責(zé)各類Windows/Linux相關(guān)驅(qū)動(dòng)的開(kāi)發(fā)。愛(ài)好音樂(lè)、旅游和攝影。負(fù)責(zé)編寫本書的第5,6章。邵堅(jiān)磊,前執(zhí)業(yè)醫(yī)生,現(xiàn)C、匯編程序員。1976年生于上海,畢業(yè)于上海交通大學(xué)計(jì)算機(jī)系,具有臨床醫(yī)學(xué)和計(jì)算機(jī)專業(yè)的雙學(xué)位。長(zhǎng)期致力于x86體系架構(gòu)與Windows系統(tǒng)底層技術(shù)的研究與相關(guān)開(kāi)發(fā)工作;目前在上海某公司主持信息防泄密軟件的Windows內(nèi)核驅(qū)動(dòng)的開(kāi)發(fā)工作。是著名的反rootkit工具DarkSpy的作者之一。曾與譚文合著《天書夜讀——從匯編語(yǔ)言到Windows內(nèi)核編程》。愛(ài)好網(wǎng)游。編寫本書的第4章。其他有貢獻(xiàn)的作者:盧冠豪,C程序員。1981年生于中國(guó)臺(tái)灣。畢業(yè)于輔仁大學(xué)資訊工程學(xué)系。長(zhǎng)期從事C、C++、網(wǎng)絡(luò)與通信程序設(shè)計(jì)的工作;參與過(guò)“端點(diǎn)安全”、“資產(chǎn)管理”、“網(wǎng)絡(luò)流量分析”等項(xiàng)目的開(kāi)發(fā)與維護(hù);擅長(zhǎng)Windows項(xiàng)目開(kāi)發(fā)。平時(shí)愛(ài)好吸收與科技電腦有關(guān)的新知識(shí)。受邀編寫本書的第9章。張佩,C程序員,1982年生于江蘇揚(yáng)中,畢業(yè)于蘇州大學(xué)。近三四年來(lái),一直從事底層軟件開(kāi)發(fā),樂(lè)此不疲。因偶然的機(jī)會(huì)參與了本書的寫作,非常開(kāi)心?,F(xiàn)從事于一項(xiàng)音視頻軟件方面的項(xiàng)目。此人好讀書,好寫文章,好交朋友。為人善,與人交善,誠(chéng)善人也。受邀編寫本書的第13章。其他有貢獻(xiàn)者:楊瑾,西安交通大學(xué)在讀博士生。在參與導(dǎo)師的項(xiàng)目過(guò)程中,因技術(shù)的需要閱讀了本書的原稿,修改了書中的許多細(xì)節(jié)錯(cuò)誤與紕漏,并按照本書介紹的步驟,編譯、安裝和測(cè)試了本書源碼光盤上的部分代碼。是本書最主要的審校者。張帆,1980年生于北京,畢業(yè)于北京理工大學(xué)電子工程系。目前在賽門鐵克北京的研發(fā)中心從事信息安全方面的工作;著名暢銷書《Windows驅(qū)動(dòng)開(kāi)發(fā)技術(shù)詳解》的作者。閱讀了全書的原稿,并給出了許多指導(dǎo)性的意見(jiàn),并為本書作序。張銀奎,國(guó)內(nèi)著名的調(diào)試專家。目前和本書作者譚文在同一研發(fā)中心工作,著有《軟件調(diào)試》一書。閱讀了本書的全部原稿,修改了書中多處細(xì)節(jié),給本書作者許多指導(dǎo)性的意見(jiàn),并參與了本書的命名。馬勇,驅(qū)動(dòng)開(kāi)發(fā)網(wǎng)的站長(zhǎng),國(guó)內(nèi)知名的文件系統(tǒng)驅(qū)動(dòng)專家?!膀?qū)網(wǎng)核心技術(shù)叢書”的組織和策劃者之一,閱讀了全書的原稿,并給出了許多指導(dǎo)性的意見(jiàn)。

圖書目錄

第1章 內(nèi)核上機(jī)指導(dǎo) 1
Windows內(nèi)核編程的動(dòng)手有點(diǎn)麻煩,并不是僅僅安裝一個(gè)獨(dú)立的軟件(比如VC)之后就可以安然地開(kāi)始編寫代碼,然后運(yùn)行了。需要下載開(kāi)發(fā)包、配置開(kāi)發(fā)環(huán)境、準(zhǔn)備調(diào)試工具,可能還需要一些小工具協(xié)同工作。這一步攔住了不少的初學(xué)者。本章以詳細(xì)圖文攻略,來(lái)引導(dǎo)讀者完成這一麻煩的步驟。
1.1 下載和使用WDK 2
1.1.1 下載安裝WDK 2
1.1.2 編寫第一個(gè)C文件 3
1.1.3 編譯一個(gè)工程 5
1.2 安裝與運(yùn)行 6
1.2.1 下載一個(gè)安裝工具 6
1.2.2 運(yùn)行與查看輸出信息 7
1.2.3 在虛擬機(jī)中運(yùn)行 9
1.3 調(diào)試內(nèi)核模塊 9
1.3.1 下載和安裝WinDbg 9
1.3.2 設(shè)置Windows XP調(diào)試執(zhí)行 10
1.3.3 設(shè)置Vista調(diào)試執(zhí)行 11
1.3.4 設(shè)置VMWare的管道虛擬串口 11
1.3.5 設(shè)置Windows內(nèi)核符號(hào)表 13
1.3.6 實(shí)戰(zhàn)調(diào)試first 14
練習(xí)題 16
第2章 內(nèi)核編程環(huán)境及其特殊性 17
編寫過(guò)驅(qū)動(dòng)程序的讀者可能會(huì)很熟悉這一切,但是對(duì)只從事過(guò)應(yīng)用程序的讀者而言,要理解內(nèi)核編程環(huán)境的特殊性,就很需要一些功夫和悟性了。在應(yīng)用程序中,多線程的情況已經(jīng)帶來(lái)了一定理解的困難;而內(nèi)核代碼呢?幾乎無(wú)時(shí)無(wú)刻不運(yùn)行在多線程之下。它從哪里開(kāi)始?從哪里結(jié)束?它在什么進(jìn)程內(nèi)運(yùn)行?這些問(wèn)題一言難盡。
2.1 內(nèi)核編程的環(huán)境 18
2.1.1 隔離的應(yīng)用程序 18
2.1.2 共享的內(nèi)核空間 19
2.1.3 無(wú)處不在的內(nèi)核模塊 20
2.2 數(shù)據(jù)類型 21
2.2.1 基本數(shù)據(jù)類型 21
2.2.2 返回狀態(tài) 22
2.2.3 字符串 23
2.3 重要的數(shù)據(jù)結(jié)構(gòu) 23
2.3.1 驅(qū)動(dòng)對(duì)象 23
2.3.2 設(shè)備對(duì)象 25
2.3.3 請(qǐng)求 26
2.4 函數(shù)調(diào)用 28
2.4.1 查閱幫助 28
2.4.2 幫助中有的幾類函數(shù) 30
2.4.3 幫助中沒(méi)有的函數(shù) 32
2.5 Windows的驅(qū)動(dòng)開(kāi)發(fā)模型 32
2.6 WDK編程中的特殊點(diǎn) 33
2.6.1 內(nèi)核編程的主要調(diào)用源 33
2.6.2 函數(shù)的多線程安全性 34
2.6.3 代碼的中斷級(jí) 36
2.6.4 WDK中出現(xiàn)的特殊代碼 37
練習(xí)題 38
第3章 串口的過(guò)濾 40
在安全軟件的開(kāi)發(fā)中,串口驅(qū)動(dòng)的應(yīng)用并不常見(jiàn)。但是本書以串口驅(qū)動(dòng)作為第一個(gè)介紹的實(shí)例。為何??jī)H僅是因?yàn)榇诤?jiǎn)單。從簡(jiǎn)單的例子入手,可以為讀者帶來(lái)稍許輕松的感受。
3.1 過(guò)濾的概念 41
3.1.1 設(shè)備綁定的內(nèi)核API之一 41
3.1.2 設(shè)備綁定的內(nèi)核API之二 43
3.1.3 生成過(guò)濾設(shè)備并綁定 43
3.1.4 從名字獲得設(shè)備對(duì)象 45
3.1.5 綁定所有串口 46
3.2 獲得實(shí)際數(shù)據(jù) 47
3.2.1 請(qǐng)求的區(qū)分 47
3.2.2 請(qǐng)求的結(jié)局 48
3.2.3 寫請(qǐng)求的數(shù)據(jù) 49
3.3 完整的代碼 50
3.3.1 完整的分發(fā)函數(shù) 50
3.3.2 如何動(dòng)態(tài)卸載 52
3.3.3 完整的代碼 53
本章的示例代碼 53
練習(xí)題 54
第4章 鍵盤的過(guò)濾 56
鍵盤是很重要的輸入設(shè)備!這是因?yàn)槲覀冇面I盤錄入信息、用鍵盤輸入密碼,甚至用鍵盤編程,也用鍵盤著書立說(shuō)。對(duì)于黑客來(lái)說(shuō),使用龐大的計(jì)算機(jī)資源去破解那些堅(jiān)不可摧的加密算法,哪如偷偷地記下用戶用鍵盤輸入的密鑰更加簡(jiǎn)單呢?本章專注于鍵盤的保護(hù)。
4.1 技術(shù)原理 57
4.1.1 預(yù)備知識(shí) 57
4.1.2 Windows中從擊鍵到內(nèi)核 58
4.1.3 鍵盤硬件原理 60
4.2 鍵盤過(guò)濾的框架 61
4.2.1 找到所有的鍵盤設(shè)備 61
4.2.2 應(yīng)用設(shè)備擴(kuò)展 64
4.2.3 鍵盤過(guò)濾模塊的DriverEntry 65
4.2.4 鍵盤過(guò)濾模塊的動(dòng)態(tài)卸載 66
4.3 鍵盤過(guò)濾的請(qǐng)求處理 68
4.3.1 通常的處理 68
4.3.2 PNP的處理 69
4.3.3 讀的處理 70
4.3.4 讀完成的處理 71
4.4 從請(qǐng)求中打印出按鍵信息 72
4.4.1 從緩沖區(qū)中獲得KEYBOARD_INPUT_DATA 72
4.4.2 從KEYBOARD_INPUT_DATA中得到鍵 73
4.4.3 從MakeCode到實(shí)際字符 74
4.5 Hook分發(fā)函數(shù) 75
4.5.1 獲得類驅(qū)動(dòng)對(duì)象 76
4.5.2 修改類驅(qū)動(dòng)的分發(fā)函數(shù)指針 77
4.5.3 類驅(qū)動(dòng)之下的端口驅(qū)動(dòng) 78
4.5.4 端口驅(qū)動(dòng)和類驅(qū)動(dòng)之間的協(xié)作機(jī)制 79
4.5.5 找到關(guān)鍵的回調(diào)函數(shù)的條件 80
4.5.6 定義常數(shù)和數(shù)據(jù)結(jié)構(gòu) 80
4.5.7 打開(kāi)兩種鍵盤端口驅(qū)動(dòng)尋找設(shè)備 81
4.5.8 搜索在KbdClass類驅(qū)動(dòng)中的地址 83
4.6 Hook鍵盤中斷反過(guò)濾 86
4.6.1 中斷:IRQ和INT 86
4.6.2 如何修改IDT 87
4.6.3 替換IDT中的跳轉(zhuǎn)地址 88
4.6.4 QQ的PS/2反過(guò)濾措施 90
4.7 利用IOAPIC重定位中斷處理函數(shù) 90
4.7.1 什么是IOAPIC 90
4.7.2 如何訪問(wèn)IOAPIC 91
4.7.3 編程修改IOAPIC重定位表 92
4.7.4 插入新的中斷處理 93
4.7.5 驅(qū)動(dòng)入口和卸載的實(shí)現(xiàn) 95
4.8 直接用端口操作鍵盤 96
4.8.1 讀取鍵盤數(shù)據(jù)和命令端口 96
4.8.2 p2cUserFilter的最終實(shí)現(xiàn) 97
本章的示例代碼 98
練習(xí)題 99
第5章 磁盤的虛擬 100
CPU是計(jì)算機(jī)的核心,但是它不保存信息。如果它被竊,我們可以簡(jiǎn)單地購(gòu)買一個(gè)新的。但是如果裝滿了機(jī)密信息的硬盤被竊了,那可就不是買一個(gè)新的就能彌補(bǔ)得了的。本章介紹硬盤內(nèi)核魔術(shù):虛擬硬盤。虛擬硬盤可以不被盜竊者利用嗎?良好的設(shè)計(jì)可以做到這一點(diǎn)。
5.1 虛擬的磁盤 101
5.2 一個(gè)具體的例子 101
5.3 入口函數(shù) 102
5.3.1 入口函數(shù)的定義 102
5.3.2 Ramdisk驅(qū)動(dòng)的入口函數(shù) 103
5.4 EvtDriverDeviceAdd函數(shù) 104
5.4.1 EvtDriverDeviceAdd的定義 104
5.4.2 局部變量的聲明 105
5.4.3 磁盤設(shè)備的創(chuàng)建 105
5.4.4 如何處理發(fā)往設(shè)備的請(qǐng)求 107
5.4.5 用戶配置的初始化 108
5.4.6 鏈接給應(yīng)用程序 110
5.4.7 小結(jié) 111
5.5 FAT12/16磁盤卷初始化 111
5.5.1 磁盤卷結(jié)構(gòu)簡(jiǎn)介 111
5.5.2 Ramdisk對(duì)磁盤的初始化 113
5.6 驅(qū)動(dòng)中的請(qǐng)求處理 119
5.6.1 請(qǐng)求的處理 119
5.6.2 讀/寫請(qǐng)求 120
5.6.3 DeviceIoControl請(qǐng)求 122
5.7 Ramdisk的編譯和安裝 124
5.7.1 編譯 124
5.7.2 安裝 125
5.7.3 對(duì)安裝的深入探究 125
練習(xí)題 126
第6章 磁盤過(guò)濾 127
很多網(wǎng)吧的老板、公司的IT管理部門以及讀者自己都很厭惡硬盤總是被病毒和木馬搞得一團(tuán)糟。一些簡(jiǎn)單的還原軟件可以搞定這個(gè)問(wèn)題:重啟之后,對(duì)硬盤的修改都奇跡般地消失了。這是怎么實(shí)現(xiàn)的呢?本章告訴您答案。
6.1 磁盤過(guò)濾驅(qū)動(dòng)的概念 128
6.1.1 設(shè)備過(guò)濾和類過(guò)濾 128
6.1.2 磁盤設(shè)備和磁盤卷設(shè)備過(guò)濾驅(qū)動(dòng) 128
6.1.3 注冊(cè)表和磁盤卷設(shè)備過(guò)濾驅(qū)動(dòng) 129
6.2 具有還原功能的磁盤卷過(guò)濾驅(qū)動(dòng) 129
6.2.1 簡(jiǎn)介 129
6.2.2 基本思想 130
6.3 驅(qū)動(dòng)分析 130
6.3.1 DriverEntry函數(shù) 130
6.3.2 AddDevice函數(shù) 132
6.3.3 PnP請(qǐng)求的處理 136
6.3.4 Power請(qǐng)求的處理 140
6.3.5 DeviceIoControl請(qǐng)求的處理 140
6.3.6 bitmap的作用和分析 144
6.3.7 boot驅(qū)動(dòng)完成回調(diào)函數(shù)和稀疏文件 150
6.3.8 讀/寫請(qǐng)求的處理 152
6.3.9 示例代碼 160
6.3.10 練習(xí)題 161
第7章 文件系統(tǒng)的過(guò)濾與監(jiān)控 162
硬盤是硬盤,而文件系統(tǒng)是文件系統(tǒng),可是有的人總是把它們當(dāng)做一回事。其實(shí)硬盤很簡(jiǎn)單,硬盤就是一個(gè)很簡(jiǎn)單的保存信息的盒子;而復(fù)雜的是文件系統(tǒng),它很精妙地把簡(jiǎn)單的數(shù)據(jù)組織成復(fù)雜的文件。作為信息安全的專家,我們當(dāng)然不能讓文件系統(tǒng)脫離我們的控制之外。
7.1 文件系統(tǒng)的設(shè)備對(duì)象 163
7.1.1 控制設(shè)備與卷設(shè)備 163
7.1.2 生成自己的一個(gè)控制設(shè)備 165
7.2 文件系統(tǒng)的分發(fā)函數(shù) 166
7.2.1 普通的分發(fā)函數(shù) 166
7.2.2 文件過(guò)濾的快速IO分發(fā)函數(shù) 167
7.2.3 快速IO分發(fā)函數(shù)的一個(gè)實(shí)現(xiàn) 169
7.2.4 快速IO分發(fā)函數(shù)逐個(gè)簡(jiǎn)介 170
7.3 設(shè)備的綁定前期工作 172
7.3.1 動(dòng)態(tài)地選擇綁定函數(shù) 172
7.3.2 注冊(cè)文件系統(tǒng)變動(dòng)回調(diào) 173
7.3.3 文件系統(tǒng)變動(dòng)回調(diào)的一個(gè)實(shí)現(xiàn) 175
7.3.4 文件系統(tǒng)識(shí)別器 176
7.4 文件系統(tǒng)控制設(shè)備的綁定 177
7.4.1 生成文件系統(tǒng)控制設(shè)備的過(guò)濾設(shè)備 177
7.4.2 綁定文件系統(tǒng)控制設(shè)備 178
7.4.3 利用文件系統(tǒng)控制請(qǐng)求 180
7.5 文件系統(tǒng)卷設(shè)備的綁定 183
7.5.1 從IRP中獲得VPB指針 183
7.5.2 設(shè)置完成函數(shù)并等待IRP完成 184
7.5.3 卷掛載IRP完成后的工作 187
7.5.4 完成函數(shù)的相應(yīng)實(shí)現(xiàn) 190
7.5.5 綁定卷的實(shí)現(xiàn) 191
7.6 讀/寫操作的過(guò)濾 193
7.6.1 設(shè)置一個(gè)讀處理函數(shù) 193
7.6.2 設(shè)備對(duì)象的區(qū)分處理 194
7.6.3 解析讀請(qǐng)求中的文件信息 195
7.6.4 讀請(qǐng)求的完成 198
7.7 其他操作的過(guò)濾 202
7.7.1 文件對(duì)象的生存周期 202
7.7.2 文件的打開(kāi)與關(guān)閉 203
7.7.3 文件的刪除 205
7.8 路徑過(guò)濾的實(shí)現(xiàn) 206
7.8.1 取得文件路徑的3種情況 206
7.8.2 打開(kāi)成功后獲取路徑 207
7.8.3 在其他時(shí)刻獲得文件路徑 209
7.8.4 在打開(kāi)請(qǐng)求完成之前獲得路徑名 209
7.8.5 把短名轉(zhuǎn)換為長(zhǎng)名 211
7.9 把sfilter編譯成靜態(tài)庫(kù) 212
7.9.1 如何方便地使用sfilter 212
7.9.2 初始化回調(diào)、卸載回調(diào)和綁定回調(diào) 213
7.9.3 綁定與回調(diào) 215
7.9.4 插入請(qǐng)求回調(diào) 216
7.9.5 如何利用sfilter.lib 218
本章的示例代碼 221
練習(xí)題 221
第8章 文件系統(tǒng)透明加密 223
如何阻止企業(yè)的機(jī)密文件被主動(dòng)泄密,但是又不用關(guān)閉網(wǎng)絡(luò)、禁止U盤等手段重重束縛大家?很多跡象表明,文件系統(tǒng)透明加密是最優(yōu)的選擇。既然從前一章讀者已經(jīng)學(xué)會(huì)了控制文件系統(tǒng),那么現(xiàn)在,該是我們摩拳擦掌,用它來(lái)保護(hù)我們的機(jī)密信息的時(shí)候了。
8.1 文件透明加密的應(yīng)用 224
8.1.1 防止企業(yè)信息泄密 224
8.1.2 文件透明加密防止企業(yè)信息泄密 224
8.1.3 文件透明加密軟件的例子 225
8.2 區(qū)分進(jìn)程 226
8.2.1 機(jī)密進(jìn)程與普通進(jìn)程 226
8.2.2 找到進(jìn)程名字的位置 227
8.2.3 得到當(dāng)前進(jìn)程的名字 228
8.3 內(nèi)存映射與文件緩沖 229
8.3.1 記事本的內(nèi)存映射文件 229
8.3.2 Windows的文件緩沖 230
8.3.3 文件緩沖:明文還是密文的選擇 232
8.3.4 清除文件緩沖 233
8.4 加密標(biāo)識(shí) 236
8.4.1 保存在文件外、文件頭還是文件尾 236
8.4.2 隱藏文件頭的大小 237
8.4.3 隱藏文件頭的設(shè)置偏移 239
8.4.4 隱藏文件頭的讀/寫偏移 240
8.5 文件加密表 241
8.5.1 何時(shí)進(jìn)行加密操作 241
8.5.2 文件控制塊與文件對(duì)象 242
8.5.3 文件加密表的數(shù)據(jù)結(jié)構(gòu)與初始化 243
8.5.4 文件加密表的操作:查詢 244
8.5.5 文件加密表的操作:添加 245
8.5.6 文件加密表的操作:刪除 246
8.6 文件打開(kāi)處理 248
8.6.1 直接發(fā)送IRP進(jìn)行查詢與設(shè)置操作 248
8.6.2 直接發(fā)送IRP進(jìn)行讀/寫操作 250
8.6.3 文件的非重入打開(kāi) 252
8.6.4 文件的打開(kāi)預(yù)處理 255
8.7 讀寫加密/解密 260
8.7.1 在讀取時(shí)進(jìn)行解密 260
8.7.2 分配與釋放MDL 261
8.7.3 寫請(qǐng)求加密 262
8.8 crypt_file的組裝 265
8.8.1 crypt_file的初始化 265
8.8.2 crypt_file的IRP預(yù)處理 266
8.8.3 crypt_file的IRP后處理 269
本章的示例代碼 272
練習(xí)題 272
第9章 文件系統(tǒng)微過(guò)濾驅(qū)動(dòng) 273
從來(lái)都不原地踏步的微軟,早就準(zhǔn)備好了下一代的文件系統(tǒng)過(guò)濾的框架、文檔、代碼例子。雖然本書的前兩章的范例在Windows 7上都還可以正常運(yùn)行,但是如果不學(xué)習(xí)一下最新的接口,讀者一定會(huì)覺(jué)得不自在。但是讀者可以放心,在前面學(xué)習(xí)的基礎(chǔ)上,了解新的接口是易如反掌的。
9.1 文件系統(tǒng)微過(guò)濾驅(qū)動(dòng)簡(jiǎn)介 274
9.1.1 文件系統(tǒng)微過(guò)濾驅(qū)動(dòng)的由來(lái) 274
9.1.2 Minifilter的優(yōu)點(diǎn)與不足 275
9.2 Minifilter的編程框架 275
9.2.1 微文件系統(tǒng)過(guò)濾的注冊(cè) 276
9.2.2 微過(guò)濾器的數(shù)據(jù)結(jié)構(gòu) 277
9.2.3 卸載回調(diào)函數(shù) 280
9.2.4 預(yù)操作回調(diào)函數(shù) 281
9.2.5 后操作回調(diào)函數(shù) 284
9.2.6 其他回調(diào)函數(shù) 285
9.3 Minifilter如何與應(yīng)用程序通信 288
9.3.1 建立通信端口的方法 288
9.3.2 在用戶態(tài)通過(guò)DLL使用通信端口的范例 290
9.4 Minifilter的安裝與加載 292
9.4.1 安裝Minifilter的INF文件 293
9.4.2 啟動(dòng)安裝完成的Minifilter 294
本章的示例代碼 295
練習(xí)題 295
第10章 網(wǎng)絡(luò)傳輸層過(guò)濾 296
筆者常常使用防火墻,它們看上去真的很神奇。如果懷疑自己的機(jī)器上有見(jiàn)不得人的進(jìn)程打開(kāi)了網(wǎng)絡(luò)端口盜走機(jī)密信息,防火墻將提醒您,雖然防火墻并不知道它是否是一個(gè)木馬。這是怎么做到的?本章為您揭曉謎底。
10.1 TDI概要 297
10.1.1 為何選擇TDI 297
10.1.2 從socket到Windows內(nèi)核 297
10.1.3 TDI過(guò)濾的代碼例子 299
10.2 TDI的過(guò)濾框架 299
10.2.1 綁定TDI的設(shè)備 299
10.2.2 唯一的分發(fā)函數(shù) 300
10.2.3 過(guò)濾框架的實(shí)現(xiàn) 302
10.2.4 主要過(guò)濾的請(qǐng)求類型 304
10.3 生成請(qǐng)求:獲取地址 305
10.3.1 過(guò)濾生成請(qǐng)求 305
10.3.2 準(zhǔn)備解析IP地址與端口 307
10.3.3 獲取生成的IP地址和端口 308
10.3.4 連接終端的生成與相關(guān)信息的保存 310
10.4 控制請(qǐng)求 311
10.4.1 TDI_ASSOCIATE_ADDRESS的過(guò)濾 311
10.4.2 TDI_CONNECT的過(guò)濾 313
10.4.3 其他的次功能號(hào) 314
10.4.4 設(shè)置事件的過(guò)濾 316
10.4.5 TDI_EVENT_CONNECT類型的設(shè)置事件的過(guò)濾 318
10.4.6 直接獲取發(fā)送函數(shù)的過(guò)濾 320
10.4.7 清理請(qǐng)求的過(guò)濾 322
10.5 本書例子tdifw.lib的應(yīng)用 323
10.5.1 tdifw庫(kù)的回調(diào)接口 323
10.5.2 tdifw庫(kù)的使用例子 325
本章的示例代碼 326
練習(xí)題 327
第11章 NDIS協(xié)議驅(qū)動(dòng) 328
網(wǎng)絡(luò)的連接只是外表而已,實(shí)際上,最終它們變成了一個(gè)個(gè)在網(wǎng)線上往返的網(wǎng)絡(luò)包。高明的黑客是不會(huì)去用Socket來(lái)生成連接的。把黑暗的信息隱藏在單個(gè)的數(shù)據(jù)包里,你還可以發(fā)現(xiàn)它們嗎?本章介紹的NDIS協(xié)議驅(qū)動(dòng),是Windows網(wǎng)絡(luò)抓包工具的基礎(chǔ)。
11.1 以太網(wǎng)包和網(wǎng)絡(luò)驅(qū)動(dòng)架構(gòu) 329
11.1.1 以太網(wǎng)包和協(xié)議驅(qū)動(dòng) 329
11.1.2 NDIS網(wǎng)絡(luò)驅(qū)動(dòng) 330
11.2 協(xié)議驅(qū)動(dòng)的DriverEntry 331
11.2.1 生成控制設(shè)備 331
11.2.2 注冊(cè)協(xié)議 333
11.3 協(xié)議與網(wǎng)卡的綁定 335
11.3.1 協(xié)議與網(wǎng)卡的綁定概念 335
11.3.2 綁定回調(diào)處理的實(shí)現(xiàn) 335
11.3.3 協(xié)議綁定網(wǎng)卡的API 338
11.3.4 解決綁定競(jìng)爭(zhēng)問(wèn)題 339
11.3.5 分配接收和發(fā)送的包池與緩沖池 340
11.3.6 OID請(qǐng)求的發(fā)送和請(qǐng)求完成回調(diào) 342
11.3.7 ndisprotCreateBinding的最終實(shí)現(xiàn) 345
11.4 綁定的解除 351
11.4.1 解除綁定使用的API 351
11.4.2 ndisprotShutdownBinding的實(shí)現(xiàn) 353
11.5 在用戶態(tài)操作協(xié)議驅(qū)動(dòng) 356
11.5.1 協(xié)議的收包與發(fā)包 356
11.5.2 在用戶態(tài)編程打開(kāi)設(shè)備 357
11.5.3 用DeviceIoControl發(fā)送控制請(qǐng)求 358
11.5.4 用WriteFile發(fā)送數(shù)據(jù)包 360
11.5.5 用ReadFile發(fā)送數(shù)據(jù)包 362
11.6 在內(nèi)核態(tài)完成功能的實(shí)現(xiàn) 363
11.6.1 請(qǐng)求的分發(fā)與實(shí)現(xiàn) 363
11.6.2 等待設(shè)備綁定完成與指定設(shè)備名 364
11.6.3 指派設(shè)備的完成 365
11.6.4 處理讀請(qǐng)求 368
11.6.5 處理寫請(qǐng)求 370
11.7 協(xié)議驅(qū)動(dòng)的接收回調(diào) 374
11.7.1 和接收包有關(guān)的回調(diào)函數(shù) 374
11.7.2 ReceiveHandler的實(shí)現(xiàn) 376
11.7.3 TransferDataCompleteHandler的實(shí)現(xiàn) 380
11.7.4 ReceivePacketHandler的實(shí)現(xiàn) 381
11.7.5 接收數(shù)據(jù)包的入隊(duì) 383
11.7.6 接收數(shù)據(jù)包的出隊(duì)和讀請(qǐng)求的完成 385
本章的示例代碼 388
練習(xí)題 389
第12章 NDIS小端口驅(qū)動(dòng) 390
如果厭煩了漏洞百出的以太網(wǎng),還有什么可以充當(dāng)我的網(wǎng)絡(luò)接口嗎?當(dāng)然,一切能通信的設(shè)備,皆有替代以太網(wǎng)的潛質(zhì)。即使您不愿意修改無(wú)數(shù)通過(guò)TCP接口編程的應(yīng)用程序,我們依然可以用其他通信設(shè)備來(lái)虛擬網(wǎng)卡。本章介紹小端口驅(qū)動(dòng)來(lái)虛擬網(wǎng)卡的技術(shù)。
12.1 小端口驅(qū)動(dòng)的應(yīng)用與概述 391
12.1.1 小端口驅(qū)動(dòng)的應(yīng)用 391
12.1.2 小端口驅(qū)動(dòng)的實(shí)例 392
12.1.3 小端口驅(qū)動(dòng)的運(yùn)作與編程概述 393
12.2 小端口驅(qū)動(dòng)的初始化 393
12.2.1 小端口驅(qū)動(dòng)的DriverEntry 393
12.2.2 小端口驅(qū)動(dòng)的適配器結(jié)構(gòu) 396
12.2.3 配置信息的讀取 397
12.2.4 設(shè)置小端口適配器上下文 398
12.2.5 MPInitialize的實(shí)現(xiàn) 399
12.2.6 MPHalt的實(shí)現(xiàn) 402
12.3 打開(kāi)ndisprot設(shè)備 403
12.3.1 I/O目標(biāo) 403
12.3.2 給IO目標(biāo)發(fā)送DeviceIoControl請(qǐng)求 404
12.3.3 打開(kāi)ndisprot接口并完成配置設(shè)備 406
12.4 使用ndisprot發(fā)送包 409
12.4.1 小端口驅(qū)動(dòng)的發(fā)包接口 409
12.4.2 發(fā)送控制塊(TCB) 409
12.4.3 遍歷包組并填寫TCB 412
12.4.4 寫請(qǐng)求的構(gòu)建與發(fā)送 415
12.5 使用ndisprot接收包 417
12.5.1 提交數(shù)據(jù)包的內(nèi)核API 417
12.5.2 從接收控制塊(RCB)提交包 418
12.5.3 對(duì)ndisprot讀請(qǐng)求的完成函數(shù) 420
12.5.4 讀請(qǐng)求的發(fā)送 422
12.5.5 用于讀包的WDF工作任務(wù) 424
12.5.6 ndisedge讀工作任務(wù)的生成與入列 426
12.6 其他的特征回調(diào)函數(shù)的實(shí)現(xiàn) 428
12.6.1 包的歸還 428
12.6.2 OID查詢處理的直接完成 429
12.6.3 OID設(shè)置處理 432
本章的示例代碼 433
練習(xí)題 434
第13章 NDIS中間層驅(qū)動(dòng) 435
當(dāng)我們不滿足于抓包和發(fā)包,而試圖控制本機(jī)上流入和流出的所有數(shù)據(jù)包的時(shí)候,NDIS中間層驅(qū)動(dòng)是最終的選擇。防火墻的功能在這里得到加強(qiáng):我們不再滿足于看到連接、端口、對(duì)方IP地址,而是要看到每一個(gè)數(shù)據(jù)包的原始結(jié)構(gòu)。本章介紹NDIS中間層驅(qū)動(dòng)。
13.1 NDIS中間層驅(qū)動(dòng)概述 436
13.1.1 Windows網(wǎng)絡(luò)架構(gòu)總結(jié) 436
13.1.2 NDIS中間層驅(qū)動(dòng)簡(jiǎn)介 437
13.1.3 NDIS中間層驅(qū)動(dòng)的應(yīng)用 438
13.1.4 NDIS包描述符結(jié)構(gòu)深究 439
13.2 中間層驅(qū)動(dòng)的入口與綁定 442
13.2.1 中間層驅(qū)動(dòng)的入口函數(shù) 442
13.2.2 動(dòng)態(tài)綁定NIC設(shè)備 443
13.2.3 小端口初始化(MpInitialize) 445
13.3 中間層驅(qū)動(dòng)發(fā)送數(shù)據(jù)包 447
13.3.1 發(fā)送數(shù)據(jù)包原理 447
13.3.2 包描述符“重利用” 448
13.3.3 包描述符“重申請(qǐng)” 451
13.3.4 發(fā)送數(shù)據(jù)包的異步完成 453
13.4 中間層驅(qū)動(dòng)接收數(shù)據(jù)包 455
13.4.1 接收數(shù)據(jù)包概述 455
13.4.2 用PtReceive接收數(shù)據(jù)包 456
13.4.3 用PtReceivePacket接收 461
13.4.4 對(duì)包進(jìn)行過(guò)濾 463
13.5 中間層驅(qū)動(dòng)程序查詢和設(shè)置 466
13.5.1 查詢請(qǐng)求的處理 466
13.5.2 設(shè)置請(qǐng)求的處理 468
13.6 NDIS句柄 470
13.6.1 不可見(jiàn)的結(jié)構(gòu)指針 470
13.6.2 常見(jiàn)的NDIS句柄 471
13.6.3 NDIS句柄誤用問(wèn)題 473
13.6.4 一種解決方案 475
13.7 生成普通控制設(shè)備 476
13.7.1 在中間層驅(qū)動(dòng)中添加普通設(shè)備 476
13.7.2 使用傳統(tǒng)方法來(lái)生成控制設(shè)備 478
本章的示例代碼 483
練習(xí)題 483
附錄A 如何使用本書的源碼光盤 485

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.afriseller.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)