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