windows內(nèi)核安全與驅(qū)動(dòng)開(kāi)發(fā)是一本W(wǎng)indows客戶端安全軟件開(kāi)發(fā)指導(dǎo)書籍,由譚文,陳銘霖編著,全書主要講解的是Windows客戶端安全軟件開(kāi)發(fā)相關(guān)的驅(qū)動(dòng)程序開(kāi)發(fā),書中的程序使用環(huán)境從32位到64位,從Windows XP到Windows 8都有涉及,大部分程序不經(jīng)過(guò)修改即可在Windows 10上運(yùn)行。同時(shí)本書也深入淺出地介紹了進(jìn)行內(nèi)核安全編程所需要的操作系統(tǒng)、匯編等基礎(chǔ)知識(shí),適用于計(jì)算機(jī)安全軟件從業(yè)人員、計(jì)算機(jī)相關(guān)專業(yè)院校學(xué)生以及有一定C語(yǔ)言和操作系統(tǒng)基礎(chǔ)知識(shí)的編程愛(ài)好者閱讀。
2、如果打不開(kāi)本文件,請(qǐng)務(wù)必下載pdf閱讀器
3、安裝后,在打開(kāi)解壓得出的pdf文件
4、雙擊進(jìn)行閱讀
收起介紹展開(kāi)介紹
內(nèi)容簡(jiǎn)介
windows內(nèi)核安全與驅(qū)動(dòng)開(kāi)發(fā)共分三篇,基礎(chǔ)篇囊括了驅(qū)動(dòng)開(kāi)發(fā)的基礎(chǔ)知識(shí),降低了入門的難度;開(kāi)發(fā)篇介紹了在實(shí)際工作中可能遇到的各種開(kāi)發(fā)需求的技術(shù)實(shí)現(xiàn),包括:串口的過(guò)濾、鍵盤的過(guò)濾、磁盤的虛擬、磁盤的過(guò)濾、文件系統(tǒng)的過(guò)濾與監(jiān)控、文件系統(tǒng)透明加密、文件系統(tǒng)微過(guò)濾驅(qū)動(dòng)、網(wǎng)絡(luò)傳輸層過(guò)濾、Windows過(guò)濾平臺(tái)、NDIS協(xié)議驅(qū)動(dòng)、NDIS小端口驅(qū)動(dòng)、NDIS中間層驅(qū)動(dòng)、IA-32匯編基礎(chǔ)、IA-32體系中的內(nèi)存地址、處理器權(quán)限級(jí)別切換、IA-32體系結(jié)構(gòu)中的中斷和Windows內(nèi)核掛鉤;高級(jí)篇包含了匯編語(yǔ)言、操作系統(tǒng)原理、處理器體系架構(gòu)相關(guān)的內(nèi)容。作者簡(jiǎn)介
譚文,畢業(yè)于西安交通大學(xué)。2002-2005:杭州核新軟件技術(shù)有限公司,虛擬磁盤與防火墻項(xiàng)目組。2005-2008:日電卓越軟件(北京)有限公司上海分公司,信息安全課。2008-今:英特爾亞太研發(fā)有限公司,動(dòng)態(tài)指令轉(zhuǎn)換(BTPI)項(xiàng)目組。Windows內(nèi)核安全與驅(qū)動(dòng)開(kāi)發(fā)章節(jié)目錄
第1章 內(nèi)核上機(jī)指導(dǎo) 2 1.1 下載和使用WDK 2 1.1.1 下載并安裝WDK 2 1.1.2 編寫第一個(gè)C文件 4 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)行 8 1.3 調(diào)試內(nèi)核模塊 9 1.3.1 下載和安裝WinDbg 9 1.3.2 設(shè)置Windows XP調(diào)試執(zhí)行 9 1.3.3 設(shè)置Vista調(diào)試執(zhí)行 10 1.3.4 設(shè)置VMware的管道虛擬串口 11 1.3.5 設(shè)置Windows內(nèi)核符號(hào)表 12 1.3.6 實(shí)戰(zhàn)調(diào)試first 13 第2章 內(nèi)核編程環(huán)境及其特殊性 16 2.1 內(nèi)核編程的環(huán)境 16 2.1.1 隔離的應(yīng)用程序 16 2.1.2 共享的內(nèi)核空間 17 2.1.3 處不在的內(nèi)核模塊 18 2.2 數(shù)據(jù)類型 19 2.2.1 基本數(shù)據(jù)類型 19 2.2.2 返回狀態(tài) 19 2.2.3 字符串 20 2.3 重要的數(shù)據(jù)結(jié)構(gòu) 21 2.3.1 驅(qū)動(dòng)對(duì)象 21 2.3.2 設(shè)備對(duì)象 22 2.3.3 請(qǐng)求 24 2.4 函數(shù)調(diào)用 25 2.4.1 查閱幫助 25 2.4.2 幫助中有的幾類函數(shù) 26 2.4.3 幫助中沒(méi)有的函數(shù) 28 2.5 Windows的驅(qū)動(dòng)開(kāi)發(fā)模型 29 2.6 WDK編程中的特殊點(diǎn) 30 2.6.1 內(nèi)核編程的主要調(diào)用源 30 2.6.2 函數(shù)的多線程安全性 30 2.6.3 代碼的中斷級(jí) 32 2.6.4 WDK中出現(xiàn)的特殊代碼 32 第3章 字符串與鏈表 35 3.1 字符串操作 35 3.1.1 使用字符串結(jié)構(gòu) 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷貝 37 3.1.4 字符串的連接 38 3.1.5 字符串的打印 38 3.2 內(nèi)存與鏈表 40 3.2.1 內(nèi)存的分配與釋放 40 3.2.2 使用LIST_ENTRY 41 3.2.3 使用長(zhǎng)長(zhǎng)整型數(shù)據(jù) 43 3.3 自旋鎖 44 3.3.1 使用自旋鎖 44 3.3.2 在雙向鏈表中使用自旋鎖 45 3.3.3 使用隊(duì)列自旋鎖提高性能 46 第4章 文件、注冊(cè)表、線程 47 4.1 文件操作 47 4.1.1 使用OBJECT_ATTRIBUTES 47 4.1.2 打開(kāi)和關(guān)閉文件 48 4.1.3 文件讀/寫操作 51 4.2 注冊(cè)表操作 53 4.2.1 注冊(cè)表鍵的打開(kāi) 53 4.2.2 注冊(cè)表鍵值的讀 55 4.2.3 注冊(cè)表鍵值的寫 57 4.3 時(shí)間與定時(shí)器 58 4.3.1 獲得當(dāng)前“滴答”數(shù) 58 4.3.2 獲得當(dāng)前系統(tǒng)時(shí)間 58 4.3.3 使用定時(shí)器 59 4.4 線程與事件 62 4.4.1 使用系統(tǒng)線程 62 4.4.2 在線程中睡眠 63 4.4.3 使用同步事件 64 第5章 應(yīng)用與內(nèi)核通信 67 5.1 內(nèi)核方面的編程 68 5.1.1 生成控制設(shè)備 68 5.1.2 控制設(shè)備的名字和符號(hào)鏈接 70 5.1.3 控制設(shè)備的刪除 71 5.1.4 分發(fā)函數(shù) 72 5.1.5 請(qǐng)求的處理 73 5.2 應(yīng)用方面的編程 74 5.2.1 基本的功能需求 74 5.2.2 在應(yīng)用程序中打開(kāi)與關(guān)閉設(shè)備 75 5.2.3 設(shè)備控制請(qǐng)求 75 5.2.4 內(nèi)核中的對(duì)應(yīng)處理 77 5.2.5 結(jié)合測(cè)試的效果 79 5.3 阻塞、等待與安全設(shè)計(jì) 80 5.3.1 驅(qū)動(dòng)主動(dòng)通知應(yīng)用 80 5.3.2 通信接口的測(cè)試 81 5.3.3 內(nèi)核中的緩沖區(qū)鏈表結(jié)構(gòu) 83 5.3.4 輸入:內(nèi)核中的請(qǐng)求處理中的安全檢查 84 5.3.5 輸出處理與卸載清理 85 第6章 64位和32位內(nèi)核開(kāi)發(fā)差異 88 6.1 64位系統(tǒng)新增機(jī)制 88 6.1.1 WOW64子系統(tǒng) 88 6.1.2 PatchGuard技術(shù) 91 6.1.3 64位驅(qū)動(dòng)的編譯、安裝與運(yùn)行 91 6.2 編程差異 92 6.2.1 匯編嵌入變化 92 6.2.2 預(yù)處理與條件編譯 93 6.2.3 數(shù)據(jù)結(jié)構(gòu)調(diào)整 93 開(kāi) 發(fā) 篇 第7章 串口的過(guò)濾 96 7.1 過(guò)濾的概念 96 7.1.1 設(shè)備綁定的內(nèi)核API之一 97 7.1.2 設(shè)備綁定的內(nèi)核API之二 98 7.1.3 生成過(guò)濾設(shè)備并綁定 98 7.1.4 從名字獲得設(shè)備對(duì)象 100 7.1.5 綁定所有串口 101 7.2 獲得實(shí)際數(shù)據(jù) 102 7.2.1 請(qǐng)求的區(qū)分 102 7.2.2 請(qǐng)求的結(jié)局 103 7.2.3 寫請(qǐng)求的數(shù)據(jù) 104 7.3 完整的代碼 105 7.3.1 完整的分發(fā)函數(shù) 105 7.3.2 如何動(dòng)態(tài)卸載 106 7.3.3 代碼的編譯與運(yùn)行 107 第8章 鍵盤的過(guò)濾 109 8.1 技術(shù)原理 110 8.1.1 預(yù)備知識(shí) 110 8.1.2 Windows中從擊鍵到內(nèi)核 110 8.1.3 鍵盤硬件原理 112 8.2 鍵盤過(guò)濾的框架 112 8.2.1 找到所有的鍵盤設(shè)備 112 8.2.2 應(yīng)用設(shè)備擴(kuò)展 115 8.2.3 鍵盤過(guò)濾模塊的DriverEntry 117 8.2.4 鍵盤過(guò)濾模塊的動(dòng)態(tài)卸載 117 8.3 鍵盤過(guò)濾的請(qǐng)求處理 119 8.3.1 通常的處理 119 8.3.2 PNP的處理 120 8.3.3 讀的處理 121 8.3.4 讀完成的處理 122 8.4 從請(qǐng)求中打印出按鍵信息 123 8.4.1 從緩沖區(qū)中獲得KEYBOARD_INPUT_DATA 123 8.4.2 從KEYBOARD_INPUT_DATA中得到鍵 124 8.4.3 從MakeCode到實(shí)際字符 124 8.5 Hook分發(fā)函數(shù) 126 8.5.1 獲得類驅(qū)動(dòng)對(duì)象 126 8.5.2 修改類驅(qū)動(dòng)的分發(fā)函數(shù)指針 127 8.5.3 類驅(qū)動(dòng)之下的端口驅(qū)動(dòng) 128 8.5.4 端口驅(qū)動(dòng)和類驅(qū)動(dòng)之間的協(xié)作機(jī)制 129 8.5.5 找到關(guān)鍵的回調(diào)函數(shù)的條件 129 8.5.6 定義常數(shù)和數(shù)據(jù)結(jié)構(gòu) 130 8.5.7 打開(kāi)兩種鍵盤端口驅(qū)動(dòng)尋找設(shè)備 131 8.5.8 搜索在KbdClass類驅(qū)動(dòng)中的地址 133 8.6 Hook鍵盤中斷反過(guò)濾 135 8.6.1 中斷:IRQ和INT 136 8.6.2 如何修改IDT 136 8.6.3 替換IDT中的跳轉(zhuǎn)地址 137 8.6.4 QQ的PS/2反過(guò)濾措施 139 8.7 直接用端口操作鍵盤 139 8.7.1 讀取鍵盤數(shù)據(jù)和命令端口 139 8.7.2 p2cUserFilter的最終實(shí)現(xiàn) 140 第9章 磁盤的虛擬 143 9.1 虛擬的磁盤 143 9.2 一個(gè)具體的例子 143 9.3 入口函數(shù) 144 9.3.1 入口函數(shù)的定義 144 9.3.2 Ramdisk驅(qū)動(dòng)的入口函數(shù) 145 9.4 EvtDriverDeviceAdd函數(shù) 146 9.4.1 EvtDriverDeviceAdd的定義 146 9.4.2 局部變量的聲明 146 9.4.3 磁盤設(shè)備的創(chuàng)建 147 9.4.4 如何處理發(fā)往設(shè)備的請(qǐng)求 148 9.4.5 用戶配置的初始化 149 9.4.6 鏈接給應(yīng)用程序 151 9.4.7 小結(jié) 152 9.5 FAT12/16磁盤卷初始化 152 9.5.1 磁盤卷結(jié)構(gòu)簡(jiǎn)介 152 9.5.2 Ramdisk對(duì)磁盤的初始化 154 9.6 驅(qū)動(dòng)中的請(qǐng)求處理 160 9.6.1 請(qǐng)求的處理 160 9.6.2 讀/寫請(qǐng)求 160 9.6.3 DeviceIoControl請(qǐng)求 162 9.7 Ramdisk的編譯和安裝 164 9.7.1 編譯 164 9.7.2 安裝 164 9.7.3 對(duì)安裝的深入探究 165 第10章 磁盤的過(guò)濾 167 10.1 磁盤過(guò)濾驅(qū)動(dòng)的概念 167 10.1.1 設(shè)備過(guò)濾和類過(guò)濾 167 10.1.2 磁盤設(shè)備和磁盤卷設(shè)備過(guò)濾驅(qū)動(dòng) 167 10.1.3 注冊(cè)表和磁盤卷設(shè)備過(guò)濾驅(qū)動(dòng) 168 10.2 具有還原功能的磁盤卷過(guò)濾驅(qū)動(dòng) 168 10.2.1 簡(jiǎn)介 168 10.2.2 基本思想 169 10.3 驅(qū)動(dòng)分析 169 10.3.1 DriverEntry函數(shù) 169 10.3.2 AddDevice函數(shù) 170 10.3.3 PnP請(qǐng)求的處理 174 10.3.4 Power請(qǐng)求的處理 178 10.3.5 DeviceIoControl請(qǐng)求的處理 178 10.3.6 bitmap的作用和分析 182 10.3.7 boot驅(qū)動(dòng)完成回調(diào)函數(shù)和稀疏文件 187 10.3.8 讀/寫請(qǐng)求的處理 190 第11章 文件系統(tǒng)的過(guò)濾與監(jiān)控 199 11.1 文件系統(tǒng)的設(shè)備對(duì)象 200 11.1.1 控制設(shè)備與卷設(shè)備 200 11.1.2 生成自己的一個(gè)控制設(shè)備 201 11.2 文件系統(tǒng)的分發(fā)函數(shù) 202 11.2.1 普通的分發(fā)函數(shù) 202 11.2.2 文件過(guò)濾的快速IO分發(fā)函數(shù) 203 11.2.3 快速IO分發(fā)函數(shù)的一個(gè)實(shí)現(xiàn) 205 11.2.4 快速IO分發(fā)函數(shù)逐個(gè)簡(jiǎn)介 206 11.3 設(shè)備的綁定前期工作 207 11.3.1 動(dòng)態(tài)地選擇綁定函數(shù) 207 11.3.2 注冊(cè)文件系統(tǒng)變動(dòng)回調(diào) 208 11.3.3 文件系統(tǒng)變動(dòng)回調(diào)的一個(gè)實(shí)現(xiàn) 209 11.3.4 文件系統(tǒng)識(shí)別器 211 11.4 文件系統(tǒng)控制設(shè)備的綁定 212 11.4.1 生成文件系統(tǒng)控制設(shè)備的過(guò)濾設(shè)備 212 11.4.2 綁定文件系統(tǒng)控制設(shè)備 213 11.4.3 利用文件系統(tǒng)控制請(qǐng)求 215 11.5 文件系統(tǒng)卷設(shè)備的綁定 217 11.5.1 從IRP中獲得VPB指針 217 11.5.2 設(shè)置完成函數(shù)并等待IRP完成 218 11.5.3 卷掛載IRP完成后的工作 221 11.5.4 完成函數(shù)的相應(yīng)實(shí)現(xiàn) 223 11.5.5 綁定卷的實(shí)現(xiàn) 224 11.6 讀/寫操作的過(guò)濾 226 11.6.1 設(shè)置一個(gè)讀處理函數(shù) 226 11.6.2 設(shè)備對(duì)象的區(qū)分處理 227 11.6.3 解析讀請(qǐng)求中的文件信息 228 11.6.4 讀請(qǐng)求的完成 230 11.7 其他操作的過(guò)濾 234 11.7.1 文件對(duì)象的生存周期 234 11.7.2 文件的打開(kāi)與關(guān)閉 235 11.7.3 文件的刪除 237 11.8 路徑過(guò)濾的實(shí)現(xiàn) 238 11.8.1 取得文件路徑的三種情況 238 11.8.2 打開(kāi)成功后獲取路徑 238 11.8.3 在其他時(shí)刻獲得文件路徑 240 11.8.4 在打開(kāi)請(qǐng)求完成之前獲得路徑名 240 11.8.5 把短名轉(zhuǎn)換為長(zhǎng)名 242 11.9 把sfilter編譯成靜態(tài)庫(kù) 243 11.9.1 如何方便地使用sfilter 243 11.9.2 初始化回調(diào)、卸載回調(diào)和綁定回調(diào) 244 11.9.3 綁定與回調(diào) 245 11.9.4 插入請(qǐng)求回調(diào) 246 11.9.5 如何利用sfilter.lib 249 第12章 文件系統(tǒng)透明加密 252 12.1 文件透明加密的應(yīng)用 252 12.1.1 防止企業(yè)信息泄密 252 12.1.2 文件透明加密防止企業(yè)信息泄密 253 12.1.3 文件透明加密軟件的例子 253 12.2 區(qū)分進(jìn)程 254 12.2.1 機(jī)密進(jìn)程與普通進(jìn)程 254 12.2.2 找到進(jìn)程名字的位置 255 12.2.3 得到當(dāng)前進(jìn)程的名字 256 12.3 內(nèi)存映射與文件緩沖 257 12.3.1 記事本的內(nèi)存映射文件 257 12.3.2 Windows的文件緩沖 258 12.3.3 文件緩沖:明文還是密文的選擇 259 12.3.4 清除文件緩沖 260 12.4 加密標(biāo)識(shí) 263 12.4.1 保存在文件外、文件頭還是文件尾 263 12.4.2 隱藏文件頭的大小 264 12.4.3 隱藏文件頭的設(shè)置偏移 266 12.4.4 隱藏文件頭的讀/寫偏移 267 12.5 文件加密表 267 12.5.1 何時(shí)進(jìn)行加密操作 267 12.5.2 文件控制塊與文件對(duì)象 268 12.5.3 文件加密表的數(shù)據(jù)結(jié)構(gòu)與初始化 269 12.5.4 文件加密表的操作:查詢 270 12.5.5 文件加密表的操作:添加 271 12.5.6 文件加密表的操作:刪除 272 12.6 文件打開(kāi)處理 273 12.6.1 直接發(fā)送IRP進(jìn)行查詢與設(shè)置操作 274 12.6.2 直接發(fā)送IRP進(jìn)行讀/寫操作 276 12.6.3 文件的非重入打開(kāi) 277 12.6.4 文件的打開(kāi)預(yù)處理 280 12.7 讀/寫加密和解密 285 12.7.1 在讀取時(shí)進(jìn)行解密 285 12.7.2 分配與釋放MDL 286 12.7.3 寫請(qǐng)求加密 287 12.8 crypt_file的組裝 289 12.8.1 crypt_file的初始化 289 12.8.2 crypt_file的IRP預(yù)處理 290 12.8.3 crypt_file的IRP后處理 293 第13章 文件系統(tǒng)微過(guò)濾驅(qū)動(dòng) 297 13.1 文件系統(tǒng)微過(guò)濾驅(qū)動(dòng)簡(jiǎn)介 297 13.1.1 文件系統(tǒng)微過(guò)濾驅(qū)動(dòng)的由來(lái) 297 13.1.2 Minifilter的優(yōu)點(diǎn)與不足 298 13.2 Minifilter的編程框架 298 13.2.1 微文件系統(tǒng)過(guò)濾的注冊(cè) 299 13.2.2 微過(guò)濾器的數(shù)據(jù)結(jié)構(gòu) 300 13.2.3 卸載回調(diào)函數(shù) 303 13.2.4 預(yù)操作回調(diào)函數(shù) 303 13.2.5 后操作回調(diào)函數(shù) 306 13.2.6 其他回調(diào)函數(shù) 307 13.3 Minifilter如何與應(yīng)用程序通信 309 13.3.1 建立通信端口的方法 310 13.3.2 在用戶態(tài)通過(guò)DLL使用通信端口的范例 311 13.4 Minifilter的安裝與加載 314 13.4.1 安裝Minifilter的INF文件 314 13.4.2 啟動(dòng)安裝完成的Minifilter 316 第14章 網(wǎng)絡(luò)傳輸層過(guò)濾 317 14.1 TDI概要 317 14.1.1 為何選擇TDI 317 14.1.2 從socket到Windows內(nèi)核 318 14.1.3 TDI過(guò)濾的代碼例子 319 14.2 TDI的過(guò)濾框架 319 14.2.1 綁定TDI的設(shè)備 319 14.2.2 唯一的分發(fā)函數(shù) 320 14.2.3 過(guò)濾框架的實(shí)現(xiàn) 322 14.2.4 主要過(guò)濾的請(qǐng)求類型 323 14.3 生成請(qǐng)求:獲取地址 324 14.3.1 過(guò)濾生成請(qǐng)求 324 14.3.2 準(zhǔn)備解析IP地址與端口 326 14.3.3 獲取生成的IP地址和端口 327 14.3.4 連接終端的生成與相關(guān)信息的保存 329 14.4 控制請(qǐng)求 330 14.4.1 TDI_ASSOCIATE_ADDRESS的過(guò)濾 330 14.4.2 TDI_CONNECT的過(guò)濾 332 14.4.3 其他的次功能號(hào) 333 14.4.4 設(shè)置事件的過(guò)濾 334 14.4.5 TDI_EVENT_CONNECT類型的設(shè)置事件的過(guò)濾 336 14.4.6 直接獲取發(fā)送函數(shù)的過(guò)濾 337 14.4.7 清理請(qǐng)求的過(guò)濾 339 14.5 本書例子tdifw.lib的應(yīng)用 341 14.5.1 tdifw庫(kù)的回調(diào)接口 341 14.5.2 tdifw庫(kù)的使用例子 342 第15章 Windows過(guò)濾平臺(tái) 345 15.1 WFP簡(jiǎn)介 345 15.2 WFP框架 345 15.3 基本對(duì)象模型 347 15.3.1 過(guò)濾引擎 347 15.3.2 墊片 347 15.3.3 呼出接口 347 15.3.4 分層 348 15.3.5 子層 349 15.3.6 過(guò)濾器 350 15.3.7 呼出接口回調(diào)函數(shù) 354 15.4 WFP操作 359 15.4.1 呼出接口的注冊(cè)與卸載 360 15.4.2 呼出接口的添加與移除 360 15.4.3 子層的添加與移除 361 15.4.4 過(guò)濾器的添加 362 15.5 WFP過(guò)濾例子 362 第16章 NDIS協(xié)議驅(qū)動(dòng) 370 16.1 以太網(wǎng)包和網(wǎng)絡(luò)驅(qū)動(dòng)架構(gòu) 370 16.1.1 以太網(wǎng)包和協(xié)議驅(qū)動(dòng) 370 16.1.2 NDIS網(wǎng)絡(luò)驅(qū)動(dòng) 371 16.2 協(xié)議驅(qū)動(dòng)的DriverEntry 372 16.2.1 生成控制設(shè)備 372 16.2.2 注冊(cè)協(xié)議 374 16.3 協(xié)議與網(wǎng)卡的綁定 375 16.3.1 協(xié)議與網(wǎng)卡的綁定概念 375 16.3.2 綁定回調(diào)處理的實(shí)現(xiàn) 376 16.3.3 協(xié)議綁定網(wǎng)卡的API 378 16.3.4 解決綁定競(jìng)爭(zhēng)問(wèn)題 379 16.3.5 分配接收和發(fā)送的包池與緩沖池 380 16.3.6 OID請(qǐng)求的發(fā)送和請(qǐng)求完成回調(diào) 381 16.3.7 ndisprotCreateBinding的最終實(shí)現(xiàn) 385 16.4 綁定的解除 390 16.4.1 解除綁定使用的API 390 16.4.2 ndisprotShutdownBinding的實(shí)現(xiàn) 392 16.5 在用戶態(tài)操作協(xié)議驅(qū)動(dòng) 395 16.5.1 協(xié)議的收包與發(fā)包 395 16.5.2 在用戶態(tài)編程打開(kāi)設(shè)備 396 16.5.3 用DeviceIoControl發(fā)送控制請(qǐng)求 397 16.5.4 用WriteFile發(fā)送數(shù)據(jù)包 399 16.5.5 用ReadFile發(fā)送數(shù)據(jù)包 400 16.6 在內(nèi)核態(tài)完成功能的實(shí)現(xiàn) 402 16.6.1 請(qǐng)求的分發(fā)與實(shí)現(xiàn) 402 16.6.2 等待設(shè)備綁定完成與指定設(shè)備名 402 16.6.3 指派設(shè)備的完成 403 16.6.4 處理讀請(qǐng)求 406 16.6.5 處理寫請(qǐng)求 408 16.7 協(xié)議驅(qū)動(dòng)的接收回調(diào) 412 16.7.1 和接收包有關(guān)的回調(diào)函數(shù) 412 16.7.2 ReceiveHandler的實(shí)現(xiàn) 413 16.7.3 TransferDataCompleteHandler的實(shí)現(xiàn) 417 16.7.4 ReceivePacketHandler的實(shí)現(xiàn) 418 16.7.5 接收數(shù)據(jù)包的入隊(duì) 420 16.7.6 接收數(shù)據(jù)包的出隊(duì)和讀請(qǐng)求的完成 422 第17章 NDIS小端口驅(qū)動(dòng) 427 17.1 小端口驅(qū)動(dòng)的應(yīng)用與概述 427 17.1.1 小端口驅(qū)動(dòng)的應(yīng)用 427 17.1.2 小端口驅(qū)動(dòng)示例 428 17.1.3 小端口驅(qū)動(dòng)的運(yùn)作與編程概述 429 17.2 小端口驅(qū)動(dòng)的初始化 429 17.2.1 小端口驅(qū)動(dòng)的DriverEntry 429 17.2.2 小端口驅(qū)動(dòng)的適配器結(jié)構(gòu) 431 17.2.3 配置信息的讀取 433 17.2.4 設(shè)置小端口適配器上下文 433 17.2.5 MPInitialize的實(shí)現(xiàn) 434 17.2.6 MPHalt的實(shí)現(xiàn) 437 17.3 打開(kāi)ndisprot設(shè)備 438 17.3.1 IO目標(biāo) 438 17.3.2 給IO目標(biāo)發(fā)送DeviceIoControl請(qǐng)求 439 17.3.3 打開(kāi)ndisprot接口并完成配置設(shè)備 441 17.4 使用ndisprot發(fā)送包 443 17.4.1 小端口驅(qū)動(dòng)的發(fā)包接口 443 17.4.2 發(fā)送控制塊(TCB) 444 17.4.3 遍歷包組并填寫TCB 446 17.4.4 寫請(qǐng)求的構(gòu)建與發(fā)送 449 17.5 使用ndisprot接收包 451 17.5.1 提交數(shù)據(jù)包的內(nèi)核API 451 17.5.2 從接收控制塊(RCB)提交包 452 17.5.3 對(duì)ndisprot讀請(qǐng)求的完成函數(shù) 454 17.5.4 讀請(qǐng)求的發(fā)送 456 17.5.5 用于讀包的WDF工作任務(wù) 457 17.5.6 ndisedge讀工作任務(wù)的生成與入列 459 17.6 其他的特征回調(diào)函數(shù)的實(shí)現(xiàn) 461 17.6.1 包的歸還 461 17.6.2 OID查詢處理的直接完成 462 17.6.3 OID設(shè)置處理 465 第18章 NDIS中間層驅(qū)動(dòng) 467 18.1 NDIS中間層驅(qū)動(dòng)概述 467 18.1.1 Windows網(wǎng)絡(luò)架構(gòu)總結(jié) 467 18.1.2 NDIS中間層驅(qū)動(dòng)簡(jiǎn)介 468 18.1.3 NDIS中間層驅(qū)動(dòng)的應(yīng)用 469 18.1.4 NDIS包描述符結(jié)構(gòu)深究 470 18.2 中間層驅(qū)動(dòng)的入口與綁定 473 18.2.1 中間層驅(qū)動(dòng)的入口函數(shù) 473 18.2.2 動(dòng)態(tài)綁定NIC設(shè)備 474 18.2.3 小端口初始化(MpInitialize) 475 18.3 中間層驅(qū)動(dòng)發(fā)送數(shù)據(jù)包 477 18.3.1 發(fā)送數(shù)據(jù)包原理 477 18.3.2 包描述符“重利用” 478 18.3.3 包描述符“重申請(qǐng)” 481 18.3.4 發(fā)送數(shù)據(jù)包的異步完成 482 18.4 中間層驅(qū)動(dòng)接收數(shù)據(jù)包 484 18.4.1 接收數(shù)據(jù)包概述 484 18.4.2 用PtReceive接收數(shù)據(jù)包 485 18.4.3 用PtReceivePacket接收 490 18.4.4 對(duì)包進(jìn)行過(guò)濾 491 18.5 中間層驅(qū)動(dòng)程序查詢和設(shè)置 494 18.5.1 查詢請(qǐng)求的處理 494 18.5.2 設(shè)置請(qǐng)求的處理 496 18.6 NDIS句柄 498 18.6.1 不可見(jiàn)的結(jié)構(gòu)指針 498 18.6.2 常見(jiàn)的NDIS句柄 499 18.6.3 NDIS句柄誤用問(wèn)題 500 18.6.4 一種解決方案 502 18.7 生成普通控制設(shè)備 503 18.7.1 在中間層驅(qū)動(dòng)中添加普通設(shè)備 503 18.7.2 使用傳統(tǒng)方法來(lái)生成控制設(shè)備 505 第19章 IA-32匯編基礎(chǔ) 511 19.1 x86內(nèi)存、寄存器與堆棧 511 19.1.1 _asm關(guān)鍵字 511 19.1.2 x86中的mov指令 512 19.1.3 x86中的寄存器與內(nèi)存 512 19.1.4 賦值語(yǔ)句的實(shí)現(xiàn) 513 19.2 x86中函數(shù)的實(shí)現(xiàn) 514 19.2.1 一個(gè)函數(shù)的例子 514 19.2.2 堆棧的介紹 515 19.2.3 寄存器的備份和恢復(fù) 516 19.2.4 內(nèi)部變量與返回值 518 19.3 x86中函數(shù)的調(diào)用與返回 521 19.3.1 函數(shù)的調(diào)用指令call 521 19.3.2 通過(guò)堆棧傳遞參數(shù) 521 19.3.3 從函數(shù)返回 523 19.3.4 三種常見(jiàn)的調(diào)用協(xié)議 524 19.4 從32位匯編到64位匯編 526 19.4.1 Intel 64與IA-32體系架構(gòu)簡(jiǎn)介 526 19.4.2 64位指令與32位指令 526 19.4.3 通用寄存器 527 19.5 64位下的函數(shù)實(shí)現(xiàn) 528 19.5.1 函數(shù)概覽 528 19.5.2 32位參數(shù)的傳遞 529 19.5.3 64位參數(shù)與返回值 530 19.5.4 棧空間的開(kāi)辟與恢復(fù) 531 第20章 IA-32體系中的內(nèi)存地址 534 20.1 內(nèi)存的虛擬地址 534 20.1.1 C語(yǔ)言中的內(nèi)存地址 534 20.1.2 虛擬地址的構(gòu)成 535 20.1.3 段的選擇 536 20.2 全局描述符表和段描述符 538 20.2.1 全局描述符表 538 20.2.2 段類型 539 20.2.3 段寄存器與段選擇子 540 20.2.4 64位模式下的段 541 20.3 分段編程實(shí)踐 542 20.3.1 系統(tǒng)表寄存器的結(jié)構(gòu) 542 20.3.2 在匯編語(yǔ)言中獲取全局描述表的位置 543 20.3.3 調(diào)試范例:sgdt指令的錯(cuò)誤使用 545 20.3.4 在64位下獲得全局描述符表 547 20.4 線性地址基礎(chǔ) 549 20.4.1 分頁(yè)控制機(jī)制 550 20.4.2 線性地址的轉(zhuǎn)換 551 20.4.3 混合頁(yè)面大小 552 20.4.4 32位物理地址的頁(yè)目錄和頁(yè)表項(xiàng) 552 20.5 各種特殊分頁(yè)方式 555 20.5.1 PAE分頁(yè)方式 555 20.5.2 PSE-36分頁(yè)機(jī)制 558 20.5.3 IA-32e模式下的線性地址 559 20.6 分頁(yè)編程實(shí)踐 562 20.6.1 頁(yè)目錄和頁(yè)目錄指針表的獲取 562 20.6.2 頁(yè)表的獲取 564 20.6.3 線性地址的結(jié)構(gòu) 567 第21章 處理器權(quán)限級(jí)別切換 571 21.1 Ring0和Ring3權(quán)限級(jí)別 571 21.2 保護(hù)模式下的分頁(yè)內(nèi)存保護(hù) 572 21.3 分頁(yè)內(nèi)存不可執(zhí)行保護(hù) 574 21.3.1 不可執(zhí)行保護(hù)原理 574 21.3.2 不可執(zhí)行保護(hù)的漏洞 575 21.3.3 上機(jī)實(shí)踐 577 21.4 權(quán)限級(jí)別的切換 579 21.4.1 調(diào)用門及其漏洞 579 21.4.2 sysenter和sysexit指令 581 21.4.3 上機(jī)實(shí)踐 583 第22章 IA-32體系結(jié)構(gòu)中的中斷 585 22.1 中斷基礎(chǔ)知識(shí) 585 22.1.1 中斷描述符表 585 22.1.2 中斷處理過(guò)程 587 22.1.3 64位模式下的中斷處理機(jī)制 589 22.1.4 多核下的中斷 589 22.2 Windows中斷機(jī)制 593 22.3 中斷編程實(shí)踐 596 22.3.1 IDT Hook 596 22.3.2 巧用IDT Hook實(shí)現(xiàn)安全防護(hù) 598 第23章 Windows內(nèi)核掛鉤 601 23.1 系統(tǒng)服務(wù)描述符表掛鉤 602 23.1.1 系統(tǒng)服務(wù)描述符表(SSDT) 602 23.1.2 系統(tǒng)服務(wù)描述符表掛鉤的意圖 603 23.1.3 尋找要掛鉤的函數(shù)的地址 604 23.1.4 函數(shù)被掛鉤的過(guò)程 605 23.1.5 具體實(shí)現(xiàn)的代碼 606 23.2 函數(shù)導(dǎo)出表掛鉤 608 23.2.1 內(nèi)核函數(shù)的種類 608 23.2.2 掛鉤IoCallDriver 610 23.2.3 對(duì)跳轉(zhuǎn)地址進(jìn)行修改 611 23.3 Windows 7系統(tǒng)下IofCallDriver的跟蹤 612 23.4 Windows 7系統(tǒng)下內(nèi)聯(lián)掛鉤 615 23.4.1 寫入跳轉(zhuǎn)指令并拷貝代碼 615 23.4.2 實(shí)現(xiàn)中繼函數(shù) 617 高 級(jí) 篇 第24章 Windows通知與回調(diào) 620 24.1 Windows的事件通知與回調(diào) 620 24.2 常用的事件通知 620 24.2.1 創(chuàng)建進(jìn)程通知 621 24.2.2 創(chuàng)建線程通知 625 24.2.3 加載模塊通知 626 24.2.4 注冊(cè)表操作通知 629 24.3 Windows回調(diào)機(jī)制 636 24.3.1 回調(diào)對(duì)象 636 24.3.2 回調(diào)對(duì)象的創(chuàng)建 637 24.3.3 回調(diào)對(duì)象的注冊(cè) 637 24.3.4 回調(diào)的通告 638 24.4 安全的死角,回調(diào)的應(yīng)用 639 第25章 保護(hù)進(jìn)程 640 25.1 內(nèi)核對(duì)象簡(jiǎn)介 640 25.2 內(nèi)核對(duì)象的結(jié)構(gòu) 641 25.3 保護(hù)內(nèi)核對(duì)象 642 25.3.1 處理對(duì)象的打開(kāi) 643 25.3.2 處理句柄的復(fù)制 644 25.3.3 處理句柄的繼承 646 25.4 進(jìn)程的保護(hù) 652 25.4.1 保護(hù)原理 652 25.4.2 Vista以后的進(jìn)程對(duì)象保護(hù) 654 25.4.3 進(jìn)程的其他保護(hù) 655 附錄A 如何使用本書的源碼光盤 656 附錄B 練習(xí)題 659
使用說(shuō)明
1、下載并解壓,得出pdf文件2、如果打不開(kāi)本文件,請(qǐng)務(wù)必下載pdf閱讀器
3、安裝后,在打開(kāi)解壓得出的pdf文件
4、雙擊進(jìn)行閱讀
- 下載地址
windows內(nèi)核安全與驅(qū)動(dòng)開(kāi)發(fā) 譚文 陳銘霖pdf掃描版
- 本地下載通道:
- 廣東電信下載
- 江蘇電信下載
- 浙江電信下載
- 山東聯(lián)通下載
有問(wèn)題? 點(diǎn)此報(bào)錯(cuò)
發(fā)表評(píng)論
0條評(píng)論軟件排行榜
熱門推薦
- 南方Plus電腦版 v11.8.027.22M / 簡(jiǎn)體中文
- 有柿電腦版 v11.5.684.06M / 簡(jiǎn)體中文
- 瀟湘書院電腦版 v2.3.11.888官方版49.65M / 簡(jiǎn)體中文
- 開(kāi)源閱讀電腦版 v3.2517.96M / 簡(jiǎn)體中文
- PHP語(yǔ)言精粹電子書 pdf掃描版25.72M / 簡(jiǎn)體中文
- 本草綱目 5.34M / 簡(jiǎn)體中文
- docker入門實(shí)戰(zhàn) pdf完整版1.38M / 簡(jiǎn)體中文
- Scala程序設(shè)計(jì)第二版 pdf高清完整版15.83M / 簡(jiǎn)體中文
- C++黑客編程揭秘與防范第2版 冀云pdf掃描版54.58M / 簡(jiǎn)體中文
- HotSpot實(shí)戰(zhàn)(陳濤著) 中文pdf掃描版82M / 簡(jiǎn)體中文