出版時(shí)間:2008-10 出版社:電子工業(yè)出版社 作者:譚文,邵堅(jiān)磊 著 頁(yè)數(shù):270
Tag標(biāo)簽:無(wú)
前言
Windows是龐大復(fù)雜的系統(tǒng)。由于Windows并不公開(kāi)源代碼,我們?cè)谡{(diào)試程序的時(shí)候,往往就調(diào)到自己未知的領(lǐng)域去了。沒(méi)有C代碼,只能看到令人眼花繚亂的匯編指令和機(jī)器碼。我曾對(duì)它們望而生畏,敬而遠(yuǎn)之。尤其在這個(gè)黑客、破解、病毒、木馬橫行的時(shí)代,如果作為安全軟件的開(kāi)發(fā)者,同樣不能期盼病毒的作者提供可以閱讀的高級(jí)語(yǔ)言代碼?! ∪绻切〇|西,也和C語(yǔ)言一樣親切易懂,那多么好??!這樣的話,即便是Windows這樣龐大復(fù)雜而且封閉的系統(tǒng),或者是再詭異和隱蔽的破壞技術(shù),至少只要我愿意去探索,對(duì)我來(lái)說(shuō)就不再有秘密可言。 其實(shí)這個(gè)夢(mèng)想并非不切實(shí)際。既然我們能讀懂C代碼,何以就不能讀懂匯編呢?很多高手眼中,機(jī)器指令和C代碼一樣熟悉?! ∵@本書(shū)并沒(méi)有系統(tǒng)地介紹Windows系統(tǒng)底層。但是我嘗試尋找正確的方法和手段,為讀者打開(kāi)Windows底層知識(shí)寶庫(kù)的大門(mén),使讀者可以在其中自由閱讀,自己去獲取所需知識(shí)。
內(nèi)容概要
本書(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ī)專(zhuān)業(yè)的有志于軟件開(kāi)發(fā)的大中院校學(xué)生;專(zhuān)業(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ū)籍目錄
入手篇 熟悉匯編 第1章 匯編指令與C語(yǔ)言 1.1 上機(jī)建立第一個(gè)工程 1.1.1 用Visual Studio創(chuàng)建工程 1.1.2 用Visual Studio查看匯編代碼 1.2 簡(jiǎn)要復(fù)習(xí)常用的匯編指令 1.2.1 堆棧相關(guān)指令 1.2.2 數(shù)據(jù)傳送指令 1.2.3 跳轉(zhuǎn)與比較指令 1.3 C函數(shù)的參數(shù)傳遞過(guò)程 第2章 C語(yǔ)言的流程和處理 2.1 C語(yǔ)言的循環(huán)反匯編 2.1.1 for循環(huán) 2.1.2 do循環(huán) 2.1.3 while循環(huán) 2.2 C語(yǔ)言判斷與分支的反匯編 2.2.1 if-else判斷分支 2.2.2 switch-case判斷分支 2.3 C語(yǔ)言的數(shù)組與結(jié)構(gòu) 2.4 C語(yǔ)言的共用體和枚舉類(lèi)型 第3章 練習(xí)反匯編C語(yǔ)言程序 3.1 算法的反匯編 3.1.1 算法反匯編代碼分析 3.1.2 算法反匯編閱讀技巧 3.2 發(fā)行版的反匯編 3.3 匯編反C語(yǔ)言練習(xí)基礎(chǔ)篇 內(nèi)核編程 第4章 內(nèi)核字符串與內(nèi)存 4.1 字符串的處理 4.1.1 使用字符串結(jié)構(gòu) 4.1.2 字符串的初始化 4.1.3 字符串的拷貝 4.1.4 字符串的連接 4.1.5 字符串的打印 4.2 內(nèi)存與鏈表 4.2.1 內(nèi)存的分配與釋放 4.2.2 使用LIST_ENTRY 4.2.3 使用長(zhǎng)長(zhǎng)整型數(shù)據(jù) 4.2.4 使用自選鎖 第5章 文件與注冊(cè)表操作 5.1 文件操作 5.1.1 使用OBJECT_ATTRIBUTES 5.1.2 打開(kāi)和關(guān)閉文件 5.1.3 文件讀/寫(xiě)操作 5.2 注冊(cè)表操作 5.2.1 注冊(cè)表鍵的打開(kāi) 5.2.2 注冊(cè)表值的讀 5.2.3 注冊(cè)表值的寫(xiě) 第6章 時(shí)間與線程 6.1 時(shí)間與定時(shí)器 6.1.1 獲得當(dāng)前滴答數(shù) 6.1.2 獲得當(dāng)前系統(tǒng)時(shí)間 6.1.3 使用定時(shí)器 6.2 線程與事件 6.2.1 使用系統(tǒng)線程 6.2.2 在線程中睡眠 6.2.3 使用同步事件 第7章 驅(qū)動(dòng)、設(shè)備與請(qǐng)求 7.1 驅(qū)動(dòng)與設(shè)備 7.1.1 驅(qū)動(dòng)入口與驅(qū)動(dòng)對(duì)象 7.1.2 分發(fā)函數(shù)和卸載函數(shù) 7.1.3 設(shè)備與符號(hào)鏈接 7.1.4 設(shè)備的安全創(chuàng)建 7.1.5 設(shè)備與符號(hào)鏈接的用戶相關(guān)性 7.2 請(qǐng)求處理 7.2.1 IRP與IO_STACK_LOCATION 7.2.2 打開(kāi)與關(guān)閉請(qǐng)求的處理 7.2.3 應(yīng)用層信息傳入 7.2.4 驅(qū)動(dòng)層信息傳出探索篇 研究?jī)?nèi)核 第8章 進(jìn)入Windows內(nèi)核 8.1 開(kāi)始Windows內(nèi)核編程 8.1.1 內(nèi)核編程的環(huán)境準(zhǔn)備 8.1.2 用C語(yǔ)言寫(xiě)一個(gè)內(nèi)核程序 8.2 學(xué)習(xí)用WinDbg進(jìn)行調(diào)試 8.2.1 軟件的準(zhǔn)備 8.2.2 設(shè)置Windows XP調(diào)試執(zhí)行 8.2.3 設(shè)置VMWare虛擬機(jī)調(diào)試 8.2.4 設(shè)置被調(diào)試機(jī)為Vista的情況 8.2.5 設(shè)置Windows內(nèi)核符號(hào)表 8.2.6 調(diào)試?yán)觗iskperf 8.3 認(rèn)識(shí)內(nèi)核代碼函數(shù)調(diào)用方式 8.4 嘗試反寫(xiě)C內(nèi)核代碼 8.5 如何在代碼中尋找需要的信息 第9章 用C++編寫(xiě)的內(nèi)核程序 9.1 用C++開(kāi)發(fā)內(nèi)核程序 9.1.1 建立一個(gè)C++的內(nèi)核工程 9.1.2 使用C接口標(biāo)準(zhǔn)聲明 9.1.3 使用類(lèi)靜態(tài)成員函數(shù) 9.1.4 實(shí)現(xiàn)new操作符 9.2 開(kāi)始閱讀一個(gè)反匯編的類(lèi) 9.2.1 new操作符的實(shí)現(xiàn) 9.2.2 構(gòu)造函數(shù)的實(shí)現(xiàn) 9.3 了解更多的C++特性 第10章 繼續(xù)探索Windows內(nèi)核 10.1 探索Windows已有內(nèi)核調(diào)用 10.2 自己實(shí)現(xiàn)XP的新調(diào)用 10.2.1 對(duì)照調(diào)試結(jié)果和數(shù)據(jù)結(jié)構(gòu) 10.2.2 寫(xiě)出C語(yǔ)言的對(duì)應(yīng)代碼 10.3 沒(méi)有符號(hào)表的情況 10.4 64位操作系統(tǒng)下的情況 10.4.1 分析64位操作系統(tǒng)的調(diào)用 10.4.2 深入了解64位內(nèi)核調(diào)用參數(shù)傳遞深入篇 修改內(nèi)核 第11章 機(jī)器碼與反匯編引擎 11.1 了解Intel的機(jī)器碼 11.1.1 可執(zhí)行指令與數(shù)據(jù) 11.1.2 單條指令的組成 11.1.3 MOD-REG-R/M的組成 11.1.4 其他的組成部分 11.2 反匯編引擎XDE32基本數(shù)據(jù)結(jié)構(gòu) 11.3 反匯編引擎XDE32具體實(shí)現(xiàn) 第12章 CPU權(quán)限級(jí)與分頁(yè)機(jī)制 12.1 Ring0和Ring3權(quán)限級(jí) 12.2 保護(hù)模式下的分頁(yè)內(nèi)存保護(hù) 12.3 分頁(yè)內(nèi)存不可執(zhí)行保護(hù) 12.3.1 不可執(zhí)行保護(hù)原理 12.3.2 不可執(zhí)行保護(hù)的漏洞 12.4 權(quán)限級(jí)別的切換 12.4.1 調(diào)用門(mén)及其漏洞 12.4.2 sysenter和sysexit指令 第13章 開(kāi)發(fā)Windows內(nèi)核Hook 13.1 XP下Hook系統(tǒng)調(diào)用IoCallDriver 13.2 Vista下IofCallDriver的跟蹤 13.3 Vista下inline hook 13.3.1 寫(xiě)入跳轉(zhuǎn)指令并拷貝代碼 13.3.2 實(shí)現(xiàn)中繼函數(shù)實(shí)戰(zhàn)篇 實(shí)際開(kāi)發(fā) 第14章 反病毒、木馬實(shí)例開(kāi)發(fā) 14.1 反病毒、木馬的設(shè)想 14.2 開(kāi)發(fā)內(nèi)核驅(qū)動(dòng) 14.2.1 在內(nèi)核中檢查可執(zhí)行文件 14.2.2 在內(nèi)核中生成設(shè)備接口 14.2.3 在內(nèi)核中等待監(jiān)控進(jìn)程的響應(yīng) 14.3 開(kāi)發(fā)監(jiān)控進(jìn)程 14.4 本軟件進(jìn)一步展望 第15章 Rootkit與HIPS 15.1 Rootkit為何很重要 15.2 Rootkit如何逃過(guò)檢測(cè) 15.3 HIPS如何檢測(cè)Rootkit 第16章 手寫(xiě)指令保護(hù)代碼 16.1 混淆字符串 16.2 隱藏內(nèi)核函數(shù) 16.3 混淆流程與數(shù)據(jù)操作 16.3.1 混淆函數(shù)出口 16.3.2 插入有意義的花指令 第17章 用VMProtect保護(hù)代碼 17.1 安裝VMProtect 17.2 使用VMProtect 17.3 查看VMProtect效果參考文獻(xiàn)
章節(jié)摘錄
第10章 繼續(xù)探索Windows內(nèi)核 10.1 探索Windows已有內(nèi)核調(diào)用 基礎(chǔ)知識(shí) 下面用本書(shū)前面介紹的知識(shí)來(lái)做一些有用的事情。Windows從2000發(fā)展到XP后,XP DDK中出現(xiàn)了一些新的調(diào)用。內(nèi)核程序開(kāi)發(fā)者有時(shí)會(huì)發(fā)現(xiàn),這些調(diào)用非常有用(這也是這些新調(diào)用產(chǎn)生的原因),但是如果使用這些調(diào)用,會(huì)導(dǎo)致驅(qū)動(dòng)在Windows 2000下無(wú)法使用。目前Windows 2000的用戶依然很多,存在這樣的可移植性問(wèn)題是非常遺憾的,退一步的方案是Windows 2000下限制某些功能。在程序中動(dòng)態(tài)加載系統(tǒng)調(diào)用,并小心地判斷當(dāng)前的版本。在Windows 2000的情況下,一些功能被跳過(guò)。這樣比前者好。但是依然不是最理想的解決方案。 有一些人開(kāi)始使用未公開(kāi)(Undocumented)的解決方案。未公開(kāi)的解決方案的危害就是,可能不兼容未來(lái)的操作系統(tǒng)。但是由于現(xiàn)在這樣做僅僅是針對(duì)一個(gè)過(guò)去版本的操作系統(tǒng),問(wèn)題就不復(fù)存在了。在新版本的操作系統(tǒng)上,調(diào)用新的系統(tǒng)調(diào)用,而在某個(gè)已經(jīng)存在而且不會(huì)再變的操作系統(tǒng)版本上,調(diào)用未公開(kāi)的方法。只要低版本操作系統(tǒng)測(cè)試無(wú)問(wèn)題,以后的也不會(huì)有問(wèn)題?! ∵@里的所謂未公開(kāi)的解決方案就是,在新版本的操作系統(tǒng)上,把新出現(xiàn)的功能調(diào)用進(jìn)行調(diào)試,了解其實(shí)現(xiàn)的方法。然后在我們自己開(kāi)發(fā)的內(nèi)核程序中,實(shí)現(xiàn)同樣的或者等價(jià)的功能,同時(shí)檢測(cè)當(dāng)前操作系統(tǒng)為低版本時(shí),調(diào)用這些特殊的代碼?! ∠旅媾e兩個(gè)例子?! ∵@個(gè)調(diào)用獲得設(shè)備棧底的設(shè)備,這對(duì)過(guò)濾驅(qū)動(dòng)非常有用。
編輯推薦
我作為驅(qū)動(dòng)開(kāi)發(fā)的老兵,深感資料缺乏的艱辛,很多信息無(wú)法在文檔中找到,此時(shí)自力更生的能力更加重要。 當(dāng)我們手中拿著神兵利器——WinDbg時(shí),一切都在掌握之中。這本書(shū)將要告訴您的不是全面的匯編知識(shí)或未公開(kāi)的Windows秘密,而是怎么從這些貌似天書(shū)的匯編代碼中,一探Windows底層的核心實(shí)現(xiàn)?! ≡陂_(kāi)發(fā)中出現(xiàn)的問(wèn)題,能不能從Windows自身找到答案?如果您正在這樣思考,無(wú)疑本書(shū)是為您度身訂做的。 本書(shū)授人以漁,也授人以魚(yú);短小精悍,讀之如一縷清風(fēng),讀罷則有醍醐灌頂之感?! ?qū)動(dòng)開(kāi)發(fā)網(wǎng)站長(zhǎng) 馬勇(znsoft)
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版