-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

加密與解密(第4版)

( 簡體 字)
作者:段鋼類別:1. -> 安全 -> 加密與解密
譯者:
出版社:電子工業出版社加密與解密(第4版) 3dWoo書號: 50173
詢問書籍請說出此書號!

缺書
NT售價: 990

出版日:10/1/2018
頁數:936
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121336928
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

軟件安全是信息安全領域的重要內容,涉及軟件的逆向分析、加密、解密、漏洞分析、安全編程及病毒分析等。隨著互聯網應用的普及和企業信息化程度的不斷提升,社會和企業對安全技術人才的需求逐年增加,國內高校對信息安全學科也越來越重視,但在計算機病毒查殺、網絡安全、個人信息安全等方面的人才缺口仍然很大。習近平總書記指出,“網絡空間的競爭,歸根結底是人才競爭”。同時,著重發現、培養、輸送信息安全專業人才,已經成為各國信息安全戰略的重要組成部分。從就業的角度來看,如果能掌握信息安全相關知識和技能,從業者不但可以提高自身的職場競爭力,而且有機會發揮更大的個人潛力、獲得滿意的薪酬;從個人成長方面來說,研究信息安全技術有助于掌握許多系統底層知識,是從業者提升職業技能的重要途徑。作為一名合格的程序員,在掌握需求分析、設計模式等之外,如果能掌握一些系統底層知識,熟悉整個系統的底層結構,必將獲益良多。
本書以軟件逆向為切入點,講述了軟件安全領域相關的基礎知識和技能。讀者閱讀本書后,很容易就能在逆向分析、漏洞分析、安全編程、病毒分析等領域進行擴展。這些知識點的相互關聯,將促使讀者開闊思路,使所學融會貫通,領悟更多的學習方法,提升自身的學習能力。
《加密與解密》從第1版到今天的第4版,能夠一直陪伴讀者,完全基于廣大讀者的熱情和鼓舞,在此深表謝意。

本書的緣起
在信息社會里,安全技術變得越來越重要,如何普及安全知識是筆者始終關注的一個大問題。正是為了更好地將安全知識普及到社會各個領域的愿望,促成了本書的問世。
依托看雪學院的技術背景,由筆者主編和主導的看雪安全系列書籍,目前已出版發行了《加密與解密——軟件保護技術及完全解決方案》(簡體版,繁體版)、《加密與解密(第二版)》(簡體版,繁體版)、《加密與解密(第三版)》(簡體版,繁體版)、《軟件加密技術內幕》等;基于電子資料的形式,歷年的《看雪論壇精華集》被眾多網站轉載,保守計算,其下載量已達數百萬次,極大地推動了國內安全技術的發展。
這是一本很難寫的書。在2000年時,軟件安全是一個全新的領域,Windows 95面世之后的6年內,市面上沒有一本這方面的書,網上也缺乏相關資料。為了填補國內Windows平臺軟件安全書籍的空白,筆者與看雪論壇的一流好手努力合作,克服種種困難,于2001年9月推出了國內第一本全面介紹Windows平臺軟件安全技術的書籍,這就是本書的第1版《加密與解密——軟件保護技術及完全解決方案》。這本書一經面世,就得到了廣大讀者的喜愛和認可,獲得了2002年全國優秀暢銷書獎(科技類),在全國很多計算機專業書店獲得了極佳的銷售業績。2003年,這本書的繁體版在臺灣地區發行,受到了臺灣讀者的熱烈歡迎。
2003年6月,以第1版為基礎完成了本書的第2版。2008年,完成了本書的第3版。
現在讀者看到的這本厚重的圖書,包含了當今Windows環境下軟件逆向和保護技術的絕大部分內容。從基本的跟蹤調試到深層的虛擬機分析,從淺顯的逆向分析到中高級軟件保護,其跨度之廣、內容之深,國內尚無同類出版物能與之比肩。

第4版的變化
《加密與解密(第4版)》以第3版為基礎,刪除了第3版中的過時內容,補充了大量新的內容,結構更加合理。
1.講解通俗,突出基礎
本書增加了基礎部分的篇幅,系統講解了軟件逆向的基本流程,主要內容包括動態分析、靜態分析及逆向分析的基礎知識,重點講解了逆向分析必備工具OllyDbg、WinDbg和IDA的用法。初學者通過相關內容的學習,可以輕松入門。
2.案例豐富,覆蓋面廣
學習逆向的最好方式就是動手實踐,在實踐中有針對性地學習。本書提供了大量的案例分析,方便讀者將理論與實踐相結合,通過實際操作提高調試分析能力。
3.新增64位軟件逆向技術的相關內容
為了方便理解,書中大多數實例程序是32位的。32位平臺和64位平臺的差異主要體現在指令集、寄存器長度和調用約定等方面。對有分析基礎的讀者來說,僅需要一個熟悉過程就可以適應這些差異。新增的64位軟件逆向部分系統講解了64位逆向的基本思路,使讀者可以輕松地從32位逆向過渡到64位逆向。
4.加強系統內核相關知識的介紹
掌握系統底層技術是成為技術大牛的必經階段。本書增加了大量關于系統內核技術的介紹,包括內核基礎知識、注入技術、Hook技術及高深的VT技術。另外,對異常處理中的大部分內容進行了重寫,更新的內容包括Windows 7/8/10等系統的新特性、x64平臺上SEH的具體實現、編譯器對SEH的增強實現及SEH安全性等。
5.新增漏洞分析技術的相關內容
隨著軟件漏洞出現形式的日趨多樣化,為了區別于XSS、注入等類型的Web漏洞,將傳統的緩沖區溢出、UAF等涉及二進制編碼的漏洞統稱為二進制漏洞。本書討論的軟件漏洞都屬于二進制漏洞。
6.探討軟件保護技術的實施
本書研究了大量極具商業價值的軟件保護技術,包括反跟蹤技術、外殼編寫基礎、加密算法變形引擎、虛擬機的設計等。讀者完全可以將這些技術應用到自己的軟件保護體系中去。
7.新增電子取證技術
電子取證是指對受侵害的計算機系統進行掃描和破解,以及對入侵事件進行重建的過程,融合了計算機和刑偵兩個專業領域的知識和經驗。在本書中介紹了當前常用的電子取證技術。

預備知識
在閱讀本書前,讀者應該對x86匯編語言有大致的了解。匯編語言是大學計算機的必修課。這方面的書籍非常多,例如基普·歐文(Kip Irvine)的《匯編語言:基于x86處理器》、王爽的《匯編語言》等。雖然大多數書籍以16位匯編為講解平臺,但對理解匯編指令功能而言依然有益。
熟悉和了解C語言對閱讀本書也是很有幫助的——扎實的編程基礎是學好逆向的關鍵。另外,讀者需要掌握一些常用的算法和數據結構。
針對特定平臺下的軟件逆向,需要了解特定平臺下程序設計的相關知識。本書主要討論Windows逆向,需要讀者掌握一定的Win32編程知識。不論是研究逆向還是編程,都應該了解Win32編程。Win32編程是API方式的Windows程序設計,學習Windows API能使讀者更深入地了解Windows的工作方式。推薦閱讀佩措爾德(Charles Petzold)的經典著作《Windows程序設計》,它以C語言為講解平臺。
到此為止,筆者將假設讀者沒有任何加密與解密方面的經驗,并以此為標準組織本書的內容。

適合的讀者
本書適合以下讀者閱讀。
*安全技術相關工作者:研究軟件安全的一本不錯的技術工具書。
*對逆向調試技術感興趣的讀者:增強逆向調試技能,提高軟件的質量。
*對軟件保護感興趣的軟件開發人員:更好地保護軟件作品。
*相關專業在校學生:掌握相關知識和技能,獲得職場競爭力的秘密武器。
*關注個人信息安全、計算機安全技術并想了解技術內幕的讀者:解決很多技術疑難問題。

內容導讀
大多數人可能認為軟件加密與解密是一門高深的學問。造成這種認識的原因是以前這方面的技術資料匱乏,將加密與解密這一技術“神”化了。在這個領域,初學者一般不知從何下手,花費大量的時間和精力不說,甚至要走不少彎路。本書將給對加密與解密感興趣的讀者指明方向,提供捷徑。
本書的大部分章節,既相互關聯,又彼此獨立。讀者可以根據自己的情況,選擇合適自己的內容來閱讀。由于圖書厚度限制,本書附錄的內容以電子文檔的形式放在隨書文件中供讀者下載。

特別致謝
在本書的編寫過程中,有很多朋友付出了智慧和辛勤的勞動,在此一并表示感謝!
首先,感謝我的父母、妻子、女兒對我的大力支持,使我順利完成本書的編寫。
謹對電子工業出版社博文視點公司所有相關人員致以真誠的謝意。感謝電子工業出版社副總編輯、博文視點公司總經理郭立及編輯潘昕所做的大量工作。
特別感謝看雪論壇的各位版主及技術小組的成員對本書的大力支持。
感謝看雪論壇版主團隊成員linhanshi、netwind、gjden、Claud、仙果、玩命、cnbragon、piaox、BDomne、zmworm、KevinsBobo、LowRebSwrd、海風月影、菩提、xiaohang、非蟲、moonife、pencil、loongzyd、moonife、pencil、莫灰灰、rockinuk、jackozoo、Feisu、humourkyo、hawking、arhat、北極星2003、monkeycz、小蝦、MindMac等。
感謝看雪智能硬件小組的gjden、ggggwwww、xdxdxdxd、Gowabby、topofall、儒者立心、mozha、怪才、坐北朝南、Wilson、光棍節、憑欄映影、wooy0ung、南極小蝦、阿東、missdiog、猥瑣菜鳥、Yale、Fycrlve、滄海一粟、gd菜雞。
感謝看雪Android安全小組的LowRebSwrd、Claud、darmao、dssljt、DuckyDog、ele7enxxh、FIGHTING安、JoenChen、jltxgcy、jusnic、lody、SANCDAYE、Ov4ns7wp、ThomasKing、萬抽抽、王正飛、GeneBlue、foyjog、不知世事、蔣鐘慶、MindMac。
感謝看雪iOS安全小組的roysue、zhuliang。
感謝看雪Web安全小組的piaox、ermei、govsb、qq-tianqi、anybaby、webappsec、iheartbeat、猥瑣菜鳥。
感謝看雪漏洞分析小組的仙果、wingdbg、BDomne、Keoyo_k0shl、KeenDavid、icepng、TKMoma、君子謬、IronMannn、riusksk、污師、歲月別催。
感謝看雪翻譯小組的哆啦咪、cherrir、daemond、freakish、fyb波、Green奇、ghostway、hanbingxzy、hesir、jasonk龍蓮、lumou、Logdty、rainbow、skeep、SpearMint、StrokMitream、sudozhange、Vancir、wangrin、xycxmz、zplusplus、夢野間、木無聊偶、南極小蝦、敲代碼的貓、銀雁冰、一壺蔥茜、玉林小學生。
感謝CCDebuger對第2章“動態分析技術”和第16章“脫殼技術”的校對。
感謝accessd參與2.3節“MDebug調試器”的編寫。
感謝gzgzlxg對第3章“靜態分析技術”提出的修改和補充意見。
感謝zmworm對IDA使用的補充建議。
感謝WiNrOOt提供的IDA簡易教程。
感謝zwfy為3.3.16節“IDC腳本”提供的Python腳本。
感謝北京建極練科技有限公司CTO段夕華對第4章“逆向分析技術”提出的寶貴修改意見。
感謝LOCKLOSE提供的IDA 7.0中文字符搜索的解決方法。
感謝武漢科銳安全教育的張延清對4.2節“64位軟件逆向技術”的編寫作出的貢獻。
感謝Blowfish對5.1節“序列號保護方式”的編寫作出的貢獻。
感謝riijj為5.6節“網絡驗證”提供的實例。
感謝cnbragon參與第6章“加密算法”的編寫。
感謝麥洛科菲信息安全培訓創始人周揚榮參與第7章“Windows內核基礎”的編寫。
感謝Hume對第8章“Windows下的異常處理”的編寫作出的貢獻。
感謝段治華參與第8章“Windows下的異常處理”、第12章“注入技術”和第13章“Hook技術”的編寫。
感謝Hying對第9章“Win32調試API”和第19章“外殼編寫基礎”的編寫作出的貢獻。
感謝程勛德對第10章“VT技術”和22.2.6節“利用VT技術”的編寫作出的貢獻。
感謝王勇對11.15節“編寫PE分析工具”的編寫作出的貢獻。
感謝snowdbg參與第14章“漏洞分析技術”的編寫。
感謝BDomne對第14章“漏洞分析技術”的校對。
感謝DiKeN對16.10節“靜態脫殼”的編寫作出的貢獻。
感謝afanty對17.1節“防范算法求逆”的編寫作出的貢獻。
感謝李江濤對17.2.2節“SMC技術實現”的編寫作出的貢獻。
感謝forgot參與第18章“反跟蹤技術”的編寫。
感謝15PB信息安全教育的薛亮亮對19.4節“用C++ 編寫外殼部分”的編寫作出的貢獻。
感謝馮典參與第20章“虛擬機的設計”和第21章“VMProtect逆向和還原淺析”的編寫。
感謝羅翼對22.2.1節“跨進程內存存取機制”、22.2.2節“Debug API機制”和22.2.3節“利用調試寄存器機制”的編寫作出的貢獻。
感謝羅巍對22.2.5節“利用Hook技術”的編寫作出的貢獻。
感謝tankaiha參與第24章“.NET平臺加解密”的編寫。
感謝宋成廣對第24章“.NET平臺加解密”的校對。
感謝崔孝晨(hannibal)參與第25章“數據取證技術”的編寫。
感謝linhanshi在工具方面提供的幫助。
感謝老羅《矛與盾的較量——CRC實踐篇》一文所帶來的啟發。
感謝Lenus在內存Dump和內存斷點方面給予的技術支持。
感謝skylly對第16章“脫殼技術”的腳本制作提供的技術支持。
感謝hnhuqiong提供的ODbgScript腳本教學資料。
感謝VolX提供隨書文件中的Aspr2.XX_unpacker.osc腳本。
感謝CoDe_Inject對22.2.4節“利用DLL注入技術”的編寫提供的幫助。
感謝dREAMtHEATER在Win32編程和PE格式上的大力支持。
感謝武漢科銳安全教育的Backer為22.2.4節“利用DLL劫持技術”提供的lpk.cpp。
感謝softworm撰寫的《Themida的SDK分析》一文。文本收錄在隨書文件“16.9加密殼”中。
感謝郭春楊對隨書文件附錄B“在Visual C++ 中使用內聯匯編”的編寫作出的貢獻。
感謝周文雄(小樓)對1.1.2節“軟件逆向工程”的編寫作出的貢獻,以及在Visual Basic 6逆向技術方面提供的支持(相關內容請參考隨書文件附錄C)。
感謝閻文斌(玩命)參與隨書文件附錄D“加密算法變形引擎”的編寫。
感謝cyclotron對偽編譯相關內容的編寫作出的貢獻。
感謝pll621在擴展PE功能方面具有開拓性的研究。
感謝Fisheep對與浮點指令和信息隱藏技術相關內容的編寫作出的貢獻。
感謝Sun Bird、JoJo、kvllz、frozenrain、jero、mocha、NWMonster、petnt、sudami、tankaiha、wynney、XPoy、王清、小蝦等朋友為術語表的整理所做的工作。
感謝胡勇、黃敏、郭倩茹、朱林峰、萬嗣超、高偉超、陳佳林、王強、劉習飛、劉婧、郭澤文、嚴正華、Sun Bird、JoJo、kvllz等對本書的大力支持。
感謝熱心讀者和看雪熱心會員對《加密與解密(第三版)》中的錯誤進行的反饋和指正。他們是:AlexLong、AsmDebuger、a王、cnliuqh、ddstrg、epluguo、Fido、giftedboy、Gruuuuubby、hdy981、isiah、jerrysun、junxiong、kan、kangaroo、keagan、kmlch、konyka、linkto、littlewisp、lizaixue、manbug、obaby、pathletboy、Phonax、playsun、ppdo、rootboy、senhuxi、senhuxi、shoooo、smartsl、ucantseeme、usufu、usufu、Xacs、XLSDG、yangjt、ybhdgggset、zhiyajun、zwfy、家有睡神、青楓、清風、嗜血狂君、未秋葉落、軒轅小聰、雪未來白無垢、雨中的魚等。
同時,要感謝那些參與《加密與解密》前3版及《軟件加密技術內幕》組稿的眾多看雪論壇一流高手,是他們的參與和奉獻讓本書得以順利完成。
在此,還要感謝看雪論壇其他朋友的支持和幫助。是你們提供的幫助,使得筆者能夠完成本書。如果以上未提及對您的謝意,在此我表示由衷的感謝!

關于本書配套文件
請讀者用微信掃描本書封面勒口上的二維碼,按提示獲取《加密與解密(第4版)》的隨書文件。
隨書文件中的軟件和實例,經過多方面的檢查和測試,絕無病毒。但是,一些加解密工具采用了病毒技術,導致部分代碼與某些病毒的特征碼類似,可能造成查毒軟件的誤報,請讀者自行決定是否使用。建議將隨書文件復制到硬盤中,并去除“只讀”屬性再進行調試,以免出現一些無法解釋的錯誤。

關于看雪學院
看雪學院是一個專注于PC、移動、智能設備安全研究及逆向工程的開發者社區,創建于2000年,歷經多年的發展,受到了業內的廣泛認同,在行業中樹立了令人尊敬的專業形象。看雪學院始終關注安全技術領域的最新發展,為IT專業人士、技術專家提供了一個氛圍良好的交流與合作平臺。多年來,看雪學院培養了大批安全人才,使他們從普通的IT愛好者成長為具有一技之長的安全專才。同時,看雪學院建立了一套行之有效的人才選拔機制,為IT企業輸送和推薦了眾多優秀人才,在業內形成了很好的口碑。在多年的發展過程中,看雪學院形成了大量有價值的技術資料,經過看雪團隊的共同努力,出版了多本深受出版社和廣大讀者好評、社會影響深遠的技術專著。
為了更好地發展看雪學院,2015年11月創建了上海看雪科技有限公司,公司以看雪學院為基礎,致力于構建一個PC、移動、智能設備安全研究及逆向工程的開發者社區,為會員提供安全知識在線視頻課程和教學服務,同時為企業提供智能設備安全測試服務和相關產品。

意見反饋
我們非常希望能夠了解讀者對本書的看法。如果您對本書內容有任何問題或有自己的學習心得想要與其他讀者分享,歡迎來看雪論壇交流。

段鋼
2018年8月于上海
內容簡介:

本書以軟件逆向為切入點,講述了軟件安全領域相關的基礎知識和技能。讀者閱讀本書后,很容易就能在逆向分析、漏洞分析、安全編程、病毒分析等領域進行擴展。這些知識點的相互關聯,將促使讀者開闊思路,融會貫通,領悟更多的學習方法,提升自身的學習能力。本書適合安全技術相關工作者、對逆向調試技術感興趣的人、對軟件保護感興趣的軟件開發人員、相關專業在校學生及關注個人信息安全、計算機安全技術并想了解技術內幕的讀者閱讀。


目錄:

基礎篇
第1章 基礎知識 2
1.1 什么是加密與解密 2
1.1.1 軟件的加密與解密 2
1.1.2 軟件逆向工程 2
1.1.3 逆向分析技術 3
1.2 文本字符 4
1.2.1 ASCII與Unicode字符集 4
1.2.2 字節存儲順序 6
1.3 Windows操作系統 6
1.3.1 Win32 API函數 6
1.3.2 WOW64 9
1.3.3 Windows消息機制 9
1.3.4 虛擬內存 11

調試篇
第2章 動態分析技術 14
2.1 OllyDbg調試器 14
2.1.1 OllyDbg的界面 14
2.1.2 OllyDbg的配置 15
2.1.3 基本操作 16
2.1.4 常用斷點 27
2.1.5 插件 35
2.1.6 Run trace 36
2.1.7 Hit trace 37
2.1.8 調試符號 37
2.1.9 加載程序 39
2.1.10 OllyDbg的常見問題 40
2.2 x64dbg調試器 42
2.3 MDebug調試器 44
2.3.1 MDebug的界面 44
2.3.2 表達式 45
2.3.3 調試 45
2.3.4 斷點 46
2.3.5 MDebug的其他功能 47
2.4 WinDbg調試器 47
2.4.1 WinDbg的安裝與配置 47
2.4.2 調試過程 51
2.4.3 斷點命令 51
2.4.4 棧窗口 53
2.4.5 內存命令 55
2.4.6 腳本 56
2.4.7 調試功能擴展 58
2.4.8 小結 59
第3章 靜態分析技術 60
3.1 文件類型分析 60
3.2 反匯編引擎 61
3.2.1 OllyDbg的ODDisasm 61
3.2.2 BeaEngine 61
3.2.3 Udis86 61
3.2.4 Capstone 62
3.2.5 AsmJit 63
3.2.6 Keystone 64
3.2.7 小結 64
3.3 靜態反匯編 65
3.3.1 IDA Pro簡介 65
3.3.2 IDA的配置 66
3.3.3 IDA主窗口 68
3.3.4 交叉參考 69
3.3.5 參考重命名 70
3.3.6 標簽的用法 71
3.3.7 格式化指令操作數 71
3.3.8 函數的操作 72
3.3.9 代碼和數據轉換 72
3.3.10 字符串 73
3.3.11 數組 74
3.3.12 結構體 75
3.3.13 枚舉類型 79
3.3.14 變量 80
3.3.15 FLIRT 81
3.3.16 IDC腳本 82
3.3.17 插件 86
3.3.18 IDA調試器 87
3.3.19 遠程調試 90
3.3.20 其他功能 93
3.3.21 小結 94
3.4 十六進制工具 94
3.5 靜態分析技術應用實例 97
3.5.1 解密初步 97
3.5.2 逆向工程初步 99

解密篇
第4章 逆向分析技術 102
4.1 32位軟件逆向技術 102
4.1.1 啟動函數 102
4.1.2 函數 103
4.1.3 數據結構 111
4.1.4 虛函數 115
4.1.5 控制語句 117
4.1.6 循環語句 124
4.1.7 數學運算符 125
4.1.8 文本字符串 128
4.1.9 指令修改技巧 130
4.2 64位軟件逆向技術 131
4.2.1 寄存器 131
4.2.2 函數 132
4.2.3 數據結構 142
4.2.4 控制語句 145
4.2.5 循環語句 154
4.2.6 數學運算符 158
4.2.7 虛函數 169
4.2.8 小結 193
第5章 演示版保護技術 194
5.1 序列號保護方式 194
5.1.1 序列號保護機制 194
5.1.2 如何攻擊序列號保護機制 195
5.1.3 字符串比較形式 197
5.1.4 制作注冊機 198
5.2 警告窗口 203
5.3 時間限制 205
5.3.1 計時器 205
5.3.2 時間限制 205
5.3.3 拆解時間限制保護 206
5.4 菜單功能限制 207
5.4.1 相關函數 207
5.4.2 拆解菜單限制保護 208
5.5 KeyFile保護 208
5.5.1 相關API函數 208
5.5.2 拆解KeyFile保護 209
5.6 網絡驗證 213
5.6.1 相關函數 214
5.6.2 破解網絡驗證的一般思路 214
5.7 光盤檢測 219
5.7.1 相關函數 219
5.7.2 拆解光盤保護 220
5.8 只運行1個實例 221
5.8.1 實現方法 221
5.8.2 實例 222
5.9 常用斷點設置技巧 222
第6章 加密算法 223
6.1 單向散列算法 223
6.1.1 MD5算法 223
6.1.2 SHA算法 227
6.1.3 SM3密碼雜湊算法 231
6.1.4 小結 231
6.2 對稱加密算法 231
6.2.1 RC4流密碼 231
6.2.2 TEA算法 233
6.2.3 IDEA算法 236
6.2.4 BlowFish算法 243
6.2.5 AES算法 246
6.2.6 SM4分組密碼算法 259
6.2.7 小結 259
6.3 公開密鑰加密算法 259
6.3.1 RSA算法 260
6.3.2 ElGamal公鑰算法 264
6.3.3 DSA數字簽名算法 270
6.3.4 橢圓曲線密碼編碼學 272
6.3.5 SM2算法 279
6.4 其他算法 279
6.4.1 CRC32算法 279
6.4.2 Base64編碼 280
6.5 常見的加密庫接口及其識別 281
6.5.1 Miracl大數運算庫 281
6.5.2 FGInt 283
6.5.3 其他加密算法庫介紹 284
6.6 加密算法在軟件保護中的應用 285

系統篇
第7章 Windows內核基礎 290
7.1 內核理論基礎 290
7.1.1 權限級別 290
7.1.2 內存空間布局 291
7.1.3 Windows與內核啟動過程 292
7.1.4 Windows R3與R0通信 294
7.1.5 內核函數 296
7.1.6 內核驅動模塊 297
7.2 內核重要數據結構 298
7.2.1 內核對象 298
7.2.2 SSDT 300
7.2.3 TEB 302
7.2.4 PEB 304
7.3 內核調試基礎 306
7.3.1 使用WinDbg搭建雙機調試環境 306
7.3.2 加載內核驅動并設置符號表 308
7.3.3 SSDT與Shadow SSDT的查看 311
第8章 Windows下的異常處理 313
8.1 異常處理的基本概念 313
8.1.1 異常列表 313
8.1.2 異常處理的基本過程 314
8.2 SEH的概念及基本知識 319
8.2.1 SEH的相關數據結構 319
8.2.2 SEH處理程序的安裝和卸載 320
8.2.3 SEH實例跟蹤 321
8.3 SEH異常處理程序原理及設計 325
8.3.1 異常分發的詳細過程 325
8.3.2 線程異常處理 330
8.3.3 異常處理的棧展開 336
8.3.4 MSC編譯器對線程異常處理的增強 342
8.3.5 頂層異常處理 349
8.3.6 異常處理程序的安全性 357
8.4 向量化異常處理 361
8.4.1 向量化異常處理的使用 361
8.4.2 VEH與SEH的異同 362
8.4.3 向量化異常處理的新內容 363
8.5 x64平臺上的異常處理 363
8.5.1 原生x64程序的異常分發 364
8.5.2 WOW64下的異常分發 366
8.6 異常處理程序設計中的注意事項 367
8.7 異常處理的實際應用 368
8.7.1 使用SEH對用戶輸入進行驗證 368
8.7.2 SEH在加密與解密中的應用 369
8.7.3 用VEH實現API Hook 371
8.8 本章小結 371
第9章 Win32調試API 372
9.1 調試相關函數簡要說明 372
9.2 調試事件 375
9.3 創建并跟蹤進程 377
9.4 調試循環體 378
9.5 處理調試事件 379
9.6 線程環境 380
9.7 將代碼注入進程 382
第10章 VT技術 384
10.1 硬件虛擬化的基本概念 384
10.1.1 概述 384
10.1.2 相關結構和匯編指令 385
10.1.3 EPT機制 388
10.2 VT技術的應用 389
10.2.1 編譯運行ShadowWalker 389
10.2.2 分析Hypervisor 390
10.2.3 檢測VT支持情況 392
10.2.4 VMCS的配置 393
10.2.5 EPT的配置 396
10.2.6 開啟VT 399
10.2.7 內存隱藏的實現 399
10.3 VT調試方法 401
第11章 PE文件格式 404
11.1 PE的基本概念 405
11.1.1 基地址 405
11.1.2 虛擬地址 406
11.1.3 相對虛擬地址 406
11.1.4 文件偏移地址 407
11.2 MS-DOS頭部 407
11.3 PE文件頭 408
11.3.1 Signature字段 408
11.3.2 IMAGE_FILE_HEADER結構 409
11.3.3 IMAGE_OPTIONAL_HEADER結構 410
11.4 區塊 415
11.4.1 區塊表 415
11.4.2 常見區塊與區塊合并 417
11.4.3 區塊的對齊值 419
11.4.4 文件偏移與虛擬地址的轉換 419
11.5 輸入表 421
11.5.1 輸入函數的調用 421
11.5.2 輸入表的結構 422
11.5.3 輸入地址表 424
11.5.4 輸入表實例分析 424
11.6 綁定輸入 428
11.7 輸出表 429
11.7.1 輸出表的結構 430
11.7.2 輸出表實例分析 431
11.8 基址重定位 432
11.8.1 基址重定位的概念 432
11.8.2 基址重定位表的結構 433
11.8.3 基址重定位表實例分析 434
11.9 資源 435
11.9.1 資源結構 435
11.9.2 資源結構實例分析 438
11.9.3 資源編輯工具 440
11.10 TLS初始化 440
11.11 調試目錄 441
11.12 延遲載入數據 441
11.13 程序異常數據 442
11.14 .NET頭部 442
11.15 編寫PE分析工具 443
11.15.1 檢查文件格式 443
11.15.2 讀取FileHeader和OptionalHeader的內容 444
11.15.3 得到數據目錄表信息 445
11.15.4 得到區塊表信息 446
11.15.5 得到輸出表信息 447
11.15.6 得到輸入表信息 448
第12章 注入技術 450
12.1 DLL注入方法 450
12.1.1 通過干預輸入表處理過程加載目標DLL 450
12.1.2 改變程序運行流程使其主動加載目標DLL 466
12.1.3 利用系統機制加載DLL 484
12.2 DLL注入的應用 491
12.3 DLL注入的防范 491
12.3.1 驅動層防范 491
12.3.2 應用層防范 493
第13章 Hook技術 497
13.1 Hook概述 497
13.1.1 IAT Hook篡改MessageBox消息 497
13.1.2 Inline Hook篡改指定MessageBox消息 499
13.2 Hook的分類 500
13.2.1 Address Hook 501
13.2.2 Inline Hook 511
13.2.3 基于異常處理的Hook 513
13.2.4 不是Hook的Hook 514
13.3 Hook位置的挑選 515
13.4 Hook的典型過程 519
13.4.1 Address Hook的實施過程 519
13.4.2 Inline Hook的實施過程 526
13.4.3 基于異常處理的Hook實施過程 529
13.4.4 二次Hook的注意事項 532
13.4.5 通用Hook引擎的實現 533
13.5 Detour函數的典型用法 533
13.6 Hook中的注意事項 536
13.7 Hook在x64平臺上的新問題 541
13.8 Hook技術的應用 543
13.9 Hook的檢測、恢復與對抗 544
13.9.1 Hook的檢測與恢復 544
13.9.2 Hook的對抗 545
13.10 本章小結 546

漏洞篇
第14章 漏洞分析技術 548
14.1 軟件漏洞原理 548
14.1.1 緩沖區溢出漏洞 548
14.1.2 整型溢出漏洞 553
14.1.3 UAF漏洞 555
14.2 Shellcode 555
14.2.1 Shellcode的結構 556
14.2.2 Shellcode通用技術 559
14.2.3 實戰Shellcode編寫 560
14.3 漏洞利用 566
14.3.1 漏洞利用基本技術 567
14.3.2 漏洞利用高級技術 570
14.4 漏洞樣本 572
14.5 樣本分析 573
14.5.1 準備工作 573
14.5.2 靜態分析 574
14.5.3 動態調試 576
14.5.4 追根溯源 581
14.5.5 小結 585

脫殼篇
第15章 專用加密軟件 588
15.1 認識殼 588
15.1.1 殼的概念 588
15.1.2 壓縮引擎 589
15.2 壓縮殼 589
15.2.1 UPX 589
15.2.2 ASPack 590
15.3 加密殼 590
15.3.1 ASProtect 590
15.3.2 Armadillo 590
15.3.3 EXECryptor 591
15.3.4 Themida 591
15.4 虛擬機保護軟件 592
15.4.1 虛擬機介紹 592
15.4.2 VMProtect簡介 592
第16章 脫殼技術 594
16.1 基礎知識 594
16.1.1 殼的加載過程 594
16.1.2 脫殼機 595
16.1.3 手動脫殼 596
16.2 尋找OEP 596
16.2.1 根據跨段指令尋找OEP 596
16.2.2 用內存訪問斷點尋找OEP 600
16.2.3 根據棧平衡原理尋找OEP 601
16.2.4 根據編譯語言特點尋找OEP 602
16.3 抓取內存映像 603
16.3.1 Dump原理 603
16.3.2 反Dump技術 604
16.4 重建輸入表 606
16.4.1 輸入表重建的原理 606
16.4.2 確定IAT的地址和大小 607
16.4.3 根據IAT重建輸入表 608
16.4.4 用Import REC重建輸入表 611
16.4.5 輸入表加密概括 614
16.5 DLL文件脫殼 615
16.5.1 尋找OEP 615
16.5.2 Dump映像文件 617
16.5.3 重建DLL的輸入表 618
16.5.4 構造重定位表 619
16.6 附加數據 621
16.7 PE文件的優化 623
16.8 壓縮殼 626
16.8.1 UPX外殼 626
16.8.2 ASPack外殼 629
16.9 加密殼 633
16.10 靜態脫殼 637
16.10.1 外殼Loader分析 637
16.10.2 編寫靜態脫殼器 641

保護篇
第17章 軟件保護技術 644
17.1 防范算法求逆 644
17.1.1 基本概念 644
17.1.2 堡壘戰術 645
17.1.3 游擊戰術 646
17.2 抵御靜態分析 647
17.2.1 花指令 647
17.2.2 SMC技術實現 649
17.2.3 信息隱藏 653
17.2.4 簡單的多態變形技術 654
17.3 文件完整性檢驗 655
17.3.1 磁盤文件校驗的實現 655
17.3.2 校驗和 657
17.3.3 內存映像校驗 657
17.4 代碼與數據結合 659
17.4.1 準備工作 660
17.4.2 加密算法的選用 661
17.4.3 手動加密代碼 661
17.4.4 使 .text區塊可寫 662
17.5 關于軟件保護的若干忠告 663
第18章 反跟蹤技術 665
18.1 由BeingDebugged引發的蝴蝶效應 665
18.1.1 BeingDebugged 665
18.1.2 NtGlobalFlag 669
18.1.3 Heap Magic 671
18.1.4 從源頭消滅BeingDebugged 676
18.2 回歸Native:用戶態的夢魘 676
18.2.1 CheckRemoteDebuggerPresent 677
18.2.2 ProcessDebugPort 677
18.2.3 ThreadHideFromDebugger 680
18.2.4 DebugObject 682
18.2.5 SystemKernelDebuggerInformation 686
18.2.6 Native API 688
18.2.7 Hook和AntiHook 693
18.3 真正的奧秘:小技巧一覽 696
18.3.1 SoftICE檢測方法 696
18.3.2 OllyDbg檢測方法 698
18.3.3 調試器漏洞 700
18.3.4 防止調試器附加 701
18.3.5 父進程檢測 703
18.3.6 時間差 703
18.3.7 通過Trap Flag檢測 704
18.3.8 雙進程保護 704
第19章 外殼編寫基礎 705
19.1 外殼的結構 705
19.2 加殼主程序 706
19.2.1 判斷文件是否為PE格式 706
19.2.2 文件基本數據讀入 706
19.2.3 附加數據的讀取 708
19.2.4 輸入表的處理 708
19.2.5 重定位表的處理 711
19.2.6 文件的壓縮 713
19.2.7 資源數據的處理 716
19.2.8 區塊的融合 720
19.3 用匯編寫外殼部分 721
19.3.1 外殼的加載過程 721
19.3.2 自建輸入表 722
19.3.3 外殼引導段 723
19.3.4 外殼第2部分 726
19.3.5 將外殼部分添加至原程序 731
19.4 用C++編寫外殼部分 734
第20章 虛擬機的設計 739
20.1 虛擬機保護技術原理 739
20.1.1 反匯編引擎 739
20.1.2 指令分類 739
20.2 啟動框架和調用約定 740
20.2.1 調度器 740
20.2.2 虛擬環境 741
20.2.3 平衡棧vBegin和vCheckESP 742
20.3 Handler的設計 743
20.3.1 輔助Handler 743
20.3.2 普通Handler和指令拆解 744
20.3.3 標志位問題 745
20.3.4 相同作用的指令 745
20.3.5 轉移指令 746
20.3.6 轉移跳轉指令的另一種實現 747
20.3.7 call指令 748
20.3.8 retn指令 748
20.3.9 不可模擬指令 749
20.4 托管代碼的異常處理 749
20.4.1 VC++的異常處理 749
20.4.2 Delphi的異常處理 754
20.5 本章小結 757
第21章 VMProtect逆向和還原淺析 758
21.1 VMProtect逆向分析 758
21.1.1 VMProtect虛擬執行引擎的全景圖 758
21.1.2 VMProtect虛擬引擎的基本架構 763
21.1.3 指令分類 763
21.2 VMProtect的還原 765
21.2.1 虛擬執行系統 766
21.2.2 生成完整的字節碼流程圖 767
21.2.3 給Handler命名并添加語義動作 774
21.2.4 將字節碼的低級描述轉換為中級描述 775
21.2.5 清除無用的字節碼 776
21.2.6 用真值表化簡邏輯指令 776
21.2.7 從特征中建立部分寄存器映射信息 779
21.2.8 其他無法確定的寄存器的圖著色算法 785
21.2.9 使用DAG匹配生成指令 788
21.2.10 其他問題 791

軟件重構篇
第22章 補丁技術 794
22.1 文件補丁 794
22.2 內存補丁 795
22.2.1 跨進程內存存取機制 795
22.2.2 Debug API機制 797
22.2.3 利用調試寄存器機制 800
22.2.4 利用DLL注入技術 803
22.2.5 利用Hook技術 807
22.2.6 利用VT技術 810
22.3 SMC補丁技術 813
22.3.1 單層SMC補丁技術 813
22.3.2 多層SMC補丁技術 814
22.4 補丁工具 816
第23章 代碼的二次開發 818
23.1 數據對齊 818
23.2 增加空間 818
23.2.1 區塊間隙 818
23.2.2 手動構造區塊 819
23.2.3 工具輔助構造區塊 820
23.3 獲得函數的調用信息 820
23.3.1 增加輸入函數 820
23.3.2 顯式鏈接調用DLL 821
23.4 代碼的重定位 822
23.4.1 修復重定位表 822
23.4.2 代碼的自定位技術 824
23.5 增加輸出函數 825
23.6 消息循環 826
23.6.1 WndProc函數 826
23.6.2 尋找消息循環 827
23.6.3 WndProc匯編形式 828
23.7 菜單擴展 829
23.7.1 擴充WndProc 829
23.7.2 擴充Exit菜單的功能 830
23.7.3 擴充Open菜單的功能 830
23.8 DLL擴展 833
23.8.1 擴展接口 833
23.8.2 擴展消息循環 834

語言和平臺篇
第24章 .NET平臺加解密 838
24.1 .NET概述 838
24.1.1 什么是 .NET 838
24.1.2 基本概念 839
24.1.3 第1個 .NET程序 840
24.2 MSIL與元數據 841
24.2.1 PE結構的擴展 841
24.2.2 .NET下的匯編MSIL 847
24.2.3 MSIL與元數據的結合 849
24.3 代碼分析與修改技術 851
24.3.1 靜態分析 851
24.3.2 動態調試 853
24.3.3 代碼修改 855
24.4 .NET代碼保護技術及其逆向 857
24.4.1 強名稱 857
24.4.2 名稱混淆 859
24.4.3 流程混淆 863
24.4.4 壓縮 865
24.4.5 加密 869
24.4.6 其他保護手段 875
24.5 本章小結 876

取證篇
第25章 數據取證技術 878
25.1 硬盤數據的獲取和固定 878
25.1.1 硬盤數據的獲取 878
25.1.2 電子數據的固定 882
25.2 硬盤的分區和數據恢復 882
25.2.1 分區的解析 884
25.2.2 基于文件系統的數據恢復原理 886
25.3 內存分析 890
25.3.1 內存鏡像的獲取 891
25.3.2 內存鏡像的分析 894
25.4 動態仿真技術 897
25.4.1 仿真專用硬件 897
25.4.2 軟件仿真 898
25.5 注冊表 900
25.5.1 Hive文件 900
25.5.2 注冊表中的時間 901
25.5.3 USB移動存儲設備 902
25.6 文件格式 903
25.6.1 文件修復和特征碼 903
25.6.2 基于文件的數據恢復技術 904
25.6.3 數據隱藏的分析 906

術語表 909
參考文獻 911
序: