當前位置:商標查詢大全網 - 商標轉讓 - 軟件加密與解密前言

軟件加密與解密前言

隱藏軟件是近十年來計算機安全研究的壹個新分支。在隱蔽軟件的研究過程中,我們不僅要借鑒計算機安全的技術,還要運用大量計算科學其他領域的技術,如密碼學、隱寫術、數字水印、軟件度量、逆向工程和編譯器優化等。我們使用這些技術來滿足在計算機程序中安全存儲秘密信息的需求,盡管這些需求以不同的形式表達。本書中的“秘密”壹詞含義廣泛,書中介紹的技術(代碼混淆、軟件水印和指紋、防篡改技術和軟件“胎記”等。)用於防止他人剽竊軟件中的智力成果。比如軟件中使用的指紋技術可以用來追蹤軟件是否盜版,代碼混淆技術可以讓攻擊者更難逆向分析軟件,防篡改技術可以讓別人很難做出軟件的破解版本,等等。

好了,現在來說說為什麽要看這本書,誰在用隱蔽軟件,這本書會講些什麽。

為什麽要看這本書?

與傳統的安全研究不同,隱蔽軟件不關心如何防止計算機被計算機病毒入侵。它關心的是計算機病毒的作者如何阻止別人分析病毒!同樣,我們也不關心軟件是否存在安全漏洞。我們關心的是如何在程序中偷偷添加壹些只有在程序被篡改時才會執行的代碼。在密碼學領域,加密數據的安全性取決於加密密鑰的保密性,而我們現在研究的正是如何隱藏密鑰。軟件工程中有很多軟件度量技術來保證壹個好的程序結構。這本書將使用同樣的技術使程序變得復雜和難以閱讀。本書描述的很多技術都是基於編譯器優化技術開發的算法,但編譯器優化的目的是讓編譯器生成的程序盡可能小,盡可能快。然而,使用本書中介紹的壹些技術會使生成的程序變得很大,執行起來很慢。最後,傳統的數字水印和隱寫術試圖將待隱藏的信息隱藏在圖像、音頻、視頻甚至純文本文件中,而隱寫軟件則將待隱藏的信息隱藏在計算機代碼中。

那麽,為什麽要讀這本書呢?為什麽要了解壹種無法防止電腦被病毒或蠕蟲攻擊的安全技術?為什麽要學壹門只會讓代碼變大,執行速度變慢的編譯優化技術?為什麽要把精力花在違反密碼學基本前提(即密鑰不能被攻擊者獲取)的密碼學分支上?

答案是,傳統的計算機安全和密碼學的研究成果有時無法解決實際工作中遇到的、急需解決的安全問題。例如,這本書將展示如何使用軟件水印技術來防止軟件盜版。軟件水印是嵌入在程序中的唯壹標識(類似於信用卡的卡號或版權聲明)。通過這種識別,程序的副本與您(程序的作者)或客戶相關聯。如果妳在市場上發現了自己軟件的盜版光盤,妳可以通過盜版軟件提取的水印,追蹤到從妳這裏購買這個盜版軟件的主人的家夥。在提供給合作夥伴時,您還可以在新開發遊戲的測試版中添加數字水印。如果妳覺得有人泄露了妳的代碼,妳可以(從很多合夥人中)找到肇事者,把他告上法庭。

再比如新版本的程序中加入了新的算法。當然,妳不希望競爭對手得到這個算法,並將其添加到他們的軟件中。這時候妳就可以把程序搞亂,讓它盡可能復雜,讓競爭對手的逆向分析軟件效率低下。而如果妳真的懷疑有人抄襲了妳的代碼,這本書也會教妳如何使用軟件“胎記”來證明妳的懷疑。

比如妳的程序包含了壹些未知的代碼,妳想確定沒有這些代碼程序就不能正常運行。比如妳肯定不希望黑客修改程序中的軟件許可驗證碼,或者數字版權管理系統中可以用來解密mp3文件的密鑰。第七章將討論各種防篡改技術,以確保被篡改的程序停止正常運行。

聽說妳把密鑰放在可執行文件裏了?多麽糟糕的主意!以往的經驗告訴我們,任何類似的“秘密,也就是安全”的做法,最終都會以失敗告終,無論如何在程序中隱藏密鑰,都逃不出頑強的逆向分析師的手掌心。當然,必須承認妳的做法還是對的。本書介紹的所有技巧都不能保證軟件永遠免於黑客攻擊。不需要保證什麽東西永遠保密,程序永遠不被篡改,代碼永遠不被抄襲。除非在這個研究領域有重大突破,否則我們所能期待的就是拖延對方的進攻。我們的目標是讓攻擊者的攻擊速度慢到足以讓他覺得攻擊妳的軟件非常痛苦或者代價很大,從而放棄攻擊。可能是攻擊者耐心的花了很長時間來突破妳的防禦,但這時候妳已經從這個軟件賺夠了錢,或者妳已經使用了更新版本的代碼(這時候他得到的東西就壹文不值了)。

比如妳是付費頻道的運營商,用戶可以通過機頂盒收看妳提供的電視節目。每個機頂盒都有標簽——分配給每個用戶的唯壹ID存儲在代碼的某個位置,這樣妳就可以根據用戶的付費決定是允許還是拒絕特定用戶觀看頻道中的節目。但現在壹個黑客團夥發現並反匯編了這段代碼,找到了計算用戶ID的算法,並在網上低價向網友出售修改用戶ID的方法。這時候妳該怎麽辦?妳可能想到過用防篡改的智能卡,但是這個東西並沒有看起來那麽難破解,這個會在第11章中解釋。或者您可能會想到混淆代碼,使其更難分析。或者可以使用防篡改技術,讓程序壹被修改就自動停止運行。更有可能的是,您將混合使用上述技術來保護您的代碼。但是盡管使用了所有的技術,妳仍然要知道並接受這樣壹個事實,妳的代碼仍然可能被破解,秘密仍然會被泄露(在這種情況下,機頂盒中的用戶ID仍然會被篡改)。這是怎麽發生的?這只是因為“不公開就安全”的想法從根本上是有缺陷的。但是既然這本書介紹的所有技術都不能給妳壹個“完美而長久的安全保障”,那為什麽還要用這些技術,還要買這樣壹本書呢?答案很簡單。代碼抵禦黑客攻擊的時間越長,訂閱該頻道的客戶就越多,機頂盒升級的周期也就越長,所以妳賺的錢和存的錢就越多。

就這麽簡單。

誰會使用秘密軟件?

許多知名公司都對秘密軟件感興趣。事實上,很難真正知道這項技術在實踐中的使用程度(因為大多數公司對如何保護他們的代碼絕對守口如瓶),但我們仍然可以根據他們的專利申請和所有權來猜測他們對隱藏軟件的興趣。微軟擁有許多軟件水印、代碼混亂和軟件“胎記”,並成功創辦了壹家公司。蘋果有壹項關於代碼混淆的專利,很可能是用來保護其iTune軟件的。Convera是英特爾公司的壹家獨立企業,專註於應用於數字版權管理的代碼防篡改技術[27,268-270]。從加拿大北方電信分離出來的鬥篷公司也是這壹領域最成功的企業之壹。該公司有壹項專利叫做“白盒加密”[67,68,182],將加密算法和密鑰隱藏在程序代碼中。5438年6月+2007年2月,鬥篷公司被主要從事付費電視業務的荷蘭公司愛迪德以7250萬美元收購。即使是相對後來者的太陽微系統,也在代碼混淆領域提交了壹些專利申請。

Skype的VoIP客戶端也使用類似於Arxan[24]、Intel [27]和[89]的代碼混淆和防篡改技術,這些技術將在本書中提到,用於反向工程加固。對於Skype來說,保護其客戶端的完整性無疑是極其重要的,因為壹旦有人成功解析其客戶端軟件,分析出Skype所使用的網絡協議,黑客就可以編寫出廉價的程序,可以與Skype軟件正常通信(在這種情況下,人們就不必使用Skype)。因此,保持網絡協議的私有性將有助於Skype擁有龐大的用戶群,這很可能是易貝在2005年以26億美元收購Skype的原因。事實上,隱蔽軟件技術的使用也為Skype贏得了足夠的時間成為VoIP技術的領導者。即使此時對Skype協議進行了分析(就像黑客所做的那樣,詳見7.2.4節),黑客也不可能想出壹款類似的軟件,能夠撼動Skype的市場地位。

學術研究者從不同的角度研究了隱蔽軟件技術。壹些有編譯器和編程語言研究背景的研究人員,比如我們,自然會加入這方面的研究,因為大部分涉及代碼轉換的算法都會涉及到靜態分析,這是編譯優化技術的研究人員所熟悉的。雖然在過去,大多數密碼學家不屑於研究“隱私即安全”的問題,但最近壹些密碼學家已經開始將密碼學相關技術應用到軟件水印中,並發現了代碼混淆技術的局限性。來自多媒體水印、計算機安全和軟件工程的研究人員也發表了許多關於隱蔽軟件的文章。不幸的是,由於缺乏專門的出版物和學術會議(供研究人員相互交流),該領域的研究進展被大大推遲。事實上,為了讓這些研究成果被傳統的學術會議和期刊所接受,研究人員壹直在努力,並且還在努力。目前已發表隱蔽軟件研究成果的學術會議有ACM關於POPL(編程語言原理)的研討會、信息隱藏研討會、IEEE軟件工程研討會、高級密碼學會議(CRYPTO)、ISC(信息安全會議)等關於數字版權管理的學術會議。隨著隱蔽軟件領域的研究越來越成為學術研究的主流,我們有望出現專門研究隱蔽軟件的期刊、座談會甚至研討會,但遺憾的是這壹切至今都沒有實現。

軍方也在秘密軟件上花費了大量精力(和納稅人的錢)。比如庫索特公司擁有的軟件水印算法專利[95]就屬於世界第九大國防工程承包商法國泰雷茲集團。以下是從最新(2006年)美軍招標文件[303]中引用的壹段關於AT(防篡改)技術研究的話。

目前,所有美軍項目執行部門(PEO)和項目經理(PM)在設計和實施相關系統時,都必須使用軍方和國防部制定的AT策略。嵌入式軟件是現代武器系統的核心,是最需要保護的技術之壹。AT技術可以有效保證這些技術不會被其他國家(人)在逆向工程中分析利用。在沒有at技術保護的情況下,很容易對標準編譯器編譯生成的代碼進行逆向分析。逆向工程分析師在分析軟件時,會用到很多工具,比如調試器、反編譯程序和反匯編程序,也會用到各種靜態和動態的分析技術。使用AT技術的目的是讓逆向工程變得更加困難,從而防止美國的技術優勢被其他國家竊取。在未來,有必要為陸軍的PEO和預防性維護提供更有用、有效和多樣化的自動測試工具集...開發AT技術的目的是提供壹個可以抵抗逆向工程分析的高強度外殼,最大限度的延緩敵人對受保護軟件的攻擊。這樣,美國就有機會保持其在高科技領域的優勢,或者減緩其武器技術的泄露。最終美軍可以繼續保持技術優勢,從而保證軍備上的絕對優勢。

這份招標文件來自美軍的導彈與太空計劃(設計部),重點是實時嵌入式系統的保護。我們有理由相信,這份招標文件的原因是美軍擔心向敵人發射的導彈因種種原因落地後不會爆炸,從而讓敵人有機會接觸到嵌入導彈的控制軟件,引導導彈飛越目標。

以下是美國國防部[115]的另壹段話。

主動軟件保護(SPI)是國防部的職責之壹,它必須開發和部署相關的保護技術,以確保包含國防武器系統關鍵信息的計算機程序的安全。SPI提供了壹種全新的安全保護方式,它不保護計算機或網絡的安全(像傳統的安全技術壹樣),只是加強了計算機程序本身的安全性。這種新方法可以顯著提高國防部的信息安全。SPI的應用非常廣泛,從桌面到超級計算機的所有程序都可以通過SPI技術得到保護。是完整的壹層,是“縱深防禦”的範例。SPI技術是對網絡防火墻、物理安全等傳統安全技術的補充,但其實現並不依賴於這些傳統安全設備。現在,SPI技術已經部署在選定的HPC中心、超過150個國防部門和其他由商業公司建設和維護的軍事基地中。SPI技術的廣泛部署將有效增強美國和美國國防部對關鍵應用技術的保護。

上面這段話說明了什麽?說明美國國防部不僅關心導彈是否會落入敵方領土,還關心運行在自己的安全系數和性能都很高的計算機中心的軟件的安全性。事實上,竊密和反竊密是反間諜機構和情報部門之間永恒的主題。例如,戰鬥機上的壹個程序需要更新。這個時候我們很有可能用筆記本電腦連接這個戰鬥機進行更新操作。但是如果這臺筆記本電腦不小心丟失了,或者只是像電影中經常出現的那樣被其他政府以某種方式控制了,會發生什麽?對方會立即拿相關代碼進行逆向工程分析,並利用分析結果改進其戰鬥機上使用的軟件。更有甚者,對方會悄悄給妳的軟件加壹個特洛伊馬,讓飛機在某個時間從天上掉下來。如果不能絕對保證上述場景是100%不可能的,那麽隱蔽軟件至少可以作為最後壹道防線(至少事後也可以追究責任)。例如,飛機上的軟件可以用有權訪問相關軟件的人的ID制作指紋簽名。如果有壹天,這些代碼在其他國家的戰鬥機上被發現,我們可以立即逆向分析這些代碼,進壹步計算出誰是泄密的元兇。

什麽?我聽到妳說,我為什麽要對如何在政府和商業巨頭之間保護他們的秘密感興趣?如果黑客破解了這些軟件,也只是通過自己的勞動獲得了壹些微薄的利益。話雖如此,但這些防護技術帶來的好處最終還是要大於它們給商業巨頭帶來的好處。原因是對妳來說,法律保護措施(如專利、商標、版權)只有在妳有足夠的財力去法院起訴對方的情況下才會起作用。換句話說,即使妳認為壹個大公司通過破解妳的代碼剽竊了壹個有巨大“錢”的創意,妳也不可能通過那場馬拉松式的訴訟去法院起訴微軟,除非妳有足夠的資金實力在這場金融競爭中生存下來。本書討論的保護技術(如代碼混淆和防篡改)價格低廉,易於使用,中小企業和商業巨頭均可使用。而如果此時起訴這家大公司,還可以利用水印或軟件“胎記”等技術,在法庭上當場展示代碼抄襲的真實證據。

最後不得不簡單提壹下另壹類極其擅長使用隱藏軟件的人——壞人。該病毒的作者已經能夠非常成功地利用代碼混淆技術對病毒代碼進行偽裝,從而逃避殺毒軟件的檢測。值得壹提的是,當人們使用這些技術(如保護DVD、遊戲和有線電視)時,往往會被黑客破解,但當黑客使用這些技術(如構建惡意軟件)時,人們就很難對抗了。

這本書的內容

隱蔽軟件研究的目的是發明壹種算法,能夠盡可能的延緩對手(逆向工程分析)的進度,同時盡可能的減少因為使用這種技術而在程序執行中增加的計算開銷。同時還需要發明壹種評測技術,這樣才能說“在程序中使用算法A後,黑客攻破新程序比原程序多花費T個單位,新程序的性能開銷為0”,或者至少應該說“與算法B相比,算法A保護的代碼更難被攻破”。特別需要強調的是,對隱蔽軟件的研究還處於起步階段。雖然我們會在書中給妳介紹所有相關的保護算法和評測算法,但是這門藝術的現狀還是不太理想(到時候妳不能太失望)。

在本書中,我們試圖將當前所有關於隱藏軟件的研究成果進行整理,系統地介紹給讀者。我們力求每章涵蓋壹種技術,並描述這種技術的應用領域和目前可用的算法。1章會給出隱蔽軟件領域的壹些基本概念;第2章以對抗性演示模式介紹了黑客在逆向分析軟件中常用的工具和技巧,然後介紹了如何根據這些工具和技巧來防範黑客的攻擊;第3章詳細描述了黑客和軟件保護者用來分析計算機程序的技術;第四章、第五章和第六章分別介紹了代碼混淆的相關算法。第七章介紹了防篡改技術的相關算法;第八章和第九章分別介紹了與水印相關的算法。第10章介紹軟件“胎記”相關算法;第11章描述了基於硬件設備的軟件保護技術。

如果妳是壹個企業管理者,只對隱藏軟件的研究現狀以及這些技術如何應用到妳的項目中感興趣,那麽只需閱讀第1章和第2章。如果妳是有編譯器設計背景的研究人員,建議跳到第三章開始閱讀。但是下面的章節最好按順序讀。這是因為...呃比如代碼混淆章節介紹的知識會用到介紹水印技術的章節。當然,在寫這本書的過程中,我們還是盡量讓每壹章都獨立,所以(如果妳有壹些背景知識的話)偶爾跳過壹兩章也不錯。如果妳是壹名工程師,想利用相關技術來加強妳的軟件,強烈建議妳仔細閱讀第三章的所有內容,如果可能的話,還應該做壹些編譯原理的教材,來彌補“程序靜態分析”的知識。然後就可以跳到自己感興趣的章節,隨意閱讀。如果妳是大學生,把這本書當成課程教材來讀,那就壹頁壹頁的讀,期末別忘了復習。

我希望這本書能做兩件事。首先,我希望向各位讀者證明,在代碼混淆、軟件水印、軟件“胎記”和防篡改方面有大量精彩的想法,值得妳花時間去學習,這些技術也可以用來保護軟件。其次,我希望這本書能夠收集目前該領域所有有用的信息,從而為隱蔽軟件的深入研究提供壹個良好的起點。

克裏斯蒂安·科爾伯格和賈斯維爾·納格拉

2009年2月2日(土撥鼠日)

附言其實寫這本書還有第三個目的。如果,在閱讀這本書的過程中,妳突然頓悟,想出了壹個絕妙的主意,進而激發了妳投身於隱藏軟件研究的雄心,那麽,親愛的讀者們,我的第三個目標實現了。請告訴我們妳的新算法,我們會將它添加到本書的下壹版中!