注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計Windows內(nèi)核編程

Windows內(nèi)核編程

Windows內(nèi)核編程

定 價:¥198.00

作 者: 譚文 著
出版社: 電子工業(yè)出版社
叢編項:
標 簽: 暫缺

ISBN: 9787121384882 出版時間: 2020-03-01 包裝: 平裝
開本: 16開 頁數(shù): 656 字數(shù):  

內(nèi)容簡介

  本書前身是《Windows內(nèi)核安全與驅(qū)動開發(fā)》,重點圍繞Windows操作系統(tǒng)的機制介紹內(nèi)核安全編程技術(shù),除了少數(shù)特殊章節(jié),大部分內(nèi)容均適用于Windows 2000至Windows 10操作系統(tǒng),體系結(jié)構(gòu)覆蓋32位以及64位。同時本書也深入淺出地介紹了匯編基礎(chǔ)和系統(tǒng)內(nèi)核機制。本書共分為三篇,分別從不同的角度介紹內(nèi)核編程技術(shù)。第1篇面向零基礎(chǔ)的讀者,其中“內(nèi)核編程環(huán)境”“內(nèi)核驅(qū)動運行與調(diào)試”“內(nèi)核編程基礎(chǔ)”重點介紹與內(nèi)核編程相關(guān)的基本知識、開發(fā)環(huán)境搭建,以及基本的編程機制?!皯?yīng)用與內(nèi)核通信”和“64位和32位內(nèi)核開發(fā)差異”主要介紹應(yīng)用層編程與內(nèi)核編程的數(shù)據(jù)交互。*后,介紹了編程過程所需注意的事項,以及設(shè)計技巧。第2篇結(jié)合操作系統(tǒng)的機制,從*簡單的“串口的過濾”開始,介紹了“鍵盤的過濾”‘“磁盤的過濾”“文件系統(tǒng)的過濾”“Windows過濾平臺”“NDIS協(xié)議驅(qū)動”“NDIS小端口驅(qū)動”,以及“NDIS中間層驅(qū)動”。覆蓋了整個Windows系統(tǒng)的主流過濾框架,并且深入剖析了文件透明加密解密的原理。第3篇側(cè)重安全技術(shù),重點介紹了安全編程所需要使用的知識,如“IA-32匯編基礎(chǔ)”“Windows內(nèi)核掛鉤”“Windows通知與回調(diào)”“保護進程”,以及“代碼注入與防注入”。本書由具有十多年終端安全開發(fā)經(jīng)驗的從業(yè)人員編寫,以簡潔實用為準則,理論與實際案例相結(jié)合。適用于計算機軟件安全從業(yè)人員、有一定C語言基礎(chǔ)且對計算機安全感興趣的愛好者。

作者簡介

  譚文,網(wǎng)名楚狂人,已有十七年客戶端安全軟件開發(fā)經(jīng)驗。先后在NEC、英特爾亞太研發(fā)有限公司、騰訊科技任職。曾經(jīng)從事過企業(yè)安全軟件、x86版Android的houdini項目、騰訊電腦管家、騰訊游戲安全等開發(fā)工作。對Windows內(nèi)核有深入研究,現(xiàn)任騰訊科技游戲安全團隊驅(qū)動程序開發(fā)負責人,專家工程師。陳銘霖,十余年終端開發(fā)經(jīng)驗,先后任深信服科技架構(gòu)師、騰訊科技高級工程師;曾主導騰訊電腦管家內(nèi)核安全驅(qū)動開發(fā),以及疑難病毒打擊項目、騰訊Windows服務(wù)器安全開發(fā)項目;對Windows及macOS系統(tǒng)有深入研究,在To C以及To B行業(yè)有豐富的開發(fā)經(jīng)驗,現(xiàn)任數(shù)篷科技高級架構(gòu)師,終端安全負責人。

圖書目錄

目 錄



第1篇 基礎(chǔ)篇
第1章 內(nèi)核編程環(huán)境 002
1.1 下載開發(fā)編譯環(huán)境 002
1.1.1 編譯環(huán)境介紹 002
1.1.2 下載Visual Studio與WDK 004
1.2 編寫第一個C文件 006
1.2.1 通過Visual Studio新建工程 006
1.2.2 內(nèi)核入口函數(shù) 007
1.2.3 編寫入口函數(shù)體 008
1.3 編譯第一個驅(qū)動 010
1.3.1 通過Visual Studio編譯 010
1.3.2 通過WDK直接編譯 011
第2章 內(nèi)核驅(qū)動運行與調(diào)試 013
2.1 驅(qū)動的運行 013
2.2 服務(wù)的基本操作 015
2.2.1 打開服務(wù)管理器 015
2.2.2 服務(wù)的注冊 016
2.2.3 服務(wù)的啟動與停止 018
2.2.4 服務(wù)的刪除 019
2.2.5 服務(wù)的例子 020
2.2.6 服務(wù)小結(jié) 022
2.3 驅(qū)動的調(diào)試 022
2.3.1 基于VS+WDK環(huán)境調(diào)試 022
2.3.2 基于Windbg調(diào)試 026
第3章 內(nèi)核編程基礎(chǔ) 029
3.1 上下文環(huán)境 029
3.2 中斷請求級別 031
3.3 驅(qū)動異常 033
3.4 字符串操作 034
3.5 鏈表 036
3.5.1 頭節(jié)點初始化 038
3.5.2 節(jié)點插入 038
3.5.3 鏈表遍歷 039
3.5.4 節(jié)點移除 040
3.6 自旋鎖 040
3.6.1 使用自旋鎖 040
3.6.2 在雙向鏈表中使用自旋鎖 041
3.6.3 使用隊列自旋鎖提高性能 042
3.7 內(nèi)存分配 043
3.7.1 常規(guī)內(nèi)存分配 043
3.7.2 旁視列表 045
3.8 對象與句柄 049
3.9 注冊表 054
3.9.1 注冊表的打開與關(guān)閉 054
3.9.2 注冊表的修改 056
3.9.3 注冊表的讀取 057
3.10 文件操作 060
3.10.1 文件的打開與關(guān)閉 060
3.10.2 文件的讀寫 063
3.11 線程與事件 066
3.11.1 使用系統(tǒng)線程 066
3.11.2 使用同步事件 067
第4章 應(yīng)用與內(nèi)核通信 070
4.1 內(nèi)核方面的編程 071
4.1.1 生成控制設(shè)備 071
4.1.2 控制設(shè)備的名字和符號鏈接 073
4.1.3 控制設(shè)備的刪除 074
4.1.4 分發(fā)函數(shù) 074
4.1.5 請求的處理 076
4.2 應(yīng)用方面的編程 077
4.2.1 基本的功能需求 077
4.2.2 在應(yīng)用程序中打開與關(guān)閉設(shè)備 077
4.2.3 設(shè)備控制請求 078
4.2.4 內(nèi)核中的對應(yīng)處理 080
4.2.5 結(jié)合測試的效果 082
第5章 64位和32位內(nèi)核開發(fā)差異 083
5.1 64位系統(tǒng)新增機制 083
5.1.1 WOW64子系統(tǒng) 083
5.1.2 PatchGuard技術(shù) 086
5.1.3 64位驅(qū)動的編譯、安裝與運行 086
5.2 編程差異 087
5.2.1 匯編嵌入變化 087
5.2.2 預處理與條件編譯 088
5.2.3 數(shù)據(jù)結(jié)構(gòu)調(diào)整 088
第6章 內(nèi)核編程技巧 090
6.1 初始化賦值問題 090
6.2 有效性判斷 091
6.3 一次性申請 092
6.4 獨立性與最小化原則 095
6.5 嵌套陷阱 097
6.6 穩(wěn)定性處理 098
6.6.1 事前處理 098
6.6.2 事中處理 100
6.6.3 事后處理 104
第2篇 過濾篇
第7章 串口的過濾 106
7.1 過濾的概念 106
7.1.1 設(shè)備綁定的內(nèi)核API之一 106
7.1.2 設(shè)備綁定的內(nèi)核API之二 107
7.1.3 生成過濾設(shè)備并綁定 108
7.1.4 從名字獲得設(shè)備對象 110
7.1.5 綁定所有串口 111
7.2 獲得實際數(shù)據(jù) 112
7.2.1 請求的區(qū)分 112
7.2.2 請求的結(jié)局 113
7.2.3 寫請求的數(shù)據(jù) 114
7.3 完整的代碼 114
7.3.1 完整的分發(fā)函數(shù) 114
7.3.2 如何動態(tài)卸載 116
7.3.3 代碼的編譯與運行 117
第8章 鍵盤的過濾 119
8.1 技術(shù)原理 120
8.1.1 預備知識 120
8.1.2 Windows中從擊鍵到內(nèi)核 120
8.1.3 鍵盤硬件原理 122
8.2 鍵盤過濾的框架 122
8.2.1 找到所有的鍵盤設(shè)備 122
8.2.2 應(yīng)用設(shè)備擴展 125
8.2.3 鍵盤過濾模塊的DriverEntry 127
8.2.4 鍵盤過濾模塊的動態(tài)卸載 127
8.3 鍵盤過濾的請求處理 129
8.3.1 通常的處理 129
8.3.2 PNP的處理 130
8.3.3 讀的處理 131
8.3.4 讀完成的處理 132
8.4 從請求中打印出按鍵信息 133
8.4.1 從緩沖區(qū)中獲得KEYBOARD_
INPUT_DATA 133
8.4.2 從KEYBOARD_INPUT_DATA
中得到鍵 134
8.4.3 從MakeCode到實際字符 134
8.5 Hook分發(fā)函數(shù) 136
8.5.1 獲得類驅(qū)動對象 136
8.5.2 修改類驅(qū)動的分發(fā)函數(shù)指針 137
8.5.3 類驅(qū)動之下的端口驅(qū)動 138
8.5.4 端口驅(qū)動和類驅(qū)動之間的
協(xié)作機制 139
8.5.5 找到關(guān)鍵的回調(diào)函數(shù)的條件 140
8.5.6 定義常數(shù)和數(shù)據(jù)結(jié)構(gòu) 140
8.5.7 打開兩種鍵盤端口驅(qū)動
尋找設(shè)備 141
8.5.8 搜索在KbdClass類驅(qū)動中的
地址 143
8.6 Hook鍵盤中斷反過濾 145
8.6.1 中斷:IRQ和INT 146
8.6.2 如何修改IDT 147
8.6.3 替換IDT中的跳轉(zhuǎn)地址 148
8.6.4 QQ的PS/2反過濾措施 149
8.7 直接用端口操作鍵盤 150
8.7.1 讀取鍵盤數(shù)據(jù)和命令端口 150
8.7.2 p2cUserFilter的最終實現(xiàn) 151
第9章 磁盤的虛擬 153
9.1 虛擬的磁盤 153
9.2 一個具體的例子 153
9.3 入口函數(shù) 154
9.3.1 入口函數(shù)的定義 154
9.3.2 Ramdisk驅(qū)動的入口函數(shù) 155
9.4 EvtDriverDeviceAdd函數(shù) 156
9.4.1 EvtDriverDeviceAdd的定義 156
9.4.2 局部變量的聲明 157
9.4.3 磁盤設(shè)備的創(chuàng)建 157
9.4.4 如何處理發(fā)往設(shè)備的請求 158
9.4.5 用戶配置的初始化 160
9.4.6 鏈接給應(yīng)用程序 161
9.5 FAT12/16磁盤卷初始化 163
9.5.1 磁盤卷結(jié)構(gòu)簡介 163
9.5.2 Ramdisk對磁盤的初始化 164
9.6 驅(qū)動中的請求處理 170
9.6.1 請求的處理 170
9.6.2 讀/寫請求 171
9.6.3 DeviceIoControl請求 172
9.7 Ramdisk的編譯和安裝 175
9.7.1 編譯 175
9.7.2 安裝 175
9.7.3 對安裝的深入探究 175
第10章 磁盤的過濾 177
10.1 磁盤過濾驅(qū)動的概念 177
10.1.1 設(shè)備過濾和類過濾 177
10.1.2 磁盤設(shè)備和磁盤卷設(shè)備
過濾驅(qū)動 177
10.1.3 注冊表和磁盤卷設(shè)備過濾
驅(qū)動 178
10.2 具有還原功能的磁盤卷過濾驅(qū)動 178
10.2.1 簡介 178
10.2.2 基本思想 179
10.3 驅(qū)動分析 179
10.3.1 DriverEntry函數(shù) 179
10.3.2 AddDevice函數(shù) 180
10.3.3 PnP請求的處理 184
10.3.4 Power請求的處理 188
10.3.5 DeviceIoControl請求的處理 189
10.3.6 bitmap的作用和分析 192
10.3.7 boot驅(qū)動完成回調(diào)函數(shù)和
稀疏文件 198
10.3.8 讀/寫請求的處理 200
第11章 文件系統(tǒng)的過濾與監(jiān)控 209
11.1 文件系統(tǒng)的設(shè)備對象 210
11.1.1 控制設(shè)備與卷設(shè)備 210
11.1.2 生成自己的一個控制設(shè)備 211
11.2 文件系統(tǒng)的分發(fā)函數(shù) 212
11.2.1 普通的分發(fā)函數(shù) 212
11.2.2 文件過濾的快速IO分發(fā)函數(shù) 213
11.2.3 快速IO分發(fā)函數(shù)的一個實現(xiàn) 215
11.2.4 快速IO分發(fā)函數(shù)逐個簡介 216
11.3 設(shè)備的綁定前期工作 217
11.3.1 動態(tài)地選擇綁定函數(shù) 217
11.3.2 注冊文件系統(tǒng)變動回調(diào) 219
11.3.3 文件系統(tǒng)變動回調(diào)的一個
實現(xiàn) 220
11.3.4 文件系統(tǒng)識別器 221
11.4 文件系統(tǒng)控制設(shè)備的綁定 222
11.4.1 生成文件系統(tǒng)控制設(shè)備的
過濾設(shè)備 222
11.4.2 綁定文件系統(tǒng)控制設(shè)備 223
11.4.3 利用文件系統(tǒng)控制請求 225
11.5 文件系統(tǒng)卷設(shè)備的綁定 227
11.5.1 從IRP中獲得VPB指針 227
11.5.2 設(shè)置完成函數(shù)并等待IRP
完成 228
11.5.3 卷掛載IRP完成后的工作 231
11.5.4 完成函數(shù)的相應(yīng)實現(xiàn) 233
11.5.5 綁定卷的實現(xiàn) 234
11.6 讀/寫操作的過濾 236
11.6.1 設(shè)置一個讀處理函數(shù) 236
11.6.2 設(shè)備對象的區(qū)分處理 237
11.6.3 解析讀請求中的文件信息 238
11.6.4 讀請求的完成 241
11.7 其他操作的過濾 244
11.7.1 文件對象的生存周期 244
11.7.2 文件的打開與關(guān)閉 245
11.7.3 文件的刪除 247
11.8 路徑過濾的實現(xiàn) 248
11.8.1 取得文件路徑的三種情況 248
11.8.2 打開成功后獲取路徑 249
11.8.3 在其他時刻獲得文件路徑 250
11.8.4 在打開請求完成之前獲得
路徑名 251
11.8.5 把短名轉(zhuǎn)換為長名 253
11.9 把sfilter編譯成靜態(tài)庫 254
11.9.1 如何方便地使用sfilter 254
11.9.2 初始化回調(diào)、卸載回調(diào)和
綁定回調(diào) 254
11.9.3 綁定與回調(diào) 256
11.9.4 插入請求回調(diào) 257
11.9.5 如何利用sfilter.lib 259
第12章 文件系統(tǒng)透明加密 263
12.1 文件透明加密的應(yīng)用 263
12.1.1 防止企業(yè)信息泄密 263
12.1.2 文件透明加密防止企業(yè)信息
泄密 263
12.1.3 文件透明加密軟件的例子 264
12.2 區(qū)分進程 265
12.2.1 機密進程與普通進程 265
12.2.2 找到進程名字的位置 266
12.2.3 得到當前進程的名字 267
12.3 內(nèi)存映射與文件緩沖 268
12.3.1 記事本的內(nèi)存映射文件 268
12.3.2 Windows的文件緩沖 269
12.3.3 文件緩沖:明文還是密文的
選擇 270
12.3.4 清除文件緩沖 271
12.4 加密標識 274
12.4.1 保存在文件外、文件頭還是
文件尾 274
12.4.2 隱藏文件頭的大小 275
12.4.3 隱藏文件頭的設(shè)置偏移 277
12.4.4 隱藏文件頭的讀/寫偏移 277
12.5 文件加密表 278
12.5.1 何時進行加密操作 278
12.5.2 文件控制塊與文件對象 279
12.5.3 文件加密表的數(shù)據(jù)結(jié)構(gòu)與
初始化 280
12.5.4 文件加密表的操作:查詢 281
12.5.5 文件加密表的操作:添加 282
12.5.6 文件加密表的操作:刪除 283
12.6 文件打開處理 284
12.6.1 直接發(fā)送IRP進行查詢與
設(shè)置操作 285
12.6.2 直接發(fā)送IRP進行讀/寫操作 287
12.6.3 文件的非重入打開 288
12.6.4 文件的打開預處理 291
12.7 讀/寫加密和解密 296
12.7.1 在讀取時進行解密 296
12.7.2 分配與釋放MDL 297
12.7.3 寫請求加密 298
12.8 crypt_file的組裝 300
12.8.1 crypt_file的初始化 300
12.8.2 crypt_file的IRP預處理 301
12.8.3 crypt_file的IRP后處理 304
第13章 文件系統(tǒng)微過濾驅(qū)動 308
13.1 文件系統(tǒng)微過濾驅(qū)動簡介 308
13.1.1 文件系統(tǒng)微過濾驅(qū)動的由來 308
13.1.2 Minifilter的優(yōu)點與不足 309
13.2 Minifilter的編程框架 309
13.2.1 微文件系統(tǒng)過濾的注冊 310
13.2.2 微過濾器的數(shù)據(jù)結(jié)構(gòu) 311
13.2.3 卸載回調(diào)函數(shù) 314
13.2.4 預操作回調(diào)函數(shù) 314
13.2.5 后操作回調(diào)函數(shù) 317
13.2.6 其他回調(diào)函數(shù) 318
13.3 Minifilter如何與應(yīng)用程序通信 320
13.3.1 建立通信端口的方法 320
13.3.2 在用戶態(tài)通過DLL使用通信
端口的范例 322
13.4 Minifilter的安裝與加載 325
13.4.1 安裝Minifilter的INF文件 325
13.4.2 啟動安裝完成的Minifilter 326
第14章 網(wǎng)絡(luò)傳輸層過濾 328
14.1 TDI概要 328
14.1.1 為何選擇TDI 328
14.1.2 從socket到Windows內(nèi)核 329
14.1.3 TDI過濾的代碼例子 330
14.2 TDI的過濾框架 330
14.2.1 綁定TDI的設(shè)備 330
14.2.2 唯一的分發(fā)函數(shù) 331
14.2.3 過濾框架的實現(xiàn) 333
14.2.4 主要過濾的請求類型 335
14.3 生成請求:獲取地址 336
14.3.1 過濾生成請求 336
14.3.2 準備解析IP地址與端口 337
14.3.3 獲取生成的IP地址和端口 338
14.3.4 連接終端的生成與相關(guān)信息
的保存 340
14.4 控制請求 341
14.4.1 TDI_ASSOCIATE_ADDRESS
的過濾 341
14.4.2 TDI_CONNECT的過濾 343
14.4.3 其他的次功能號 344
14.4.4 設(shè)置事件的過濾 345
14.4.5 TDI_EVENT_CONNECT類型
的設(shè)置事件的過濾 346
14.4.6 直接獲取發(fā)送函數(shù)的過濾 348
14.4.7 清理請求的過濾 350
14.5 本書例子tdifw.lib的應(yīng)用 351
14.5.1 tdifw庫的回調(diào)接口 351
14.5.2 tdifw庫的使用例子 353
第15章 Windows過濾平臺 355
15.1 WFP簡介 355
15.2 WFP框架 355
15.3 基本對象模型 357
15.3.1 過濾引擎 357
15.3.2 墊片 357
15.3.3 呼出接口 357
15.3.4 分層 358
15.3.5 子層 359
15.3.6 過濾器 360
15.3.7 呼出接口回調(diào)函數(shù) 364
15.4 WFP操作 369
15.4.1 呼出接口的注冊與卸載 369
15.4.2 呼出接口的添加與移除 370
15.4.3 子層的添加與移除 371
15.4.4 過濾器的添加 372
15.5 WFP過濾例子 372
第16章 NDIS協(xié)議驅(qū)動 380
16.1 以太網(wǎng)包和網(wǎng)絡(luò)驅(qū)動架構(gòu) 380
16.1.1 以太網(wǎng)包和協(xié)議驅(qū)動 380
16.1.2 NDIS網(wǎng)絡(luò)驅(qū)動 381
16.2 協(xié)議驅(qū)動的DriverEntry 382
16.2.1 生成控制設(shè)備 382
16.2.2 注冊協(xié)議 383
16.3 協(xié)議與網(wǎng)卡的綁定 385
16.3.1 協(xié)議與網(wǎng)卡的綁定概念 385
16.3.2 綁定回調(diào)處理的實現(xiàn) 386
16.3.3 協(xié)議綁定網(wǎng)卡的API 388
16.3.4 解決綁定競爭問題 389
16.3.5 分配接收和發(fā)送的包池與
緩沖池 390
16.3.6 OID請求的發(fā)送和請求
完成回調(diào) 391
16.3.7 ndisprotCreateBinding的
最終實現(xiàn) 395
16.4 綁定的解除 400
16.4.1 解除綁定使用的API 400
16.4.2 ndisprotShutdownBinding的
實現(xiàn) 402
16.5 在用戶態(tài)操作協(xié)議驅(qū)動 405
16.5.1 協(xié)議的收包與發(fā)包 405
16.5.2 在用戶態(tài)編程打開設(shè)備 405
16.5.3 用DeviceIoControl發(fā)送
控制請求 407
16.5.4 用WriteFile發(fā)送數(shù)據(jù)包 409
16.5.5 用ReadFile發(fā)送數(shù)據(jù)包 410
16.6 在內(nèi)核態(tài)完成功能的實現(xiàn) 412
16.6.1 請求的分發(fā)與實現(xiàn) 412
16.6.2 等待設(shè)備綁定完成與指定
設(shè)備名 412
16.6.3 指派設(shè)備的完成 413
16.6.4 處理讀請求 416
16.6.5 處理寫請求 418
16.7 協(xié)議驅(qū)動的接收回調(diào) 422
16.7.1 和接收包有關(guān)的回調(diào)函數(shù) 422
16.7.2 ReceiveHandler的實現(xiàn) 423
16.7.3 TransferDataCompleteHandler
的實現(xiàn) 427
16.7.4 ReceivePacketHandler的實現(xiàn) 428
16.7.5 接收數(shù)據(jù)包的入隊 430
16.7.6 接收數(shù)據(jù)包的出隊和讀請求
的完成 432
第17章 NDIS小端口驅(qū)動 437
17.1 小端口驅(qū)動的應(yīng)用與概述 437
17.1.1 小端口驅(qū)動的應(yīng)用 437
17.1.2 小端口驅(qū)動示例 438
17.1.3 小端口驅(qū)動的運作與編程
概述 438
17.2 小端口驅(qū)動的初始化 439
17.2.1 小端口驅(qū)動的DriverEntry 439
17.2.2 小端口驅(qū)動的適配器結(jié)構(gòu) 441
17.2.3 配置信息的讀取 442
17.2.4 設(shè)置小端口適配器上下文 443
17.2.5 MPInitialize的實現(xiàn) 444
17.2.6 MPHalt的實現(xiàn) 447
17.3 打開ndisprot設(shè)備 447
17.3.1 IO目標 447
17.3.2 給IO目標發(fā)送DeviceIoControl
請求 449
17.3.3 打開ndisprot接口并完成
配置設(shè)備 451
17.4 使用ndisprot發(fā)送包 453
17.4.1 小端口驅(qū)動的發(fā)包接口 453
17.4.2 發(fā)送控制塊(TCB) 454
17.4.3 遍歷包組并填寫TCB 456
17.4.4 寫請求的構(gòu)建與發(fā)送 458
17.5 使用ndisprot接收包 461
17.5.1 提交數(shù)據(jù)包的內(nèi)核API 461
17.5.2 從接收控制塊(RCB)
提交包 462
17.5.3 對ndisprot讀請求的完成
函數(shù) 463
17.5.4 讀請求的發(fā)送 466
17.5.5 用于讀包的WDF工作任務(wù) 467
17.5.6 ndisedge讀工作任務(wù)的生成
與入列 469
17.6 其他的特征回調(diào)函數(shù)的實現(xiàn) 471
17.6.1 包的歸還 471
17.6.2 OID查詢處理的直接完成 472
17.6.3 OID設(shè)置處理 475
第18章 NDIS中間層驅(qū)動 477
18.1 NDIS中間層驅(qū)動概述 477
18.1.1 Windows網(wǎng)絡(luò)架構(gòu)總結(jié) 477
18.1.2 NDIS中間層驅(qū)動簡介 478
18.1.3 NDIS中間層驅(qū)動的應(yīng)用 479
18.1.4 NDIS包描述符結(jié)構(gòu)深究 480
18.2 中間層驅(qū)動的入口與綁定 483
18.2.1 中間層驅(qū)動的入口函數(shù) 483
18.2.2 動態(tài)綁定NIC設(shè)備 483
18.2.3 小端口初始化(MpInitialize) 485
18.3 中間層驅(qū)動發(fā)送數(shù)據(jù)包 486
18.3.1 發(fā)送數(shù)據(jù)包原理 486
18.3.2 包描述符“重利用” 488
18.3.3 包描述符“重申請” 490
18.3.4 發(fā)送數(shù)據(jù)包的異步完成 492
18.4 中間層驅(qū)動接收數(shù)據(jù)包 494
18.4.1 接收數(shù)據(jù)包概述 494
18.4.2 用PtReceive接收數(shù)據(jù)包 494
18.4.3 用PtReceivePacket接收 499
18.4.4 對包進行過濾 501
18.5 中間層驅(qū)動程序查詢和設(shè)置 504
18.5.1 查詢請求的處理 504
18.5.2 設(shè)置請求的處理 506
18.6 NDIS句柄 507
18.6.1 不可見的結(jié)構(gòu)指針 507
18.6.2 常見的NDIS句柄 508
18.6.3 NDIS句柄誤用問題 510
18.6.4 一種解決方案 512
18.7 生成普通控制設(shè)備 512
18.7.1 在中間層驅(qū)動中添加普通設(shè)備 512
18.7.2 使用傳統(tǒng)方法來生成控制設(shè)備 515
第3篇 應(yīng)用篇
第19章 IA-32匯編基礎(chǔ) 522
19.1 x86內(nèi)存、寄存器與堆棧 522
19.1.1 _asm關(guān)鍵字 522
19.1.2 x86中的mov指令 523
19.1.3 x86中的寄存器與內(nèi)存 523
19.1.4 賦值語句的實現(xiàn) 524
19.2 x86中函數(shù)的實現(xiàn) 525
19.2.1 一個函數(shù)的例子 525
19.2.2 堆棧的介紹 526
19.2.3 寄存器的備份和恢復 527
19.2.4 內(nèi)部變量與返回值 529
19.3 x86中函數(shù)的調(diào)用與返回 531
19.3.1 函數(shù)的調(diào)用指令call 531
19.3.2 通過堆棧傳遞參數(shù) 532
19.3.3 從函數(shù)返回 533
19.3.4 三種常見的調(diào)用協(xié)議 535
19.4 從32位匯編到64位匯編 536
19.4.1 Intel 64與IA-32體系
架構(gòu)簡介 536
19.4.2 64位指令與32位指令 536
19.4.3 通用寄存器 537
19.5 64位下的函數(shù)實現(xiàn) 538
19.5.1 函數(shù)概覽 538
19.5.2 32位參數(shù)的傳遞 539
19.5.3 64位參數(shù)與返回值 540
19.5.4 ??臻g的開辟與恢復 541
第20章 Windows內(nèi)核掛鉤 544
20.1 系統(tǒng)服務(wù)描述符表掛鉤 545
20.1.1 系統(tǒng)服務(wù)描述符表(SSDT) 545
20.1.2 系統(tǒng)服務(wù)描述符表掛鉤的意圖 546
20.1.3 尋找要掛鉤的函數(shù)的地址 547
20.1.4 函數(shù)被掛鉤的過程 548
20.1.5 具體實現(xiàn)的代碼 549
20.2 函數(shù)導出表掛鉤 551
20.2.1 內(nèi)核函數(shù)的種類 551
20.2.2 掛鉤IoCallDriver 553
20.2.3 對跳轉(zhuǎn)地址進行修改 554
20.3 Windows 7系統(tǒng)下IofCallDriver的
跟蹤 555
20.4 Windows 7系統(tǒng)下內(nèi)聯(lián)掛鉤 558
20.4.1 寫入跳轉(zhuǎn)指令并拷貝代碼 558
20.4.2 實現(xiàn)中繼函數(shù) 560
20.5 中斷與中斷掛鉤 562
20.5.1 IA-32體系結(jié)構(gòu)中的中斷 562
20.5.2 中斷處理過程 563
20.5.3 64位模式下的中斷處理機制 564
20.5.4 多核下的中斷 565
20.5.5 Windows中斷機制 570
20.5.6 IDT Hook 573
20.5.7 IDT Hook實現(xiàn)安全防護 574
第21章 Windows通知與回調(diào) 577
21.1 Windows的事件通知與回調(diào) 577
21.2 常用的事件通知 577
21.2.1 創(chuàng)建進程通知 578
21.2.2 創(chuàng)建線程通知 582
21.2.3 加載模塊通知 583
21.2.4 注冊表操作通知 586
21.3 Windows回調(diào)機制 592
21.3.1 回調(diào)對象 593
21.3.2 回調(diào)對象的創(chuàng)建 593
21.3.3 回調(diào)對象的注冊 594
21.3.4 回調(diào)的通告 595
21.4 安全的死角,回調(diào)的應(yīng)用 595
第22章 保護進程 597
22.1 內(nèi)核對象簡介 597
22.2 內(nèi)核對象的結(jié)構(gòu) 598
22.3 保護內(nèi)核對象 599
22.3.1 處理對象的打開 600
22.3.2 處理句柄的復制 601
22.3.3 處理句柄的繼承 603
22.4 進程的保護 609
22.4.1 保護原理 609
22.4.2 Vista以后的進程對象保護 611
22.4.3 進程的其他保護 612
第23章 代碼注入與防注入 613
23.1 注入與防注入簡介 613
23.2 常用的注入方式 614
23.3 主動注入 614
23.3.1 AppInit注入 615
23.3.2 SPI注入 618
23.3.3 消息事件注入 620
23.3.4 其他注入 621
23.4 被動注入 621
23.4.1 遠線程注入 621
23.4.2 APC注入 622
23.4.3 父子進程注入 623
23.5 防注入 624
23.5.1 防止主動注入 624
23.5.2 防止被動注入 629
23.6 總結(jié) 630
附錄A 如何使用本書的源碼 631
附錄B 練習題 634

本目錄推薦

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