软件逆向工程的前世今生
一提“破解”、“逆向”等詞匯,大家定然眾口芬蕓,莫衷一是,原因就是我們對其概念和歷史并不知曉,換言之,我們大多數人現在只知其然,不知其所以然。當然大家最關心的法律問題更是知之甚少了。
解析軟件逆向工程
軟件逆向工程(Software?Reverse?Engineering)又稱軟件反向工程,是指從可運行的程序系統出發,運用解密、反匯編、系統分析、程序理解等多種計算機技術,對軟件的結構、流程、算法、代碼等進行逆向拆解和分析,推導出軟件產品的源代碼、設計原理、結構、算法、處理過程、運行方法及相關文檔等[1]。通常,人們把對軟件進行反向分析的整個過程統稱為軟件逆向工程,把在這個過程中所采用的技術都統稱為軟件逆向工程技術。
現實中,人們并不總是完全需要逆向出目標軟件的所有功能,如果那樣的話將會是一個艱苦而漫長的過程。大多數情況下是意圖通過對軟件進行逆向,從中獲取軟件的算法,或破解軟件及進行功能擴展等。
逆向工程研究現狀
軟件逆向工程最早是作為軟件維護的一部分出現的。早在?20?世紀?60?年代,隨著第三代計算機的產生,為了挽救大量運行在即將報廢的第二代計算機上的軟件,同時也為加速開發第三代計算機上的軟件,美國開始研制針對特定軟件的專門用途的逆編譯工具來進行軟件移植,并成功轉換了許多優秀軟件。這些逆編譯工具中大量使用了軟件逆向工程中的技術方法。此后軟件逆向工程技術逐步被各國所認識,并廣泛研究和應用到多個軟件技術領域中。
在國外,CMU?SEI?成立了專門的再工程中心,致力于通過軟件逆向工程進行程序理解技術的標識、增強和實踐推廣。20?世紀?80?年代,個人計算機兼容市場爆發性發展的很大一部分原因就是對?IBM?PC?機的?BIOS?軟件進行了逆向工程,而芯片制造商?Cyrix?和?AMD?對?Intel?的微處理器進行逆向工程后,開發出了與之相兼容的芯片。
Chikofs?等人于?1993?年發起的逆向工程會議每年舉行一次,研究和討論軟件逆向工程的問題、技術及其支持工具。大量的研究成果都集中在程序理解的輔助工具上,例如,IBM?日本研究員研制的基于知識的代碼理解工具?PROMPTER、美國?Yale?大學計算機系研制的對?Pascal?語言進行聯機分析和理解的工具?PROUST等。
80?年代后期到?90?年代,關于解決軟件逆向工程和軟件版權的矛盾基本上有了結果,各國紛紛針對軟件逆向工程進行立法,不是約束而是規范該領域的研究工作。根據美國聯邦法律,對擁有版權的軟件進行逆向工程操作如反匯編,若不是研制新產品與之競爭或獲取非法利益,則所進行的逆向操作是合法的[PamelaSamuelson?1990]。日本也立法規定軟件逆向工程是合法的,理由是它有利于軟件應用人員之間的相互交流[[RohanMishral?997],英國政府?1992?年也修改了于1988?年頒布的軟件版權法[[SingletonS?1993],該法律允許為了研究和個人學習目的而對程序逆向工程。從此,逆向工程的研究有了法律保障。
就在?80?年代國外逆編譯研究相對沉寂之時,國內關于這方面的研究卻如火如荼。如北京大學以楊芙清院士為首開發的“青鳥軟件生產線系統”中的青鳥逆向工程工具是其中一項具有實質性的成果。它可以針對?C++語言,采用增量分析技術靜態分析源程序代碼,用?EER?(enhancedentity-relationship)為?C++程序建立概念模型并抽取程序信息,將信息保存在數據庫中,按照不同的用戶需求組織程序信息,輔助用戶理解?C++程序,逆向生成源程序的?OOD?(Object?Oriented?Design)文檔,為用戶進一步提取構件構架提供幫助。合肥工業大學微機所展開了用手工方法對?UNIX?操作系統進行逆向工程研究。1984?年在國家自然科學基金資助下,研究?DUAL?68000?機器上的?C?語言逆編譯系統,開發成功了?68000C?逆編譯系統,獲國家機電工業部科技進步二等獎。此外,還有北京信息學院、上海交通大學、中科院計算所、遼寧大學、武漢大學、重慶大學、北京控制工程研究所等,其中上海交通大學在?VAX?機上實現了一個?U?語言逆編譯系統[HouWY?1992],北京控制工程研究所在?PC?機上實現一個?U?語言逆編譯系統〔LiJ1991,但這兩個系統均沒有達到實用程度。
近幾年來,國內許多軟件公司相繼開展了軟件逆向工程的研究,針對網絡游戲的外掛產業的日益壯大就是軟件逆向工程發展的最好見證。電子工業出版社的《加密與解密》等系統叢書,看雪論壇等都為我國軟件逆向工程的發展作出了貢獻。
2007?年?1?月?17?日,最高人民法院發布的第一個涉及不正當競爭案件審理的司法解釋明確指出:通過自行開發研制或者反向工程等方式獲得的商業秘密,將不被認定為反不正當競爭法有關條款規定的侵犯商業秘密行為。這樣,從法律上也為從事軟件逆向工程開發者掃除了最后一道障礙。可以預見,我國的軟件逆向工程必將迎來更加輝煌的明天。
逆向工程流程
在對軟件進行逆向工程研究的時候,一般會依照以下幾個大的步驟來完成:
1、研究保護方法,去除保護功能。大部分軟件開發者為了維護自己的關鍵技術不被侵犯,采用了各式各樣的軟件保護技術,如序列號保護、加密鎖、反調試技術、加殼等。要想對這類軟件進行逆向,首先要判斷出軟件的保護方法,然后去詳細分析其保護代碼,在掌握其運行機制后去除軟件的保護。
2、反匯編目標軟件,跟蹤、分析代碼功能。在去除了目標軟件的保護后,接下來就是運用反匯編工具對可執行程序進行反匯編,通過動態調試與靜態分析相結合,跟蹤、分析軟件的核心代碼,理解軟件的設計思路等,獲取關鍵信息。
3、生成目標軟件的設計思想、架構、算法等相關文檔,并在此基礎上設計出對目標軟件進行功能擴展等的文檔。
4、向目標軟件的可執行程序中注入代碼,開發出更完善的應用軟件
軟件逆向工程可以讓人們了解程序的結構以及程序的邏輯,深入洞察程序的運行過程,分析出軟件使用的協議及通信方式,并能夠更加清晰地揭露軟件機密的商業算法等。因此逆向工程的優勢是顯而易見的。
目的和意義
1、由于軟件生產技術水平還沒有達到人們所期望的程度,所以從頭開發軟件已經不適應社會對軟件需求的不斷增長,為了避免重復勞動,提高軟件生產的效率和質量,緩解軟件危機,必須充分利用和改造現有軟件,對現有軟件進行再設計、再工程,使軟件功能得到大幅提高以滿足用戶的需要,而再設計(Redesign)
和再工程(Reengineering)都是軟件逆向工程的形式之一。再工程是指在現有系統基礎上,修改系統并組裝成新的形式。
2、目前運行的許多系統由于某些原因,例如其運行環境已改變,或者是根據業務的需要對其功能要進行調整,導致它們必須進行演化才能繼續使用。這些系統在經歷多年運行之后,包含了眾多的知識,包括系統需求、設計決策和業務規則等,通過軟件逆向工程將這些軟件系統轉化為易演化系統,是充分有效地利用這些有用資產的良好途徑。軟件逆向工程可以從這些系統的程序源代碼出發,導出切實可用的信息。
3、在已發布的軟件中,許多優秀軟件生產廠家出于技術保護等原因沒有向用戶開放源代碼或者不提供源代碼,需要用戶自己去恢復,此時對軟件進行逆向工程研究是最好的方法。
4、現今的商業社會把軟件科學納入一種相對封閉的范疇,為了追求利潤,一些軟件業的霸主試圖進行知識的壟斷,它的直接體現就是鼓勵普通用戶和大多數程序員把軟件看成“黑箱”,使得它們不去關心軟件的運行機制,把軟件的生產變成類似車間加工的一道道流程,卻隔斷了人們深入研究軟件科學的通路。而作為開放源代碼的前期工程,軟件逆向工程對整個開放源代碼工程有著至關重要的作用。
由此我們看出,軟件逆向工程為軟件技術的發展和相互學習、借鑒提供了一種很有效的技術手段,然而,由于受軟件知識產權保護及相關法律法規的限制,軟件逆向工程并不能像其它軟件技術那樣分開、透明地為大家所熟知、了解和廣泛交流與應用。另外,軟件逆向工程所涉及到的技術很多,它不僅要求逆向工程人員必須熟悉如操作系統、匯編語言、加解密等相關知識,同時還要具有豐富的多種高級語言的編程經驗,熟悉多種編譯器的編譯原理,較強的程序理解和逆向分析能力等,這些都限制了軟件逆向工程的發展。
更多關于安全、加密、軟件發布相關資訊和產品推薦>>
總結
以上是生活随笔為你收集整理的软件逆向工程的前世今生的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一些关于毫米波技术的文献
- 下一篇: IDEA查看或修改JDK版本