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