軟件加密與解密

出版時(shí)間:2012-5  出版社:人民郵電出版社  作者:[美] Christian Collberg,[美] Jasvir Nagra  譯者:崔孝晨  
Tag標(biāo)簽:無(wú)  

前言

  前  言  隱蔽軟件(surreptitious software)是近十年來(lái)計(jì)算機(jī)安全研究領(lǐng)域新興的一個(gè)分支。在隱蔽軟件的研究過(guò)程中不僅需要借鑒計(jì)算機(jī)安全方面的技術(shù),還會(huì)用到計(jì)算科學(xué)其他領(lǐng)域的大量技術(shù),如密碼學(xué)、隱寫術(shù)、數(shù)字水印、軟件量度(software metric)、逆向工程以及編譯器優(yōu)化等。我們使用這些技術(shù)來(lái)滿足在計(jì)算機(jī)程序中安全存儲(chǔ)秘密信息的需求,盡管這些需求的表現(xiàn)形式千差萬(wàn)別、各不相同。本書(shū)中“秘密”一詞的意思比較廣,書(shū)中所介紹技術(shù)(代碼混淆、軟件水印和指紋、防篡改技術(shù)以及軟件“胎記”等)的使用目的是防止他人剽竊軟件中的智力成果。比如,軟件中使用指紋技術(shù)可以用來(lái)跟蹤軟件是否被盜版,代碼混淆技術(shù)能夠加大攻擊者逆向分析軟件的難度,而防篡改技術(shù)則可以使別人很難制作軟件的破解版,等等。  好了,現(xiàn)在我們來(lái)講講為什么需要閱讀本書(shū),誰(shuí)使用隱蔽軟件以及本書(shū)將會(huì)涵蓋哪些內(nèi)容?! 槭裁撮喿x本書(shū)  與傳統(tǒng)的安全研究不同,隱蔽軟件不關(guān)心如何使計(jì)算機(jī)免于計(jì)算機(jī)病毒入侵,它關(guān)心的是計(jì)算機(jī)病毒的作者是如何防止他人分析病毒的!同樣,我們也不關(guān)心軟件到底有沒(méi)有安全漏洞,我們關(guān)心的是如何隱蔽地在程序中加入一些只有在程序被篡改時(shí)才會(huì)執(zhí)行的代碼。密碼學(xué)研究領(lǐng)域中,被加密數(shù)據(jù)的安全性依賴于加密密鑰的隱秘性,而我們現(xiàn)在研究的恰恰是如何隱藏密鑰。軟件工程中有大量的軟件量度技術(shù),以確保程序結(jié)構(gòu)良好,本書(shū)中將使用同樣的技術(shù)使程序復(fù)雜難讀。本書(shū)中描述的很多技術(shù)都是基于編譯器優(yōu)化技術(shù)研究開(kāi)發(fā)的算法的,但是編譯優(yōu)化的目的是使編譯器生成個(gè)頭盡量小、運(yùn)行速度盡量快的程序,而使用本書(shū)中介紹的一些技術(shù)卻會(huì)使生成的程序個(gè)頭又大,執(zhí)行起來(lái)又慢。最后,傳統(tǒng)的數(shù)字水印和隱寫術(shù)是想辦法把要隱藏的信息藏到圖像、音頻、視頻甚至純文本文件中,而隱蔽軟件則是把需要隱藏的信息藏到計(jì)算機(jī)代碼中?! ∧敲?,為什么要閱讀本書(shū)呢?為什么要了解一種不能防止計(jì)算機(jī)被病毒或者蠕蟲(chóng)攻擊的安全技術(shù)?為什么要學(xué)習(xí)一種只會(huì)讓代碼體積變大而執(zhí)行速度變慢的編譯優(yōu)化技術(shù)?為什么要把精力花在一種違反了密碼學(xué)基本前提(即密鑰是不可能被攻擊者獲得的)的密碼學(xué)分支上呢?  回答是,傳統(tǒng)的計(jì)算機(jī)安全和密碼學(xué)研究成果有時(shí)并不能解決實(shí)際工作中遇到的且亟待解決的安全問(wèn)題。比如,在本書(shū)中將展示如何使用軟件水印技術(shù)防止軟件盜版。軟件水印是在程序中嵌入的唯一標(biāo)識(shí)(類似信用卡的卡號(hào)或者版權(quán)聲明),通過(guò)這個(gè)標(biāo)識(shí),程序的某個(gè)副本就和你(程序的作者)或者客戶聯(lián)系在了一起。要是你發(fā)現(xiàn)市場(chǎng)上在賣自己軟件的盜版光盤,就可以通過(guò)在盜版軟件中提取的水印追查制作這個(gè)盜版軟件的母版 當(dāng)初是哪個(gè)家伙從你這里買走的。當(dāng)給合作商提供新開(kāi)發(fā)的游戲的測(cè)試版時(shí),你也可以在測(cè)試版中加上數(shù)字水印。要是你感覺(jué)有人泄露了你的代碼,就能(從眾多的合作商中)找出肇事者,并把他送上法庭?! ∮直热?,在程序的新版本中加上了某個(gè)新的算法,你當(dāng)然不希望競(jìng)爭(zhēng)對(duì)手也得到這個(gè)算法,并把它加到他們的軟件中。這時(shí),你就可以去混淆程序,使之盡可能變得復(fù)雜難懂,使競(jìng)爭(zhēng)對(duì)手逆向分析軟件時(shí)效率很低。而如果確實(shí)懷疑某人剽竊了你的代碼,本書(shū)也會(huì)教你如何使用軟件“胎記”證實(shí)你的懷疑。  再比如,你的程序中包含有某段不能為人所知的代碼,并且你想確保沒(méi)有這段代碼程序就不能正常運(yùn)行。例如,你肯定不希望黑客修改程序中的軟件使用許可驗(yàn)證代碼,或者可用于解密數(shù)字版權(quán)管理系統(tǒng)中mp3文件的密鑰。第7章將討論多種防篡改技術(shù),確保受到篡改的程序停止正常運(yùn)行?! ÷?tīng)說(shuō)你把密鑰放在可執(zhí)行文件里了?這主意實(shí)在太糟糕了!以往的經(jīng)驗(yàn)告訴我們,任何類似“不公開(kāi),即安全” 的做法最終都將以失敗告終,而且不管在程序中怎樣隱藏密鑰,最終它都逃不出一個(gè)足夠頑強(qiáng)的逆向分析人員的手心。當(dāng)然,必須承認(rèn)你的做法也還是對(duì)的。本書(shū)中介紹的所有技巧都不能保證軟件能永遠(yuǎn)免于黑客的毒手。不必保證某個(gè)東西永遠(yuǎn)處于保密的狀態(tài),也不必保證程序永遠(yuǎn)處于不可能被篡改的狀態(tài),更不需要保證代碼永遠(yuǎn)不會(huì)被剽竊。除非這個(gè)研究領(lǐng)域有什么重大的突破,否則能指望的只是延緩對(duì)方的攻擊。我們的目標(biāo)就是把攻擊者的攻擊速度減緩到足夠低,使他感到攻擊你的軟件十分痛苦或要付出過(guò)高的代價(jià),從而放棄攻擊。也可能攻擊者很有耐心地花了很長(zhǎng)時(shí)間攻破了你的防御,但這時(shí)你已經(jīng)從這個(gè)軟件中賺夠了錢,或者已經(jīng)用上了更新版本的代碼(這時(shí)他得到的東西也就一錢不值了)?! ”确秸f(shuō),你是一個(gè)付費(fèi)頻道的運(yùn)營(yíng)商,用戶通過(guò)機(jī)頂盒來(lái)觀看你提供的電視節(jié)目。每個(gè)機(jī)頂盒都是帶有標(biāo)簽的——在代碼的某個(gè)位置上存放了分配給每個(gè)用戶的唯一標(biāo)識(shí)(ID),這樣你就可以根據(jù)用戶的繳費(fèi)情況決定是允許還是拒絕某個(gè)特定用戶觀看頻道里的節(jié)目??墒乾F(xiàn)在有一個(gè)黑客團(tuán)伙找到并且反匯編了這段代碼,發(fā)現(xiàn)了計(jì)算用戶ID的算法,并且在網(wǎng)上以低廉的價(jià)格把修改用戶ID的方法賣給了網(wǎng)民。這時(shí)你該怎么辦呢?你也許想到了使用防篡改的智能卡,不過(guò)這玩意兒并不像看上去那么難破解,這將在第11章中講解?;蛘吣憧赡芟氲揭煜a,使之更難以被分析。或者你也可以使用防篡改技術(shù)使程序一被修改就自動(dòng)停止運(yùn)行。更有可能,你會(huì)混合使用上述各種技巧來(lái)保護(hù)代碼。但是盡管使用了所有技術(shù),你還必須要知道并且必須接受,你的代碼仍然可能被破解,秘密仍會(huì)泄露(在這個(gè)案例里就是機(jī)頂盒里的用戶ID仍然會(huì)被篡改)這一事實(shí)。怎么會(huì)這樣呢?這只是因?yàn)?ldquo;不公開(kāi),既安全”這個(gè)想法在根本上就存在漏洞。不過(guò)既然本書(shū)中介紹的所有技術(shù)都不能給你一個(gè)“完美并且長(zhǎng)期的安全保證”,那么為什么還要使用這些技術(shù),為什么還要買這樣一本書(shū)呢?答案很簡(jiǎn)單,代碼能頂住黑客攻擊的時(shí)間越長(zhǎng),訂閱頻道的客戶就越多,同時(shí)升級(jí)機(jī)頂盒的周期也就越長(zhǎng),這樣你賺到的錢和省下的錢也就越多?! 【瓦@么簡(jiǎn)單?! ≌l(shuí)使用隱蔽軟件  很多知名的公司都對(duì)隱蔽軟件有濃厚的興趣。事實(shí)上很難真正掌握有關(guān)技術(shù)在實(shí)踐中具體被使用的程度(因?yàn)榇蠖鄶?shù)公司在如何保護(hù)自己的代碼一事上絕對(duì)是守口如瓶的),但是我們還是可以根據(jù)他們專利的申請(qǐng)和擁有情況把他們對(duì)隱蔽軟件的感興趣程度猜個(gè)八九不離十。微軟公司擁有多個(gè)關(guān)于軟件水印[104,354]、代碼混淆[62,62,69,69,70,70,180,378]和軟件“胎記”[364]技術(shù)的專利。Intertrust公司擁有大量與數(shù)字版權(quán)管理技術(shù)相關(guān)的組合式專利,包括代碼混淆和代碼防篡改專利。2004年,在微軟與Intertrust之間的馬拉松式官司落下了帷幕之后,微軟向Intertrust支付了高達(dá)4.4億美元的專利使用費(fèi),才獲得了后者所有的專利使用許可。同年,微軟也開(kāi)始與PreEmptive Solution公司開(kāi)展商業(yè)合作[250],從而把PreEmptive Solution開(kāi)發(fā)的identifier obfuscator(PreEmptive solution公司在該工具中擁有專利[351])加到了Visual Studio的工具集里。而普渡大學(xué)科研成果的副產(chǎn)品Arxan,因其獨(dú)創(chuàng)的防篡改算法專利[24,305]而成功地開(kāi)辦了一家公司。蘋果公司擁有一個(gè)代碼混淆方面的專利,估計(jì)是用于保護(hù)其iTune軟件的。Convera,一家從英特爾公司獨(dú)立出來(lái)的企業(yè),則著力研究應(yīng)用于數(shù)字版權(quán)管理的代碼防篡改技術(shù)[27,268-270]。從加拿大北方電信公司中分離出來(lái)的Cloakware公司也是這個(gè)領(lǐng)域里最成功的企業(yè)之一。該公司擁有他們稱為“白盒加密”的專利[67,68,182],即把加密算法和密鑰藏到程序代碼中。2007年12月,Cloakware公司被一家主營(yíng)付費(fèi)電視業(yè)務(wù)的荷蘭公司Irdeto以7250萬(wàn)美元的價(jià)格收購(gòu)。即使是相對(duì)的后來(lái)者Sun Microsystem也已經(jīng)提交了一些代碼混淆領(lǐng)域的專利申請(qǐng)?! kype的VoIP客戶端也使用了類似Arxan[24]、英特爾[27]及本書(shū)中將要提到的[89]代碼混淆和防篡改技術(shù)進(jìn)行了防逆向工程加固。對(duì)于Skype公司來(lái)說(shuō),保護(hù)其客戶端的完整性無(wú)疑是極其重要的,因?yàn)橐坏┯腥顺晒δ嫦蚍治隽似淇蛻舳塑浖?,解析出Skype所使用的網(wǎng)絡(luò)協(xié)議,黑客們就能寫出廉價(jià)的能與Skype軟件進(jìn)行正常通信的程序(這樣的話,人們就沒(méi)有必要一定用Skype)。所以保持網(wǎng)絡(luò)協(xié)議不公開(kāi)則有助于Skype擁有一個(gè)龐大的用戶群,這大概也是2005年易貝公司以26億美元收購(gòu)Skype的原因吧。實(shí)際上,使用隱蔽軟件技術(shù)還使Skype公司贏得了足夠多的時(shí)間,進(jìn)而成為了VoIP技術(shù)的領(lǐng)軍企業(yè)。即使這時(shí)Skype的協(xié)議被分析出來(lái)了(這一點(diǎn)黑客們確實(shí)也做到了,詳見(jiàn)7.2.4節(jié)),黑客們也拿不出一個(gè)能夠撼動(dòng)Skype市場(chǎng)地位的類似軟件了?! W(xué)術(shù)研究者從多種角度對(duì)隱蔽軟件技術(shù)進(jìn)行了研究。一些擁有編譯器和程序語(yǔ)言研究背景的研究者,比如我們,會(huì)很自然地加入這一領(lǐng)域的研究,因?yàn)樯婕按a轉(zhuǎn)換的絕大多數(shù)算法都會(huì)涉及靜態(tài)分析的問(wèn)題,而這一問(wèn)題則是編譯優(yōu)化技術(shù)的研究者再熟悉不過(guò)的了。盡管以前,密碼學(xué)研究者大多不屑于研究“不公開(kāi),即安全”的問(wèn)題,但最近一些密碼學(xué)研究人員已經(jīng)開(kāi)始把密碼學(xué)的相關(guān)技術(shù)應(yīng)用于軟件水印以及發(fā)現(xiàn)代碼混淆技術(shù)的局限性上了。來(lái)自多媒體水印、計(jì)算機(jī)安全和軟件工程方面的研究人員也已經(jīng)發(fā)表了很多關(guān)于隱蔽軟件的文章。遺憾的是,由于沒(méi)有專門的刊物、學(xué)術(shù)會(huì)議(供研究人員相互之間進(jìn)行交流),這一領(lǐng)域的研究進(jìn)展被大大延緩了。事實(shí)上,為了使這些研究成果能被傳統(tǒng)的學(xué)術(shù)會(huì)議和期刊接受,研究人員在不停地努力著,現(xiàn)在仍在努力。目前已經(jīng)發(fā)表過(guò)隱蔽軟件研究成果的學(xué)術(shù)會(huì)議有POPL(Principles of Programming Languages,程序設(shè)計(jì)原理)上的ACM專題研討會(huì)、信息隱藏研討會(huì)、IEEE的軟件工程研討會(huì)、高級(jí)密碼學(xué)會(huì)議(CRYPTO)、ISC(Information Security Conference,信息安全大會(huì))以及其他一些關(guān)于數(shù)字版權(quán)管理的學(xué)術(shù)會(huì)議。隨著隱蔽軟件這一領(lǐng)域的研究越來(lái)越成為學(xué)術(shù)研究的主流,我們有望擁有專門針對(duì)于隱蔽軟件的期刊、專題討論會(huì)甚至是研討會(huì),只是可惜目前為止這一切都還沒(méi)有實(shí)現(xiàn)?! ≤姺揭苍陔[蔽軟件上花了很多精力(和納稅人的錢)。比如,Cousot公司擁有的軟件水印算法[95]專利就歸屬于世界上第九大國(guó)防工程承包商法國(guó)Thales集團(tuán)。下面是一段引自最新的(2006)美軍招標(biāo)文件[303]中有關(guān)AT(anti-tamper)技術(shù) 研究的文字。  現(xiàn)在,所有的美軍項(xiàng)目執(zhí)行部門(PEO)和項(xiàng)目管理方(PM)在設(shè)計(jì)和實(shí)現(xiàn)有關(guān)系統(tǒng)時(shí),必須在系統(tǒng)中使用軍隊(duì)和國(guó)防部制定的AT策略。嵌入式軟件現(xiàn)代武器系統(tǒng)的核心,是被保護(hù)的最重要技術(shù)之一。AT技術(shù)能夠有效地保證這些技術(shù)不被他國(guó)(人)逆向工程分析利用。僅僅由標(biāo)準(zhǔn)編譯器編譯生成而不加AT技術(shù)防護(hù)的代碼是很容易被逆向分析的。在分析軟件時(shí),逆向工程分析人員會(huì)綜合使用諸如調(diào)試器、反編譯器、反匯編器等很多工具,也會(huì)使用各種靜態(tài)和動(dòng)態(tài)分析技巧。而使用AT技術(shù)的目的就是使逆向工程變得更為困難,進(jìn)而防止美國(guó)在技術(shù)領(lǐng)域的優(yōu)勢(shì)被他國(guó)竊取。今后還有必要向部隊(duì)的PEO和PM提供更有用、更有效并且多樣化的AT工具集……研發(fā)AT技術(shù)的目的在于提供一個(gè)能夠抗逆向工程分析的高強(qiáng)度殼 ,從而最大限度地遲滯敵方對(duì)被保護(hù)軟件的攻擊。這樣美國(guó)就有機(jī)會(huì)維持其在高科技領(lǐng)域的優(yōu)勢(shì)或者減緩其武器技術(shù)泄密的速度。最終,美軍就能繼續(xù)保持其技術(shù)優(yōu)勢(shì),進(jìn)而保證其軍備的絕對(duì)優(yōu)勢(shì)?! ∵@份招標(biāo)文件來(lái)自于美軍導(dǎo)彈和空間程序(設(shè)計(jì)部門),專注于實(shí)時(shí)嵌入式系統(tǒng)的保護(hù)。我們有理由相信產(chǎn)生這份招標(biāo)文件的原因是,美軍擔(dān)心射向敵方的導(dǎo)彈由于種種原因落地后未能爆炸,使敵方有機(jī)會(huì)接觸到嵌入在導(dǎo)彈中負(fù)責(zé)引導(dǎo)導(dǎo)彈飛臨目標(biāo)上空的控制軟件?! ∠旅媸橇硪欢我悦绹?guó)國(guó)防部[115]的文字?! ∵M(jìn)行主動(dòng)式軟件保護(hù) (SPI)是國(guó)防部的職責(zé)之一,它必須開(kāi)發(fā)和部署相關(guān)的保護(hù)技術(shù),以保證含有國(guó)防武器系統(tǒng)關(guān)鍵信息的計(jì)算機(jī)程序的安全。SPI提供的是一種全新的安全防護(hù)方法,它并不(像傳統(tǒng)的安全技術(shù)那樣)保護(hù)計(jì)算機(jī)或者網(wǎng)絡(luò)的安全,而只是加強(qiáng)計(jì)算機(jī)程序自身的安全。這種新方法能顯著提升國(guó)防部的信息安全情況。SPI的適用范圍很廣,從臺(tái)式機(jī)到超級(jí)計(jì)算機(jī)上面所有的程序都能使用SPI技術(shù)予以保護(hù)。它是(軟件保護(hù)技術(shù)中)完整的一層,是“縱深防御”的一個(gè)范例。SPI技術(shù)是對(duì)網(wǎng)絡(luò)防火墻、物理安全等傳統(tǒng)安全技術(shù)的一個(gè)補(bǔ)充,但是其實(shí)現(xiàn)并不依賴于這些傳統(tǒng)的安全設(shè)備?,F(xiàn)在SPI技術(shù)被部署在選定的HPC中心和150多家國(guó)防部機(jī)關(guān)以及其他由商業(yè)公司參與建設(shè)和維護(hù)的軍事基地。廣泛地部署SPI技術(shù)將會(huì)有效地增強(qiáng)美國(guó)和美國(guó)國(guó)防部對(duì)關(guān)鍵應(yīng)用技術(shù)的保護(hù)?! ∩厦孢@段話說(shuō)明了什么?它說(shuō)明美國(guó)國(guó)防部不僅關(guān)心導(dǎo)彈會(huì)不會(huì)掉到敵方領(lǐng)土上去,還關(guān)心在自己的安全系數(shù)和性能都很高的計(jì)算機(jī)中心運(yùn)行的軟件的安全。事實(shí)上,竊密和反竊密是防間諜機(jī)關(guān)和情報(bào)部門之間永恒的主題。比方說(shuō),一架戰(zhàn)斗機(jī)上的某個(gè)程序需要更新一下,這時(shí)我們很可能就是用一臺(tái)筆記本電腦連接到這架戰(zhàn)斗機(jī)上進(jìn)行更新操作。但是萬(wàn)一這臺(tái)筆記本電腦不慎遺失了,或者干脆就被其他國(guó)家政府使用某種方法控制了,就像電影里常演的那樣,這時(shí)會(huì)有什么情況發(fā)生呢?對(duì)方會(huì)馬上把相關(guān)的代碼拿去做逆向工程分析,并把分析的結(jié)果用于改進(jìn)其戰(zhàn)斗機(jī)中所使用的軟件。更有甚者,對(duì)方會(huì)悄悄地在你的軟件中加上一個(gè)特洛伊木馬,并讓飛機(jī)在特定的時(shí)間里從天上掉下來(lái)。如果我們不能絕對(duì)保證上述這一幕100%不可能發(fā)生的話,隱蔽軟件至少可以作為安全防御的最后一道防線(至少還能做到事后的責(zé)任追究)。例如,飛機(jī)中的軟件可以用有權(quán)訪問(wèn)相關(guān)軟件的人的ID做一個(gè)指紋簽名。要是哪天,在其他國(guó)家的戰(zhàn)斗機(jī)上發(fā)現(xiàn)了這些代碼,就可以立即對(duì)這些代碼進(jìn)行逆向分析,并進(jìn)一步推算出誰(shuí)是泄密事件的元兇?! ∈裁??我聽(tīng)見(jiàn)你說(shuō),為什么我要對(duì)政府之間和商業(yè)巨頭之間如何保護(hù)它們各自的秘密感興趣呢?如果黑客破解了這些軟件,他們也不過(guò)是通過(guò)自己的勞動(dòng)換取一些微薄的利益而已啊。話雖如此,但是這些保護(hù)技術(shù)給你 帶來(lái)的好處最終還是大于它給商業(yè)巨頭帶來(lái)的好處。理由是,對(duì)你來(lái)說(shuō),法律形式的保護(hù)措施(如專利、商標(biāo)和版權(quán))只有當(dāng)你擁有足夠的財(cái)力,能在法庭上把對(duì)方告倒的時(shí)候才會(huì)管用。換而言之,即使你認(rèn)為某家大公司通過(guò)破解你的代碼,剽竊了一個(gè)極有“錢途”的主意,你也無(wú)力通過(guò)那種馬拉松式的官司在法庭上告倒微軟,除非你有足夠的經(jīng)濟(jì)實(shí)力能在這種財(cái)力的比拼中熬出頭 。而在本書(shū)中討論的保護(hù)技術(shù)(比如代碼混淆和防篡改技術(shù))則既廉價(jià)又好用,中小型企業(yè)和商業(yè)巨頭均可使用。而且如果這時(shí)你去告這家大公司的話,也可以用水印或者軟件“胎記”等技術(shù),在法庭上當(dāng)場(chǎng)拿出代碼被剽竊的真憑實(shí)據(jù)來(lái)?! ∽詈蟛坏貌缓?jiǎn)單地提一下另一類極其擅長(zhǎng)使用隱蔽軟件的人——壞蛋們。病毒的作者已經(jīng)能非常成功地利用代碼混淆的技術(shù)偽裝病毒的代碼,使之逃避殺毒軟件的檢測(cè)了。值得一提的是,人們使用這些技術(shù)(如保護(hù)DVD、游戲和有線電視)時(shí)經(jīng)常被黑客破解,而黑客使用這些技術(shù)(如構(gòu)建惡意軟件)時(shí),人們卻很難抗擊?! ”緯?shū)內(nèi)容  隱蔽軟件研究的目的是發(fā)明能夠盡可能遲滯對(duì)手(逆向工程分析)進(jìn)度,同時(shí)又盡可能地減少因?yàn)槭褂迷摷夹g(shù),而在程序執(zhí)行時(shí)增加的計(jì)算開(kāi)銷的算法。同時(shí)也需要發(fā)明一種評(píng)估技術(shù),使我們可以說(shuō)“在程序中使用了算法A之后,相對(duì)于原先的程序,黑客攻破新程序需要多花T個(gè)單位的時(shí)間,而新程序增加的性能開(kāi)銷是0”,或者最低限度我們也應(yīng)該可以說(shuō)“相對(duì)于算法B,使用算法A保護(hù)的代碼更難被攻破”。特別要強(qiáng)調(diào)一下,隱蔽軟件研究尚處于嬰兒期,雖然我們?cè)跁?shū)中會(huì)把相關(guān)的保護(hù)算法和評(píng)估算法全都介紹給大家,但是這門藝術(shù)的現(xiàn)狀卻還并不理想(到時(shí)候你可不能太失望?。?。  在本書(shū)中,我們?cè)噲D把當(dāng)前所有有關(guān)隱蔽軟件的研究成果組織起來(lái)系統(tǒng)化地介紹給讀者。我們力爭(zhēng)每章內(nèi)容涵蓋一種技術(shù),并描述這一技術(shù)的應(yīng)用領(lǐng)域以及目前可用的算法。第1章將給出隱蔽軟件這個(gè)領(lǐng)域的一些基本概念;第2章用對(duì)抗性演示的模式介紹黑客逆向分析軟件時(shí)常用的工具和技巧,然后針對(duì)這些工具和技巧介紹如何防范黑客的攻擊;第3章詳細(xì)講述黑客和軟件保護(hù)方用于分析計(jì)算機(jī)程序的技術(shù);第4章、第5章和第6章分別介紹與代碼混淆有關(guān)的算法;第7章介紹與防篡改技術(shù)相關(guān)的算法;第8章和第9章分別介紹與水印相關(guān)的算法;第10章介紹與軟件“胎記”相關(guān)的算法;第11章講述基于硬件設(shè)備的軟件保護(hù)技術(shù)?! ∪绻闶俏黄髽I(yè)管理人員,只是對(duì)隱蔽軟件的研究現(xiàn)狀和這些技術(shù)怎么應(yīng)用到你的項(xiàng)目中感興趣,那么只要閱讀第1章和第2章就夠了。如果你是位擁有編譯器設(shè)計(jì)背景的研究人員,那么建議直接跳到第3章開(kāi)始閱讀。但是之后的章節(jié)還是最好順序閱讀。這是因?yàn)?hellip;…呃,還是舉個(gè)例子吧,介紹水印技術(shù)的章節(jié)中會(huì)用到在代碼混淆章節(jié)中介紹的知識(shí)。當(dāng)然在本書(shū)撰寫過(guò)程中,我們還是盡量使各章內(nèi)容都能獨(dú)立成章的,所以(如果你擁有一些背景知識(shí))偶爾跳過(guò)那么一兩章也未嘗不可。如果你是一位工程師,想要使用有關(guān)技術(shù)加固你的軟件,那么強(qiáng)烈建議你仔仔細(xì)細(xì)地閱讀第3章的所有內(nèi)容,如果有條件的話,還應(yīng)該再搞幾本編譯原理方面的教材惡補(bǔ)一下“程序靜態(tài)分析”的知識(shí)。然后你就可以隨意跳到感興趣的章節(jié)去閱讀了。如果你是名大學(xué)生,把本書(shū)作為一門課程的教材來(lái)閱讀,那么就應(yīng)該一頁(yè)一頁(yè)地完整閱讀本書(shū),期末別忘了做好復(fù)習(xí)?! ∠M緯?shū)能夠做到兩件事情。首先,希望能向你,親愛(ài)的讀者,證明代碼混淆、軟件水印、軟件“胎記”和防篡改等技術(shù)里有大量妙不可言的想法,值得你花點(diǎn)時(shí)間去學(xué)習(xí),而且這些技術(shù)也可以用來(lái)保護(hù)軟件。其次,希望本書(shū)能把本領(lǐng)域內(nèi)當(dāng)前所有有用的信息匯集在一起,從而為隱蔽軟件的深入研究提供一個(gè)良好的起點(diǎn)?! hristian Collberg和Jasvir Nagra  2009年2月2日(土撥鼠日)  P.S. 實(shí)際上寫作這本書(shū)還有第三個(gè)目的。要是在閱讀本書(shū)時(shí),你突然靈光閃現(xiàn),冒出一個(gè)絕妙的主意,進(jìn)而激發(fā)了你投身于隱蔽軟件研究的雄心壯志,那么,親愛(ài)的讀者,我這第三個(gè)目的就算是達(dá)到了。請(qǐng)把你的新算法告訴我們,我們將把它加到本書(shū)的下一版里!

內(nèi)容概要

  對(duì)抗軟件盜版、篡改和惡意逆向工程的理論、技巧和工具
  近十年來(lái),人們?cè)谲浖辣I版和防篡改技術(shù)的研發(fā)上取得了重大進(jìn)展。這些技術(shù)在保護(hù)軟件開(kāi)發(fā)人員的知識(shí)產(chǎn)權(quán)方面具有不可替代的作用。無(wú)論是研究人員、在校學(xué)生,還是開(kāi)發(fā)人員,要了解這些技術(shù)及其能提供的安全級(jí)別和可能引發(fā)的性能開(kāi)銷,都可以從本書(shū)獲得權(quán)威、全面的參考資料。
  Christian Collberg和Jasvir
Nagra在書(shū)中詳盡地介紹了相關(guān)技術(shù),涵蓋了計(jì)算機(jī)科學(xué)的各個(gè)相關(guān)領(lǐng)域,包括密碼學(xué)、隱寫術(shù)、水印、軟件度量、逆向工程和編譯優(yōu)化等。本書(shū)通過(guò)大量的示例代碼,向讀者展示了代碼混淆、軟件水印、代碼防篡改和“胎記”技術(shù)等保護(hù)算法的實(shí)現(xiàn)方式,并且從理論和實(shí)踐兩個(gè)角度探討了這些技術(shù)的局限。
  涵蓋的內(nèi)容
  攻擊者和防御者用來(lái)分析程序的各種主要方法
  代碼混淆技術(shù),用于提高程序被分析和理解的難度
  軟件水印和指紋,用于標(biāo)識(shí)軟件開(kāi)發(fā)者并追蹤盜版
  代碼防篡改技術(shù),用于檢測(cè)和響應(yīng)非法修改代碼和數(shù)據(jù)的行為,從而保護(hù)軟件
  動(dòng)態(tài)水印和動(dòng)態(tài)混淆技術(shù),用于阻止軟件的非法復(fù)制
  軟件相似性分析和“胎記”算法,用于檢測(cè)代碼剽竊
  硬件技術(shù),用于保護(hù)軟件及各類媒體免遭盜版和篡改
  在分布式系統(tǒng)中,檢測(cè)遠(yuǎn)端不可信平臺(tái)上運(yùn)行的軟件是否被篡改
  代碼混淆技術(shù)在理論上的局限性

作者簡(jiǎn)介

  Christian Collberg
瑞典隆德大學(xué)計(jì)算機(jī)科學(xué)博士,亞利桑那州立大學(xué)計(jì)算機(jī)科學(xué)系副教授,從事代碼混淆、軟件水印和“胎記”方面的基礎(chǔ)性研究工作。他曾在新西蘭奧克蘭大學(xué)及中國(guó)科學(xué)院工作過(guò)。
  Jasvir Nagra
專注于設(shè)計(jì)強(qiáng)壯的動(dòng)態(tài)水印算法,曾致力于通過(guò)代碼混淆和防篡改技術(shù)保護(hù)運(yùn)行在遠(yuǎn)程不可信平臺(tái)上的軟件的完整性。目前,他任職于谷歌公司,在加利福尼亞州從事與基于編程語(yǔ)言的安全性有關(guān)的研究工作。

書(shū)籍目錄

第1章 什么是隱蔽軟件
 1.1 概述
 1.2 攻擊和防御
 1.3 程序分析的方法
 1.4 代碼混淆
 1.4.1 代碼混淆的應(yīng)用
 1.4.2 混淆技術(shù)概述
 1.4.3 被黑客們使用的代碼混淆技術(shù)
 1.5 防篡改技術(shù)
 1.5.1 防篡改技術(shù)的應(yīng)用
 1.5.2 防篡改技術(shù)的例子
 1.6 軟件水印
 1.6.1 軟件水印的例子
 1.6.2 攻擊水印系統(tǒng)
 1.7 軟件相似性比對(duì)
 1.7.1 代碼剽竊
 1.7.2 軟件作者鑒別
 1.7.3 軟件“胎記”
 1.7.4 軟件“胎記”的案例
 1.8 基于硬件的保護(hù)技術(shù)
 1.8.1 把硬件加密鎖和軟件一起發(fā)售
 1.8.2 把程序和CPU綁定在一起
 1.8.3 確保軟件在安全的環(huán)境中執(zhí)行
 1.8.4 加密可執(zhí)行文件
 1.8.5 增添物理防護(hù)
 1.9 小結(jié)
 1.9.1 使用軟件保護(hù)技術(shù)的理由
 1.9.2 不使用軟件保護(hù)技術(shù)的理由
 1.9.3 那我該怎么辦呢
 1.10 一些說(shuō)明
第2章 攻擊與防御的方法
 2.1 攻擊的策略
 2.1.1 被破解對(duì)象的原型
 2.1.2 破解者的動(dòng)機(jī)
 2.1.3 破解是如何進(jìn)行的
 2.1.4 破解者會(huì)用到的破解方法
 2.1.5 破解者都使用哪些工具
 2.1.6 破解者都會(huì)使用哪些技術(shù)
 2.1.7 小結(jié)
 2.2 防御方法
 2.2.1 一點(diǎn)說(shuō)明
 2.2.2 遮掩
 2.2.3 復(fù)制
 2.2.4 分散與合并
 2.2.5 重新排序
 2.2.6 映射
 2.2.7 指引
 2.2.8 模仿
 2.2.9 示形
 2.2.10 條件—觸發(fā)
 2.2.11 運(yùn)動(dòng)
 2.2.12 小結(jié)
 2.3 結(jié)論
 2.3.1 對(duì)攻擊/防御模型有什么要求
 2.3.2 該如何使用上述模型設(shè)計(jì)算法
第3章 分析程序的方法
 3.1 靜態(tài)分析
 3.1.1 控制流分析
 3.1.2 數(shù)據(jù)流分析
 3.1.3 數(shù)據(jù)依賴分析
 3.1.4 別名分析
 3.1.5 切片
 3.1.6 抽象解析
 3.2 動(dòng)態(tài)分析
 3.2.1 調(diào)試
 3.2.2 剖分
 3.2.3 trace
 3.2.4 模擬器
 3.3 重構(gòu)源碼
 3.3.1 反匯編
 3.3.2 反編譯
 3.4 實(shí)用性分析
 3.4.1 編程風(fēng)格度量
 3.4.2 軟件復(fù)雜性度量
 3.4.3 軟件可視化
 3.5 小結(jié)
第4章 代碼混淆
 4.1 保留語(yǔ)義的混淆轉(zhuǎn)換
 4.1.1 算法OBFCF:多樣化轉(zhuǎn)換
 4.1.2 算法OBFTP:標(biāo)識(shí)符重命名
 4.1.3 混淆的管理層
 4.2 定義
 4.2.1 可以實(shí)用的混淆轉(zhuǎn)換
 4.2.2 混淆引發(fā)的開(kāi)銷
 4.2.3 隱蔽性
 4.2.4 其他定義
 4.3 復(fù)雜化控制流
 4.3.1 不透明表達(dá)式
 4.3.2 算法OBFWHKD:壓扁控制流
 4.3.3 使用別名
 4.3.4 算法OBFCTJbogus:插入多余的控制流
 4.3.5 算法OBFLDK:通過(guò)跳轉(zhuǎn)函數(shù)執(zhí)行無(wú)條件轉(zhuǎn)移指令
 4.3.6 攻擊
 4.4 不透明謂詞
 4.4.1
算法OBFCTJpointer:從指針別名中產(chǎn)生不透明謂詞
 4.4.2
算法OBFWHKDopaque:數(shù)組別名分析中的不透明值
 4.4.3
算法OBFCTJthread:從并發(fā)中產(chǎn)生的不透明謂詞
 4.4.4 攻擊不透明謂詞
 4.5 數(shù)據(jù)編碼
 4.5.1 編碼整型數(shù)
 4.5.2 混淆布爾型變量
 4.5.3 混淆常量數(shù)據(jù)
 4.5.4 混淆數(shù)組
 4.6 結(jié)構(gòu)混淆
 4.6.1 算法OBFWCsig:合并函數(shù)簽名
 4.6.2 算法OBFCTJclass:分解和合并類
 4.6.3 算法OBFDMRVSL:摧毀高級(jí)結(jié)構(gòu)
 4.6.4 算法OBFAJV:修改指令編碼方式
 4.7 小結(jié)
第5章 混淆理論
 5.1 定義
 5.2 可被證明是安全的混淆:我們能做到嗎
 5.2.1 圖靈停機(jī)問(wèn)題
 5.2.2 算法REAA:對(duì)程序進(jìn)行反混淆
 5.3 可被證明是安全的混淆:有時(shí)我們能做到
 5.3.1 算法OBFLBS:混淆點(diǎn)函數(shù)
 5.3.2 算法OBFNS:對(duì)數(shù)據(jù)庫(kù)進(jìn)行混淆
 5.3.3 算法OBFPP:同態(tài)加密
 5.3.4 算法OBFCEJO:白盒DES加密
 5.4 可被證明是安全的混淆:(有時(shí)是)不可能完成的任務(wù)
 5.4.1 通用混淆器
 5.4.2 混淆最簡(jiǎn)單的程序
 5.4.3 對(duì)混淆所有程序的不可能性的證明
 5.4.4 小結(jié)
 5.5 可被證明為安全的混淆:這玩兒還能成嗎
 5.5.1 跳出不可能性的陰霾
 5.5.2 重新審視定義:構(gòu)造交互式的混淆方法
 5.5.3 重新審視定義:如果混淆不保留語(yǔ)義又當(dāng)如何
 5.6 小結(jié)
第6章 動(dòng)態(tài)混淆
 6.1 定義
 6.2 代碼遷徙
 6.2.1 算法OBFKMNM:替換指令
 6.2.2 算法OBFAGswap:自修改狀態(tài)機(jī)
 6.2.3 算法OBFMAMDSB:動(dòng)態(tài)代碼合并
 6.3 加密技術(shù)
 6.3.1 算法OBFCKSP:把代碼作為產(chǎn)生密鑰的源泉
 6.3.2 算法OBFAGcrypt:結(jié)合自修改代碼和加密
 6.4 小結(jié)
第7章 軟件防篡改
 7.1 定義
 7.1.1 對(duì)篡改的監(jiān)測(cè)
 7.1.2 對(duì)篡改的響應(yīng)
 7.1.3 系統(tǒng)設(shè)計(jì)
 7.2 自監(jiān)測(cè)
 7.2.1 算法TPCA:防護(hù)代碼之網(wǎng)
 7.2.2 生成hash函數(shù)
 7.2.3 算法TPHMST:隱藏hash值
 7.2.4 Skype中使用的軟件保護(hù)技術(shù)
 7.2.5 算法REWOS:攻擊自hash算法
 7.2.6 講評(píng)
 7.3 算法RETCJ:響應(yīng)機(jī)制
 7.4 狀態(tài)自檢
 7.4.1 算法TPCVCPSJ:易遭忽視的hash函數(shù)
 7.4.2 算法TPJJV:重疊的指令
 7.5 遠(yuǎn)程防篡改
 7.5.1 分布式監(jiān)測(cè)和響應(yīng)機(jī)制
 7.5.2 解決方案
 7.5.3 算法TPZG:拆分函數(shù)
 7.5.4
算法TPSLSPDK:通過(guò)確保遠(yuǎn)程機(jī)器硬件配置來(lái)防篡改
 7.5.5 算法TPCNS:對(duì)代碼進(jìn)行持續(xù)的改變
 7.6 小結(jié)
第8章 軟件水印
 8.1 歷史和應(yīng)用
 8.1.1 應(yīng)用
 8.1.2 在音頻中嵌入水印
 8.1.3 在圖片中嵌入水印
 8.1.4 在自然語(yǔ)言文本中嵌入水印
 8.2 軟件水印
 8.3 定義
 8.3.1 水印的可靠性
 8.3.2 攻擊
 8.3.3 水印與指紋
 8.4 使用重新排序的方法嵌入水印
 8.4.1 算法WMDM:重新排列基本塊
 8.4.2 重新分配資源
 8.4.3 算法WMQP:提高可靠性
 8.5 防篡改水印
 8.6 提高水印的抗干擾能力
 8.7 提高隱蔽性
 8.7.1 算法WMMIMIT:替換指令
 8.7.2 算法WMVVS:在控制流圖中嵌入水印
 8.7.3 算法WMCC:抽象解析
 8.8 用于隱寫術(shù)的水印
 8.9 把水印值分成幾個(gè)片段
 8.9.1 把大水印分解成幾個(gè)小片段
 8.9.2 相互冗余的水印片段
 8.9.3 使用稀疏編碼提高水印的可靠性
 8.10 圖的編/解碼器
 8.10.1 父指針導(dǎo)向樹(shù)
 8.10.2 底數(shù)圖
 8.10.3 排序圖
 8.10.4 根延伸的平面三叉樹(shù)枚舉編碼
 8.10.5 可歸約排序圖
 8.11 講評(píng)
 8.11.1 嵌入技術(shù)
 8.11.2 攻擊模型
第9章 動(dòng)態(tài)水印
 9.1 算法WMCT:利用別名
 9.1.1 一個(gè)簡(jiǎn)單的例子
 9.1.2 水印識(shí)別中的問(wèn)題
 9.1.3 增加數(shù)據(jù)嵌入率
 9.1.4 增加抵御攻擊的抗干擾性能
 9.1.5 增加隱蔽性
 9.1.6 講評(píng)
 9.2 算法WMNT:利用并發(fā)
 9.2.1 嵌入水印的基礎(chǔ)構(gòu)件
 9.2.2 嵌入示例
 9.2.3 識(shí)別
 9.2.4 避免模式匹配攻擊
 9.2.5 對(duì)構(gòu)件進(jìn)行防篡改處理
 9.2.6 講評(píng)
 9.3 算法WMCCDKHLSpaths:擴(kuò)展執(zhí)行路徑
 9.3.1 水印的表示和嵌入
 9.3.2 識(shí)別
 9.3.3 講評(píng)
 9.4 算法WMCCDKHLSbf:防篡改的執(zhí)行路徑
 9.4.1 嵌入
 9.4.2 識(shí)別
 9.4.3 對(duì)跳轉(zhuǎn)函數(shù)進(jìn)行防篡改加固
 9.4.4 講評(píng)
 9.5 小結(jié)
第10章 軟件相似性分析
 10.1 應(yīng)用
 10.1.1 重復(fù)代碼篩選
 10.1.2 軟件作者鑒別
 10.1.3 剽竊檢測(cè)
 10.1.4 胎記檢測(cè)
 10.2 定義
 10.3 基于k-gram的分析
 10.3.1 算法SSSWAwinnow:有選擇地記錄k-gram
hash
 10.3.2 算法SSSWAMOSS:軟件剽竊檢測(cè)
 10.3.3 算法SSMCkgram:Java
字節(jié)碼的k-gram“胎記”
 10.4 基于API的分析
 10.4.1 算法SSTNMM:面向?qū)ο蟮摹疤ビ洝?br /> 10.4.2 算法SSTONMM:動(dòng)態(tài)函數(shù)調(diào)用“胎記”
 10.4.3 算法SSSDL:動(dòng)態(tài)k-gram
API“胎記”
 10.5 基于樹(shù)的分析
 10.6 基于圖的分析
 10.6.1 算法SSKH:基于PDG的重復(fù)代碼篩選
 10.6.2 算法SSLCHY:基于PDG的剽竊檢測(cè)
 10.6.3 算法SSMCwpp:整個(gè)程序的動(dòng)態(tài)“胎記”
 10.7 基于軟件度量的分析方法
 10.7.1 算法SSKK:基于軟件度量的重復(fù)代碼篩選
 10.7.2 算法SSLM:基于度量的軟件作者鑒別
 10.8 小結(jié)
第11章 用硬件保護(hù)軟件
 11.1 使用發(fā)行的物理設(shè)備反盜版
 11.1.1 對(duì)發(fā)行盤片的保護(hù)
 11.1.2 軟件狗和加密鎖
 11.2 通過(guò)可信平臺(tái)模塊完成認(rèn)證啟動(dòng)
 11.2.1 可信啟動(dòng)
 11.2.2 產(chǎn)生評(píng)估結(jié)果
 11.2.3 TPM
 11.2.4 盤問(wèn)式驗(yàn)證過(guò)程
 11.2.5 社會(huì)可信性和隱私問(wèn)題
 11.2.6 應(yīng)用和爭(zhēng)議
 11.3 加密的可執(zhí)行文件
 11.3.1 XOM體系結(jié)構(gòu)
 11.3.2 阻止重放攻擊
 11.3.3 修補(bǔ)有漏洞的地址總線
 11.3.4 修補(bǔ)有漏洞的數(shù)據(jù)總線
 11.3.5 講評(píng)
 11.4 攻擊防篡改設(shè)備
 11.4.1 監(jiān)聽(tīng)總線——破解微軟的XBOX
 11.4.2
猜測(cè)指令——破解達(dá)拉斯半導(dǎo)體公司的DS5002FP微處理器
 11.4.3 破解智能卡
 11.4.4 非侵入式攻擊
 11.4.5 主板級(jí)的保護(hù)
 11.5 小結(jié)
參考文獻(xiàn)

章節(jié)摘錄

版權(quán)頁(yè):   插圖:   2.2 防御方法 你已經(jīng)學(xué)了很多破解者分析程序和找出(有時(shí)是摧毀)程序中隱藏秘密的方法了。這些技術(shù)有些是在調(diào)試器中單步執(zhí)行每條指令,也有些要在模擬器中運(yùn)行程序,還有些是要把程序反編譯成更易于理解的源碼形式?,F(xiàn)在探險(xiǎn)結(jié)束,你又恢復(fù)了好人的身份。畢竟,你最終想通過(guò)本書(shū)解答的問(wèn)題是,如何保護(hù)你的程序不被破解。 你會(huì)發(fā)現(xiàn),在本書(shū)中我們將以不同的形式反復(fù)強(qiáng)調(diào)一些基本的原則。而且最有意思的是,這些基本原則既不是新提出來(lái)的,也不是專用于軟件領(lǐng)域的:自混沌初分以來(lái),各種動(dòng)植物就擁有各式各樣的自衛(wèi)方法,而自從有人類社會(huì)這天起,人們也想出了很多隱藏秘密以保護(hù)自身不受環(huán)境和敵人傷害的方法。在本節(jié)中,我們將向你展示一個(gè)描述這些基本方法并且把它們應(yīng)用到軟件保護(hù)方面的模型(84)。我們的目標(biāo)是,指出各個(gè)可用于軟件保護(hù)的基本方法并把它們用于本書(shū)接下來(lái)討論的部分中,同時(shí)我們還要使用這些方法對(duì)各種已發(fā)表的軟件保護(hù)技術(shù)進(jìn)行分類。此外,我們希望這個(gè)模型也可以為研究員和工程師在討論已有的或者開(kāi)發(fā)新的軟件保護(hù)技術(shù)時(shí)提供一種統(tǒng)一語(yǔ)言。 每當(dāng)看見(jiàn)一種新的防護(hù)技術(shù)的時(shí)候,你都可以用這個(gè)模型對(duì)它進(jìn)行歸類。絕大多數(shù)情況下,你會(huì)說(shuō)“這個(gè)技術(shù)只是另一個(gè)以前已經(jīng)發(fā)表過(guò)的技術(shù)的簡(jiǎn)單變形”或者“這個(gè)辦法比較有創(chuàng)意地把兩個(gè)已知的方法給結(jié)合起來(lái)了,我估計(jì)它有如下屬性”……但極少數(shù)情況下(但這也是很有用的),你可能會(huì)發(fā)現(xiàn),“這個(gè)技術(shù)沒(méi)法歸類到這個(gè)模型中去——它含有某種全新的想法,我們必須要重新考慮整個(gè)模型的架構(gòu)問(wèn)題?!狈粗俏覀兊哪P湍軌蝾A(yù)言出某些新的軟件保護(hù)的方法的話,那我們就再高興不過(guò)了。如果你的需求是“啊,我需要一個(gè)具有下列屬性的保護(hù)方法”,而使用我們的模型,你可以推出“如果以這樣一種方法把這兩個(gè)基本方法組合起來(lái)使用,那就能滿足這些屬性”,我覺(jué)得這個(gè)模型就算是很實(shí)用的了。雖然這個(gè)模型還不是很完善,但是它已經(jīng)足以描述本書(shū)剩余部分的內(nèi)容并對(duì)文獻(xiàn)中已經(jīng)發(fā)表過(guò)的所有保護(hù)技術(shù)進(jìn)行分類了。 盡管建立這一模型的靈感是源自動(dòng)植物的防御自衛(wèi)的本能和人類社會(huì)之間的斗爭(zhēng)藝術(shù)。但是我們還是沒(méi)有在模型中把三十六計(jì)全部羅列一遍。比如河豚魚(yú)在遭遇攻擊時(shí)會(huì)把自己像吹氣球一樣鼓起來(lái),以嚇唬對(duì)方,但是這一招虛張聲勢(shì)在軟件保護(hù)中顯然是用不上的,于是我們就將其舍棄掉了。

編輯推薦

《軟件加密與解密》詳盡地介紹了相關(guān)技術(shù)。探討了計(jì)算機(jī)科學(xué)的各個(gè)相關(guān)領(lǐng)域。包括密碼學(xué)、隱寫術(shù)、水印、軟件度量、逆向工程和編譯優(yōu)化等?!盾浖用芘c解密》通過(guò)大量的示例代碼。向讀者展示了代碼混淆、軟件水印、代碼防篡改和“胎記”技術(shù)等保護(hù)算法的實(shí)現(xiàn)方式,并且從理論和實(shí)踐兩個(gè)角度探討了這些技術(shù)的局限。《軟件加密與解密》適合各層次軟件開(kāi)發(fā)人員閱讀。近十年來(lái),人們?cè)谲浖辣I版和防篡改技術(shù)的研發(fā)上取得了重大進(jìn)展。這些技術(shù)在保護(hù)軟件開(kāi)發(fā)人員的知識(shí)產(chǎn)權(quán)方面具有不可替代的作用。無(wú)論是研究人員、在校學(xué)生。還是開(kāi)發(fā)人員.要了解這些技術(shù)及其能提供的安全級(jí)別和可能引發(fā)的性能開(kāi)銷,都可以從本書(shū)獲得權(quán)威、全面的參考資料。

名人推薦

“本書(shū)透徹、嚴(yán)謹(jǐn)?shù)亟榻B了計(jì)算機(jī)安全中一個(gè)日益重要的領(lǐng)域,是從事軟件保護(hù)的研究、學(xué)習(xí)和實(shí)踐的‘必備手冊(cè)’?!?——Mikhail Atallah,普度大學(xué)計(jì)算機(jī)科學(xué)系教授

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    軟件加密與解密 PDF格式下載


用戶評(píng)論 (總計(jì)21條)

 
 

  •   書(shū)籍講解多半是加密原理與方法,主要是為了軟件保護(hù)方面的.和加密與解密這本一起看,效果更好.
  •   讀了幾章,對(duì)軟件保護(hù)很有啟發(fā),相信這本書(shū)會(huì)紅的。
  •   內(nèi)容全面,但與實(shí)際應(yīng)用有些差距。
  •   書(shū)比較厚,沒(méi)來(lái)及看
  •   中文版看下來(lái)還不錯(cuò)
  •   不為了女神,屌絲的理想。。。
  •   朋友推薦的,據(jù)說(shuō)不錯(cuò),正在看。。。。。。。
  •   好東西,不容錯(cuò)過(guò)
  •   貴是貴,物有所值!
  •   書(shū)非常棒,就是貴啊...話說(shuō)翻譯的能快點(diǎn)就好了
  •   研究安全的可以看看
  •   可以和“反匯編揭秘”互補(bǔ)著讀
  •   內(nèi)容體系比較完整,但介紹得不深入。
  •   內(nèi)容全面,結(jié)構(gòu)清晰,算法眾多,表達(dá)幽默
  •   適合拓展閱讀,有些內(nèi)容還是有些深?yuàn)W的
  •   幫一個(gè)朋友買的,不知道她是不是喜歡
  •   本身側(cè)重于理論,可操作性似乎并不強(qiáng)。不過(guò)學(xué)學(xué)理論,從編譯器的層面提升自己還是非常有必要的。
  •   要研習(xí)一下編譯原理之類的知識(shí),才能深入這書(shū)。
  •   絕對(duì)是軟件破解界經(jīng)典圖書(shū),人手必備
  •   jiami 加密
  •   一本有實(shí)用價(jià)值的書(shū)。

推薦圖書(shū)


 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7