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

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

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

定 價:¥75.00

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

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

內(nèi)容簡介

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

作者簡介

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

圖書目錄

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

本目錄推薦

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