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