注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)其他編程語(yǔ)言/工具天書(shū)夜讀:從匯編語(yǔ)言到Windows內(nèi)核編程

天書(shū)夜讀:從匯編語(yǔ)言到Windows內(nèi)核編程

天書(shū)夜讀:從匯編語(yǔ)言到Windows內(nèi)核編程

定 價(jià):¥45.00

作 者: 譚文,邵堅(jiān)磊 著
出版社: 電子工業(yè)出版社
叢編項(xiàng): 驅(qū)網(wǎng)核心技術(shù)叢書(shū)
標(biāo) 簽: 程序設(shè)計(jì)

ISBN: 9787121073397 出版時(shí)間: 2008-10-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 269 字?jǐn)?shù):  

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

  本書(shū)從基本的Windows程序與匯編指令出發(fā),深入淺出地講解了Windows內(nèi)核的編程、調(diào)試、閱讀,以及自行探索的方法。讀者在使用C/C++開(kāi)發(fā)Windows程序的基礎(chǔ)上,將熟練掌握匯編和C語(yǔ)言的應(yīng)用,深入了解Windows底層,并掌握閱讀Windows內(nèi)核的基本方法,以及Windows內(nèi)核的基本編程方法。本書(shū)適合使用C/C++在Windows上編程的讀者,尤其適合希望加深自己技術(shù)功底的Windows應(yīng)用程序員、計(jì)算機(jī)專業(yè)的有志于軟件開(kāi)發(fā)的大中院校學(xué)生;專業(yè)的Windows內(nèi)核程序員,亦可從本書(shū)得到超越一般內(nèi)核程序開(kāi)發(fā)的啟發(fā)。

作者簡(jiǎn)介

  譚文:從2002年到2008年,從事信息安全類(lèi)軟件的Windows內(nèi)核驅(qū)動(dòng)的開(kāi)發(fā)工作。從2008年開(kāi)始參與一個(gè)主要涉及不同架構(gòu)之間二進(jìn)制指令的實(shí)時(shí)翻譯技術(shù)的項(xiàng)目的開(kāi)發(fā)。業(yè)余時(shí)間在驅(qū)動(dòng)開(kāi)發(fā)音(www.driverdevelop.com)以楚狂人為筆名發(fā)表了許多技術(shù)文章。

圖書(shū)目錄

入手篇  熟悉匯編
本書(shū)的第一部分,將幫助讀者消除對(duì)匯編的恐懼,熟悉匯編。本部分包括第1~3章。稍顯枯燥的是,它們和Windows內(nèi)核無(wú)關(guān),是純C語(yǔ)言與匯編語(yǔ)言的關(guān)系的章節(jié)。如果讀者已經(jīng)精通匯編語(yǔ)言,并能順利閱讀匯編代碼,請(qǐng)直接跳過(guò)本部分。
第1章  匯編指令與C語(yǔ)言 2
1.1  上機(jī)建立第一個(gè)工程 4
1.1.1  用Visual Studio創(chuàng)建工程 4
1.1.2  用Visual Studio查看匯編代碼 5
1.2  簡(jiǎn)要復(fù)習(xí)常用的匯編指令 6
1.2.1  堆棧相關(guān)指令 6
1.2.2  數(shù)據(jù)傳送指令 7
1.2.3  跳轉(zhuǎn)與比較指令 8
1.3  C函數(shù)的參數(shù)傳遞過(guò)程 9
第2章  C語(yǔ)言的流程和處理 14
2.1  C語(yǔ)言的循環(huán)反匯編 15
2.1.1  for循環(huán) 15
2.1.2  do循環(huán) 16
2.1.3  while循環(huán) 17
2.2  C語(yǔ)言判斷與分支的反匯編 18
2.2.1  if-else判斷分支 18
2.2.2  switch-case判斷分支 19
2.3  C語(yǔ)言的數(shù)組與結(jié)構(gòu) 22
2.4  C語(yǔ)言的共用體和枚舉類(lèi)型 24
第3章  練習(xí)反匯編C語(yǔ)言程序 26
3.1  算法的反匯編 27
3.1.1  算法反匯編代碼分析 27
3.1.2  算法反匯編閱讀技巧 28
3.2  發(fā)行版的反匯編 29
3.3  匯編反C語(yǔ)言練習(xí) 33
基礎(chǔ)篇  內(nèi)核編程
本書(shū)的第二部分,是編寫(xiě)Windows內(nèi)核程序編程方法的基礎(chǔ)。本部分包括第4~7章,如果讀者對(duì)Windows內(nèi)核編程已經(jīng)有一定的了解,可以跳過(guò)本部分;如果讀者從未接觸過(guò)Windows內(nèi)核編程,本部分將指導(dǎo)讀者開(kāi)始Windows內(nèi)核編程,學(xué)會(huì)使用WDK,并熟悉內(nèi)核編程的習(xí)慣與方法。
第4章  內(nèi)核字符串與內(nèi)存 38
4.1  字符串的處理 39
4.1.1  使用字符串結(jié)構(gòu) 39
4.1.2  字符串的初始化 41
4.1.3  字符串的拷貝 42
4.1.4  字符串的連接 42
4.1.5  字符串的打印 43
4.2  內(nèi)存與鏈表 45
4.2.1  內(nèi)存的分配與釋放 45
4.2.2  使用LIST_ENTRY 46
4.2.3  使用長(zhǎng)長(zhǎng)整型數(shù)據(jù) 49
4.2.4  使用自選鎖 50
第5章  文件與注冊(cè)表操作 52
5.1  文件操作 53
5.1.1  使用OBJECT_ATTRIBUTES 53
5.1.2  打開(kāi)和關(guān)閉文件 54
5.1.3  文件讀/寫(xiě)操作 58
5.2  注冊(cè)表操作 60
5.2.1  注冊(cè)表鍵的打開(kāi) 60
5.2.2  注冊(cè)表值的讀 62
5.2.3  注冊(cè)表值的寫(xiě) 65
第6章  時(shí)間與線程 67
6.1  時(shí)間與定時(shí)器 68
6.1.1  獲得當(dāng)前滴答數(shù) 68
6.1.2  獲得當(dāng)前系統(tǒng)時(shí)間 69
6.1.3  使用定時(shí)器 70
6.2  線程與事件 73
6.2.1  使用系統(tǒng)線程 73
6.2.2  在線程中睡眠 75
6.2.3  使用同步事件 76
第7章  驅(qū)動(dòng)、設(shè)備與請(qǐng)求 79
7.1  驅(qū)動(dòng)與設(shè)備 80
7.1.1  驅(qū)動(dòng)入口與驅(qū)動(dòng)對(duì)象 80
7.1.2  分發(fā)函數(shù)和卸載函數(shù) 80
7.1.3  設(shè)備與符號(hào)鏈接 82
7.1.4  設(shè)備的安全創(chuàng)建 83
7.1.5  設(shè)備與符號(hào)鏈接的用戶相關(guān)性 85
7.2  請(qǐng)求處理 86
7.2.1  IRP與IO_STACK_LOCATION 86
7.2.2  打開(kāi)與關(guān)閉請(qǐng)求的處理 88
7.2.3  應(yīng)用層信息傳入 89
7.2.4  驅(qū)動(dòng)層信息傳出 91
探索篇  研究?jī)?nèi)核
本書(shū)的第三部分,開(kāi)始探索Windows內(nèi)核程序,并嘗試閱讀反匯編代碼作為指引。本部分包括第8~10章。如果讀者對(duì)Windows內(nèi)核編程已經(jīng)有一定的了解,這一部分會(huì)比較有趣;如果讀者從未接觸過(guò)Windows內(nèi)核編程,讀者應(yīng)該先學(xué)習(xí)第二部分。能自己編寫(xiě)內(nèi)核程序并不意味著可以讀懂內(nèi)核,雖然反過(guò)來(lái)是一定成立的。讀懂別人編寫(xiě)的沒(méi)有代碼的程序,比自己編寫(xiě)更困難一些,但的確是值得的。
第8章  進(jìn)入Windows內(nèi)核 96
8.1  開(kāi)始Windows內(nèi)核編程 97
8.1.1  內(nèi)核編程的環(huán)境準(zhǔn)備 97
8.1.2  用C語(yǔ)言寫(xiě)一個(gè)內(nèi)核程序 99
8.2  學(xué)習(xí)用WinDbg進(jìn)行調(diào)試 102
8.2.1  軟件的準(zhǔn)備 102
8.2.2  設(shè)置Windows XP調(diào)試執(zhí)行 103
8.2.3  設(shè)置VMWare虛擬機(jī)調(diào)試 104
8.2.4  設(shè)置被調(diào)試機(jī)為Vista的情況 105
8.2.5  設(shè)置Windows內(nèi)核符號(hào)表 106
8.2.6  調(diào)試?yán)觗iskperf 106
8.3  認(rèn)識(shí)內(nèi)核代碼函數(shù)調(diào)用方式 107
8.4  嘗試反寫(xiě)C內(nèi)核代碼 111
8.5  如何在代碼中尋找需要的信息 113
第9章  用C++編寫(xiě)的內(nèi)核程序 117
9.1  用C++開(kāi)發(fā)內(nèi)核程序 118
9.1.1  建立一個(gè)C++的內(nèi)核工程 118
9.1.2  使用C接口標(biāo)準(zhǔn)聲明 119
9.1.3  使用類(lèi)靜態(tài)成員函數(shù) 120
9.1.4  實(shí)現(xiàn)new操作符 121
9.2  開(kāi)始閱讀一個(gè)反匯編的類(lèi) 122
9.2.1  new操作符的實(shí)現(xiàn) 122
9.2.2  構(gòu)造函數(shù)的實(shí)現(xiàn) 124
9.3  了解更多的C++特性 126
第10章  繼續(xù)探索Windows內(nèi)核 131
10.1  探索Windows已有內(nèi)核調(diào)用 132
10.2  自己實(shí)現(xiàn)XP的新調(diào)用 135
10.2.1  對(duì)照調(diào)試結(jié)果和數(shù)據(jù)結(jié)構(gòu) 135
10.2.2  寫(xiě)出C語(yǔ)言的對(duì)應(yīng)代碼 137
10.3  沒(méi)有符號(hào)表的情況 138
10.4  64位操作系統(tǒng)下的情況 141
10.4.1  分析64位操作系統(tǒng)的調(diào)用 143
10.4.2  深入了解64位內(nèi)核調(diào)用參數(shù)傳遞 145
深入篇  修改內(nèi)核
這是本書(shū)的第四部分。讀者已經(jīng)嘗試過(guò)探索Windows內(nèi)核程序,并嘗試閱讀反匯編代碼。那么接下來(lái),必須掌握修改內(nèi)核的方法。每一個(gè)Windows內(nèi)核程序,都可以看做Windows內(nèi)核本身的一個(gè)“補(bǔ)丁”。有時(shí)只需要獨(dú)立存在,就能起到它的作用;有時(shí)卻必須對(duì)已有的內(nèi)核二進(jìn)制代碼進(jìn)行部分修改。本部分包括第11~13章,主要介紹的是內(nèi)核Hook。
第11章  機(jī)器碼與反匯編引擎 150
11.1  了解Intel的機(jī)器碼 151
11.1.1  可執(zhí)行指令與數(shù)據(jù) 151
11.1.2  單條指令的組成 152
11.1.3  MOD-REG-R/M的組成 155
11.1.4  其他的組成部分 157
11.2  反匯編引擎XDE32基本數(shù)據(jù)結(jié)構(gòu) 159
11.3  反匯編引擎XDE32具體實(shí)現(xiàn) 162
第12章  CPU權(quán)限級(jí)與分頁(yè)機(jī)制 166
12.1  Ring0和Ring3權(quán)限級(jí) 167
12.2  保護(hù)模式下的分頁(yè)內(nèi)存保護(hù) 169
12.3  分頁(yè)內(nèi)存不可執(zhí)行保護(hù) 172
12.3.1  不可執(zhí)行保護(hù)原理 172
12.3.2  不可執(zhí)行保護(hù)的漏洞 173
12.4  權(quán)限級(jí)別的切換 177
12.4.1  調(diào)用門(mén)及其漏洞 178
12.4.2  sysenter和sysexit指令 181
第13章  開(kāi)發(fā)Windows內(nèi)核Hook 186
13.1  XP下Hook系統(tǒng)調(diào)用IoCallDriver 187
13.2  Vista下IofCallDriver的跟蹤 189
13.3  Vista下inline hook 193
13.3.1  寫(xiě)入跳轉(zhuǎn)指令并拷貝代碼 193
13.3.2  實(shí)現(xiàn)中繼函數(shù) 196
實(shí)戰(zhàn)篇  實(shí)際開(kāi)發(fā)
實(shí)戰(zhàn)部分是本書(shū)最深入和復(fù)雜的一部分,包括第14~17章。為了讓前面練習(xí)的成果,在實(shí)際應(yīng)用中產(chǎn)生價(jià)值,在這部分我們補(bǔ)充更多的理論知識(shí)并嘗試用它們?nèi)プ鲆稽c(diǎn)什么。這一部分包括指令分析、硬件基礎(chǔ)知識(shí)、內(nèi)核Hook的實(shí)際開(kāi)發(fā)練習(xí),以及將完成一個(gè)用到內(nèi)核Hook的有趣的實(shí)例,這個(gè)實(shí)例有助于計(jì)算機(jī)阻擋各種病毒和木馬的侵襲。
此外,本部分還包括特殊的一章,涉及如何巧妙地編寫(xiě)代碼,來(lái)防止被其他不受歡迎的讀者閱讀。這與本書(shū)的主旨完全相反,正所謂物極必反。
第14章  反病毒、木馬實(shí)例開(kāi)發(fā) 200
14.1  反病毒、木馬的設(shè)想 201
14.2  開(kāi)發(fā)內(nèi)核驅(qū)動(dòng) 204
14.2.1  在內(nèi)核中檢查可執(zhí)行文件 204
14.2.2  在內(nèi)核中生成設(shè)備接口 208
14.2.3  在內(nèi)核中等待監(jiān)控進(jìn)程的響應(yīng) 210
14.3  開(kāi)發(fā)監(jiān)控進(jìn)程 216
14.4  本軟件進(jìn)一步展望 218
第15章  Rootkit與HIPS 220
15.1  Rootkit為何很重要 222
15.2  Rootkit如何逃過(guò)檢測(cè) 224
15.3  HIPS如何檢測(cè)Rootkit 234
第16章  手寫(xiě)指令保護(hù)代碼 237
16.1  混淆字符串 238
16.2  隱藏內(nèi)核函數(shù) 244
16.3  混淆流程與數(shù)據(jù)操作 251
16.3.1  混淆函數(shù)出口 251
16.3.2  插入有意義的花指令 253
第17章  用VMProtect保護(hù)代碼 258
17.1  安裝VMProtect 259
17.2  使用VMProtect 261
17.3  查看VMProtect效果 267
參考文獻(xiàn) 270

本目錄推薦

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