邱元陽(yáng) 劉宗凡 陳守家 劉樹明
在上期《亦正亦邪反編譯》中,我們主要討論了反編譯技術(shù),這僅僅是逆向工程的一種。在工程和技術(shù)領(lǐng)域,逆向工程的運(yùn)用非常普遍,而且大部分都合理合法。
由于逆向工程是一種由結(jié)果來(lái)推導(dǎo)出實(shí)現(xiàn)方法和原始材料的過(guò)程,因而其技術(shù)難度可能更大,當(dāng)我們真正走進(jìn)逆向工程領(lǐng)域,才會(huì)發(fā)現(xiàn)它不可低估的技術(shù)含量。
在3D建模中就常用到逆向工程。一般的工業(yè)建模是根據(jù)模型參數(shù)來(lái)生產(chǎn)實(shí)物,而它的逆向工程可以把其他廠家的或者手工制作的實(shí)物還原為模型文件,汽車制造類的廠家不可避免地都要使用。因?yàn)楹芏鄷r(shí)候,產(chǎn)品的模型不能憑空在電腦上設(shè)計(jì)出來(lái),而是根據(jù)現(xiàn)有的實(shí)物經(jīng)過(guò)各種變形和實(shí)驗(yàn)測(cè)試后確定下來(lái)的。要把這些經(jīng)過(guò)實(shí)踐檢驗(yàn)認(rèn)為是最好的結(jié)構(gòu)形態(tài)批量生產(chǎn)出來(lái),就需要根據(jù)實(shí)物來(lái)建立模型,這就需要逆向工程。
在機(jī)械制造領(lǐng)域,CAD、CAM、CAE等必不可少,經(jīng)常要根據(jù)現(xiàn)有物理部件來(lái)構(gòu)建3D模型。為此,有時(shí)還需要專門的逆向工程軟件來(lái)完成這些工作,如Imageware、Geomagic Studio、CopyCAD、RapidForm、UG等。通過(guò)結(jié)構(gòu)光源轉(zhuǎn)換、三維坐標(biāo)測(cè)量、X射線斷層成像、3D掃描等技術(shù),可以方便地對(duì)真實(shí)對(duì)象進(jìn)行尺寸測(cè)量,形成頂點(diǎn)信息,進(jìn)一步生成3D模型。
像雕塑、模具之類的物體,用3D掃描后很快就能批量生產(chǎn),這也給了山寨產(chǎn)品一個(gè)可以完美仿效的空間。設(shè)想一下,如果3D掃描和3D打印相結(jié)合,那結(jié)果就不敢想象了。
在電子行業(yè),PCB抄板與IC解密已經(jīng)非常流行。在已經(jīng)有電子產(chǎn)品實(shí)物和電路板實(shí)物的前提下,利用反向研發(fā)技術(shù)手段對(duì)電路板進(jìn)行逆向解析,可以將原有產(chǎn)品的PCB文件、BOM(物料清單)、原理圖等技術(shù)文件以及PCB絲印生產(chǎn)文件進(jìn)行還原,進(jìn)而完成PCD制板、元件焊接、電路調(diào)試,直至生成原電路板樣板,這就是“抄板”。而對(duì)于集成塊、智能卡以及單片機(jī),可以層層刮掉用電子顯微鏡拍照,甚至借助設(shè)備直接復(fù)制燒錄在其中的程序文件,或提取關(guān)鍵代碼,完成芯片解密。對(duì)于這類逆向工程,法律上的阻止已經(jīng)顯得力不從心。
從機(jī)械工程、電子線路,到美術(shù)雕塑、音樂(lè)制作,逆向工程都有用武之地。音樂(lè)行業(yè)的“扒帶”(根據(jù)音樂(lè)來(lái)扒出樂(lè)譜),就是一種逆向工程,但一般都是靠人工進(jìn)行,而且需要有敏銳的聽(tīng)覺(jué),對(duì)音樂(lè)修養(yǎng)和水平都有較高要求。
劉宗凡:走近逆向工程
逆向工程源于商業(yè)及軍事領(lǐng)域中的硬件分析。其主要目的是,在不能輕易獲得必要的生產(chǎn)信息下,直接從成品的分析,推導(dǎo)出產(chǎn)品的設(shè)計(jì)原理。即對(duì)一項(xiàng)目標(biāo)產(chǎn)品進(jìn)行逆向分析及研究,從而演繹并得出該產(chǎn)品的處理流程、組織結(jié)構(gòu)、功能性能規(guī)格等設(shè)計(jì)要素,以制作出功能相近,但又不完全一樣的產(chǎn)品。
系統(tǒng)工程是通過(guò)對(duì)事物的排列與組合,提高其整體效益。而逆向工程則是按照與系統(tǒng)組織的相反方向,將其由系統(tǒng)到要素、由大至小一件件地拆卸開(kāi),分析各要素、各部件的結(jié)構(gòu)原因、生成原理及成型過(guò)程中的成功思路,再結(jié)合自己的實(shí)際,對(duì)其進(jìn)行必要的調(diào)整和改進(jìn),進(jìn)而形成新的系統(tǒng)。如果說(shuō)系統(tǒng)工程強(qiáng)調(diào)綜合就是創(chuàng)造,那么逆向工程追求分解也是創(chuàng)造,也可以說(shuō)是一項(xiàng)對(duì)現(xiàn)有成熟技術(shù)進(jìn)行二次開(kāi)發(fā)和深度加工的再創(chuàng)新工程。運(yùn)用逆向工程破解難題,就是通過(guò)解剖麻雀,把復(fù)雜的結(jié)構(gòu)條理化、系統(tǒng)的工程清晰化,進(jìn)而收到尋根探源、破題求解、復(fù)制創(chuàng)造之效。
逆向工程從應(yīng)用范圍來(lái)看,可以分成硬件和軟件兩大部分。硬件的逆向工程主要在機(jī)械制造領(lǐng)域應(yīng)用廣泛,特別是在軍事上的應(yīng)用非常普遍。眾所周知的原因,各國(guó)的尖端武器都是絕密資料,通過(guò)逆向工程來(lái)分析、了解、仿制、改進(jìn),成為發(fā)展中國(guó)家趕上先進(jìn)國(guó)家的一個(gè)常用手段。美軍一架RQ-170隱形無(wú)人機(jī)被伊朗截獲,一些美高官憂心忡忡。據(jù)俄羅斯軍事工業(yè)綜合體網(wǎng)站報(bào)道,如果中國(guó)能夠接觸到伊朗手中的美制RQ-170隱形偵察機(jī),那么就很有可能會(huì)通過(guò)逆向工程學(xué)的方法獲取美國(guó)人的絕密技術(shù),找到對(duì)付方法并可能復(fù)制其關(guān)鍵技術(shù),甚至仿制成品。這一新聞事件的反復(fù)炒作,也使逆向工程這個(gè)物理學(xué)中的中性詞,一時(shí)熱門了起來(lái)。
一些國(guó)外媒體看到中國(guó)花樣翻新的“克隆”或者“山寨”技術(shù),將中國(guó)捧為“逆向工程大國(guó)”。但有關(guān)中國(guó)專家認(rèn)為,逆向工程并不像媒體說(shuō)的那樣簡(jiǎn)單,成本甚至比自己研制還大(但研發(fā)時(shí)間可能縮短),隱形飛機(jī)制造工程尤其復(fù)雜,當(dāng)殘片遭到一定程度的物理破壞后,想準(zhǔn)確判斷材料本身都很困難。即便是逆向仿制工作,也不是哪個(gè)國(guó)家想做就可以隨便做的。沒(méi)有自身的技術(shù)創(chuàng)新,沒(méi)有一支可靠有效的掌握高新技術(shù)的科研隊(duì)伍,即便是逆向仿制也是步履維艱。
在軟件領(lǐng)域,逆向工程也很普遍。例如,公司購(gòu)買的軟件都是沒(méi)有原程序的,如果要在原有基礎(chǔ)上修改、改進(jìn)某些功能,就可以通過(guò)逆向工程來(lái)實(shí)現(xiàn)。軟件的逆向工程可分通過(guò)反編譯、反匯編和動(dòng)態(tài)跟蹤等方法來(lái)實(shí)現(xiàn)。反編譯不是簡(jiǎn)單地實(shí)現(xiàn)程序的還原,而且要倒推出設(shè)計(jì)思想、數(shù)據(jù)結(jié)構(gòu)、算法等,使得原始程序?qū)崿F(xiàn)可維護(hù)化。在匯編語(yǔ)言中,用助記符(Memoni)代替操作碼,用地址符號(hào)(Symbol)或標(biāo)號(hào)(Label)代替地址碼。這樣用符號(hào)代替機(jī)器語(yǔ)言的二進(jìn)制碼,就把機(jī)器語(yǔ)言變成了匯編語(yǔ)言??梢钥闯鰴C(jī)器語(yǔ)言和匯編語(yǔ)言是可以對(duì)應(yīng)起來(lái)的,所以反匯編是所有程序都可以實(shí)現(xiàn)的。當(dāng)然,匯編語(yǔ)言相對(duì)來(lái)說(shuō)閱讀比較困難,要和現(xiàn)在流行的面向?qū)ο蟮某绦驅(qū)?yīng)起來(lái)更是非常困難,所以反匯編更加適合于小型的、核心的應(yīng)用。動(dòng)態(tài)跟蹤技術(shù)最常用于協(xié)議逆向工程,特別適用于設(shè)備驅(qū)動(dòng)程序的逆向工程。
邱元陽(yáng):再談反編譯
軟件的逆向工程最常見(jiàn)的還是反編譯。但反編譯需要有針對(duì)性,不可能把隨意的一個(gè)EXE文件反編譯成一個(gè)SWF或FLA文件,也不可能隨意把一個(gè)EXE文件反編譯成某種語(yǔ)言的源程序。當(dāng)然,任意可執(zhí)行文件的反匯編還是可能的。
要防止程序被反編譯,一個(gè)思路就是讓別人無(wú)法知道它是在什么環(huán)境下編譯的。除了使用不常見(jiàn)的編譯環(huán)境外,程序加殼也會(huì)增加反編譯的難度。
另外,有些開(kāi)發(fā)環(huán)境下編譯的程序目前還沒(méi)有相應(yīng)的反編譯工具,如在Director、Authorware下生成的作品要反編譯就非常困難。
文本文檔有時(shí)也是要保護(hù)的對(duì)象,它們可能會(huì)被重新生成各種不同的格式,這也可以看作是一種編譯過(guò)程,最常見(jiàn)的是生成PDF格式。這樣,一方面保證了文本文檔不被篡改,另一方面也規(guī)范了文檔的顯示和閱讀方式。然而很多時(shí)候,我們還是需要將一些PDF文檔“反編譯”成DOC等原來(lái)的格式。
AnyBizSoft PDF Converter是一個(gè)專業(yè)的PDF轉(zhuǎn)換器,支持將PDF轉(zhuǎn)換為Word(doc/docx)、PowerPoint(ppt/pptx)、Excel(xls/xlsx)、HTML、TXT等格式,對(duì)中文字符的支持性良好,能夠保存原有PDF的頁(yè)面布局、圖片、超鏈接等信息,對(duì)于加密或密碼保護(hù)的PDF文件也能輕松轉(zhuǎn)換。很多用其他軟件無(wú)法轉(zhuǎn)換的PDF文件,用AnyBizSoft PDF Converter卻能搞定(如圖1)。
需要說(shuō)明的是,有些掃描版的PDF文件,里面的文字其實(shí)是圖片格式的,轉(zhuǎn)換后仍然是圖片,無(wú)法直接轉(zhuǎn)換成文字。需要將它們也轉(zhuǎn)換成文字時(shí),還需要借助OCR(光電字符識(shí)別)工具進(jìn)行,如漢化OCR、CAJView OCR版閱讀器等。
實(shí)際上,如果僅僅是要編輯PDF文件,可以使用PDF文件編輯器,如Foxit PDF Editor,就是一個(gè)真正的PDF文件編輯軟件,具有所見(jiàn)即所得的編輯功能,并能在PDF和Windows應(yīng)用程序間復(fù)制粘貼文本和圖像。
此外,Word的DOC文檔也逐漸被用來(lái)進(jìn)行文檔傳輸,近年來(lái)在政府部門下發(fā)紅頭文件的電子文檔時(shí)就常用到。只是這些Word文檔采用了IRM(信息權(quán)限管理)機(jī)制進(jìn)行保護(hù),其內(nèi)容是禁止復(fù)制和編輯的,甚至根本無(wú)法選中內(nèi)容。對(duì)于這些受到編輯權(quán)限保護(hù)的文檔,可以另存為.rtf文件,用寫字板打開(kāi),重新保存,再用Word打開(kāi),即可編輯修改。
劉樹明:程序逆向分析示例
這里以反編譯難度較大的C++程序?yàn)槔?,說(shuō)明軟件逆向分析的方法和過(guò)程。
1.運(yùn)行時(shí)界面分析
分析目標(biāo):分析和監(jiān)視軟件運(yùn)行時(shí)產(chǎn)生的窗口類型?,F(xiàn)在的各種軟件很少全盤自己編寫相關(guān)代碼,或多或少都使用了一些第三方開(kāi)源代碼,并且采用這些代碼的時(shí)候,很少對(duì)其中的封裝類進(jìn)行修改,所以監(jiān)測(cè)到相關(guān)界面的類名稱就顯得非常有意義了,因?yàn)槲覀儾榈剿褂昧四男╊惡?,就可以查找相關(guān)的開(kāi)源代碼,輕松繞過(guò)反編譯軟件的難關(guān)。
這項(xiàng)工作可以使用VC自帶的工具spy++進(jìn)行。spy++還能監(jiān)測(cè)到軟件的控件句柄、消息傳遞等。我們借助它了解到這些信息后,可以另外寫程序向相關(guān)窗口發(fā)送消息,冒充用戶人工使用軟件,也就是通常我們常說(shuō)的外掛。針對(duì)游戲軟件的外掛程序比較多見(jiàn),利用外掛,我們可以實(shí)現(xiàn)自動(dòng)玩游戲,如果再向游戲窗口發(fā)送SW_HIDE消息,則還可以隱藏游戲窗口,達(dá)到“后臺(tái)掛機(jī)”的目的?,F(xiàn)在網(wǎng)上流行的QQ聊天記錄導(dǎo)出軟件,就是直接向QQ發(fā)送相關(guān)消息,冒充用戶手工操作,在QQ登錄運(yùn)行的情況下導(dǎo)出其個(gè)人的聊天記錄,繞過(guò)以前的破解QQ本地聊天記錄加密難題。
2.反匯編跟蹤調(diào)試
通過(guò)這個(gè)辦法可以了解到軟件的功能和運(yùn)行流程,再另外編寫高級(jí)語(yǔ)言程序?qū)崿F(xiàn)相同功能。
以調(diào)試Google Chrome瀏覽器為例。先運(yùn)行Chrome瀏覽器,再打開(kāi)Visual studio C++,選擇“工具→附加到進(jìn)程”,界面如圖2所示。
選擇Chrome進(jìn)程,我們可以看到Chrome為每個(gè)窗口生成了一個(gè)進(jìn)程,如果打開(kāi)了多個(gè)窗口,則有多個(gè)進(jìn)程,如果只打開(kāi)一個(gè)窗口,就只有一個(gè)進(jìn)程,我們隨便選擇一個(gè)進(jìn)程即可。
附加上去后,可以看到它的反匯編代碼,可在匯編程序的任意位置設(shè)置斷點(diǎn),程序運(yùn)行到斷點(diǎn)處會(huì)自動(dòng)激活VC++,進(jìn)程停在斷點(diǎn)處,這時(shí)可以按F10和F11進(jìn)行單步調(diào)試跟蹤它,并且可以根據(jù)調(diào)用堆棧來(lái)快速定位各個(gè)功能模塊,大體繪制出程序的功能模塊構(gòu)成圖,軟件界面如圖3所示。
3.相關(guān)動(dòng)態(tài)鏈接庫(kù)分析
DLL Export Viewer是一個(gè)動(dòng)態(tài)鏈接庫(kù)分析軟件,利用它可以查看到DLL文件里面的函數(shù)和接口名稱,美中不足的是還不能確定函數(shù)參數(shù)類型,但我們看到函數(shù)名稱后,基本上都能猜出它的功能,另外我們還可以配合上面介紹的反匯編調(diào)試方法來(lái)獲取一些信息。
4.黑盒分析
這一分析是指把軟件完全當(dāng)成一個(gè)黑盒,通過(guò)控制對(duì)軟件的輸入數(shù)據(jù)構(gòu)造,并對(duì)輸出數(shù)據(jù)進(jìn)行分析來(lái)了解它的算法。黑盒分析在某些情況下也是非常有用的,著名的第三方QQ軟件Lumaqq,就是清華大學(xué)計(jì)算機(jī)系的一個(gè)學(xué)生用騰訊官方QQ做黑盒分析后寫出來(lái)的QQ客戶端軟件,這個(gè)軟件在2008年以前不但具備QQ的所有功能,有些功能甚至做得比官方的更好,而且一直跟隨官方升級(jí)相關(guān)功能,并且將所有的源碼完全開(kāi)放!
5.數(shù)據(jù)抓包分析
對(duì)于網(wǎng)絡(luò)軟件的逆向工程,數(shù)據(jù)抓包就顯得非常重要了。盡管軟件內(nèi)部結(jié)構(gòu)和邏輯對(duì)逆向工作者來(lái)說(shuō)是不可見(jiàn)的,但是它始終是要通過(guò)網(wǎng)絡(luò)跟服務(wù)器端交換數(shù)據(jù),我們將這些數(shù)據(jù)攔截下來(lái)后進(jìn)行分析,可以了解到非常多的信息,包括它是采用什么網(wǎng)絡(luò)協(xié)議和服務(wù)器端進(jìn)行數(shù)據(jù)交換的?數(shù)據(jù)包是如何進(jìn)行封裝的?發(fā)送給服務(wù)器端的數(shù)據(jù)是否進(jìn)行過(guò)預(yù)處理?網(wǎng)絡(luò)接口的地址是什么?相關(guān)的參數(shù)名稱是什么?這些問(wèn)題都可以通過(guò)攔截?cái)?shù)據(jù)包得到答案。常見(jiàn)的網(wǎng)絡(luò)抓包軟件主要有MiniSniffer、WSockExpert等。
劉宗凡:展望逆向工程
逆向工程包括形式反求、工藝反求和材料反求等幾個(gè)方面。在機(jī)械領(lǐng)域的實(shí)際應(yīng)用中,主要包括以下幾個(gè)方面:①對(duì)已有零件的復(fù)制,再現(xiàn)原產(chǎn)品的設(shè)計(jì)意圖;②當(dāng)原始設(shè)計(jì)不可得時(shí),用于對(duì)已有產(chǎn)品的改型或仿型設(shè)計(jì);③在設(shè)備維修中對(duì)個(gè)別損壞或磨損零件的復(fù)制;④在美學(xué)設(shè)計(jì)特別重要的領(lǐng)域,通常采用真實(shí)比例的木制或泥塑模型來(lái)評(píng)估設(shè)計(jì)的美學(xué)效果,再通過(guò)逆向工程進(jìn)行設(shè)計(jì);⑤當(dāng)設(shè)計(jì)需要實(shí)驗(yàn)才能定型的工件模型時(shí),通常采用逆向工程的方法。例如,在航天航空領(lǐng)域,為了滿足空氣動(dòng)力學(xué)等要求,需要進(jìn)行風(fēng)洞實(shí)驗(yàn)的產(chǎn)品模型;⑥數(shù)字化模型的檢測(cè),如檢驗(yàn)產(chǎn)品的變形分析、焊接質(zhì)量以及零件實(shí)物與CAD模型的比較等。
Imageware由美國(guó)EDS公司出品,是最著名的逆向工程軟件,正被廣泛應(yīng)用于汽車、航空、航天、消費(fèi)家電、模具、計(jì)算機(jī)零部件等設(shè)計(jì)與制造領(lǐng)域。該軟件擁有廣大的用戶群,國(guó)外有BMW、Boeing、GM、Chrysler、Ford、raytheon、Toyota等著名國(guó)際大公司,國(guó)內(nèi)則有上海大眾、上海交大、上海DELPHI、成都飛機(jī)制造公司等大企業(yè)。作為UG NX中提供的逆向工程造型軟件,ImageWare具有強(qiáng)大的測(cè)量數(shù)據(jù)處理、曲面造型、誤差檢測(cè)功能,可以處理幾萬(wàn)至幾百萬(wàn)的點(diǎn)云數(shù)據(jù),根據(jù)這些點(diǎn)云數(shù)據(jù)構(gòu)造的A曲面(CLASS A)具有良好的品質(zhì)和曲面連續(xù)性。ImageWare的模型檢測(cè)功能可以方便、直觀地顯示所構(gòu)造的曲面模型與實(shí)際測(cè)量數(shù)據(jù)之間的誤差以及平面度、真圓度等幾何公差。
隨著科學(xué)技術(shù)的進(jìn)步和消費(fèi)水平的不斷提高,其他許多行業(yè)也開(kāi)始紛紛采用逆向工程軟件進(jìn)行產(chǎn)品設(shè)計(jì)。以微軟公司生產(chǎn)的鼠標(biāo)器為例,就其功能而言,只需要有三個(gè)按鍵就可以滿足使用需要,但是,怎樣才能讓鼠標(biāo)器的手感最好,而且經(jīng)過(guò)長(zhǎng)時(shí)間使用也不易產(chǎn)生疲勞感卻是生產(chǎn)廠商需要認(rèn)真考慮的問(wèn)題。因此,微軟公司首先根據(jù)人體工程學(xué)制作了幾個(gè)模型并交給使用者評(píng)估,然后根據(jù)評(píng)估意見(jiàn)對(duì)模型直接進(jìn)行修改,直至修改到大家都滿意為止,最后再將模型數(shù)據(jù)利用逆向工程軟件Imageware生成CAD數(shù)據(jù)。當(dāng)產(chǎn)品推向市場(chǎng)后,由于外觀新穎、曲線流暢,再加上手感也很好,符合人體工程學(xué)原理,因而迅速獲得用戶的廣泛認(rèn)可,產(chǎn)品的市場(chǎng)占有率大幅度上升。
從制造業(yè)到玩具市場(chǎng),從航天航空到電子產(chǎn)品,從醫(yī)療器械到動(dòng)畫制作,各行各業(yè)都已經(jīng)廣泛使用逆向工程技術(shù)為生產(chǎn)和實(shí)驗(yàn)服務(wù)。隨著工廠現(xiàn)代化進(jìn)程的推進(jìn),數(shù)控機(jī)床已經(jīng)普遍使用,復(fù)雜模具和產(chǎn)品的制作變得輕而易舉,這里面同樣有著逆向工程的功勞??梢灶A(yù)見(jiàn),在未來(lái)的工業(yè)生產(chǎn)和數(shù)字產(chǎn)品制作中,逆向工程將會(huì)在其中發(fā)揮更大的作用。
陳守家:反思逆向工程
要了解和學(xué)習(xí)一個(gè)軟件所包含的思想和原則,必須對(duì)軟件的源程序進(jìn)行分析;要獲得某軟件的各種參數(shù),開(kāi)發(fā)出能與該軟件兼容的軟件也必須獲得軟件的源程序。然而,為了在市場(chǎng)競(jìng)爭(zhēng)中取得優(yōu)勢(shì),軟件的開(kāi)發(fā)者一般不會(huì)將源程序公開(kāi)。因此,對(duì)軟件進(jìn)行逆向分析就成了軟件開(kāi)發(fā)技術(shù)人員經(jīng)常采用的方法。
微軟最新的.net Framework由于采用了中間層,實(shí)現(xiàn)了跨平臺(tái)、跨語(yǔ)言的中間代碼,并在類似虛擬機(jī)的環(huán)境中運(yùn)行,導(dǎo)致了MSIL(微軟中間語(yǔ)言)反編譯為C#或VB.net等源代碼并非難事。再以Zend Encoder編譯的PHP源程序?yàn)槔?,用Vulcan Logic Disassembler也可以得到PHP執(zhí)行時(shí)的操作碼,若是有對(duì)PHP非常熟悉的高手,利用操作碼還原PHP源程序也會(huì)容易許多。
逆向工程在軟件教學(xué)、科研、開(kāi)發(fā)等場(chǎng)合都是一種非常重要的手段。在教學(xué)和科研中,為了學(xué)習(xí)國(guó)外先進(jìn)的軟件設(shè)計(jì)理念,我們經(jīng)常需要把國(guó)外一些機(jī)構(gòu)和個(gè)人開(kāi)發(fā)的程序反編譯來(lái)進(jìn)行分析和借鑒;早期的漢化愛(ài)好者把外文版的軟件進(jìn)行反編譯,找到目標(biāo)菜單的源代碼,然后把漢語(yǔ)寫進(jìn)去替換相要了解和學(xué)習(xí)一個(gè)軟件所包含的思想和原則,必須對(duì)軟件的源程序進(jìn)行分析;要獲得某軟件的各種參數(shù),開(kāi)發(fā)出能與該軟件兼容的軟件也必須獲得軟件的源程序。然而,為了在市場(chǎng)競(jìng)爭(zhēng)中取得優(yōu)勢(shì),軟件的開(kāi)發(fā)者一般不會(huì)將源程序公開(kāi)。因此,對(duì)軟件進(jìn)行逆向分析就成了軟件開(kāi)發(fā)技術(shù)人員經(jīng)常采用的方法。
微軟最新的.net Framework由于采用了中間層,實(shí)現(xiàn)了跨平臺(tái)、跨語(yǔ)言的中間代碼,并在類似虛擬機(jī)的環(huán)境中運(yùn)行,導(dǎo)致了MSIL(微軟中間語(yǔ)言)反編譯為C#或VB.net等源代碼并非難事。再以Zend Encoder編譯的PHP源程序?yàn)槔?,用Vulcan Logic Disassembler也可以得到PHP執(zhí)行時(shí)的操作碼,若是有對(duì)PHP非常熟悉的高手,利用操作碼還原PHP源程序也會(huì)容易許多。
逆向工程在軟件教學(xué)、科研、開(kāi)發(fā)等場(chǎng)合都是一種非常重要的手段。在教學(xué)和科研中,為了學(xué)習(xí)國(guó)外先進(jìn)的軟件設(shè)計(jì)理念,我們經(jīng)常需要把國(guó)外一些機(jī)構(gòu)和個(gè)人開(kāi)發(fā)的程序反編譯來(lái)進(jìn)行分析和借鑒;早期的漢化愛(ài)好者把外文版的軟件進(jìn)行反編譯,找到目標(biāo)菜單的源代碼,然后把漢語(yǔ)寫進(jìn)去替換相應(yīng)的外文,填入漢語(yǔ)的長(zhǎng)度不得超過(guò)原文的長(zhǎng)度,不足的可用空格補(bǔ)齊,然后再進(jìn)行編譯,最終完成外文軟件的漢化。
不過(guò)反編譯的弊端也顯而易見(jiàn),這類工具落到一些不尊重其他人勞動(dòng)成果的“小人”手中,會(huì)成為其剽竊的利器,造成侵權(quán)。世界知識(shí)產(chǎn)權(quán)組織在《WIPO知識(shí)產(chǎn)權(quán)手冊(cè):政策、法律與使用》中認(rèn)定:軟件合法用戶對(duì)軟件進(jìn)行反編譯的行為,應(yīng)不利用所獲取的信息開(kāi)發(fā)相似的軟件,并不會(huì)與著作權(quán)所有人正常使用軟件沖突,也不會(huì)對(duì)著作權(quán)所有人的合法權(quán)益造成不合理的損害。各國(guó)政府基本上都使用此原則對(duì)侵權(quán)案件進(jìn)行審理,如美國(guó)、歐盟、中國(guó)的相關(guān)法律部門都認(rèn)為:只要反編譯并非以復(fù)制軟件為目的,在實(shí)施反編譯行為的過(guò)程中所涉及的復(fù)制只是一種中間過(guò)渡性的復(fù)制,反編譯最終所達(dá)到的目的是使公眾可以獲得包含在軟件中不受著作權(quán)保護(hù)的成分,這樣的反編譯并不會(huì)被認(rèn)為是侵權(quán)。
技術(shù)從來(lái)都是一把雙刃劍,將反編譯合理使用,將有利于打破國(guó)外超級(jí)軟件企業(yè)對(duì)軟件技術(shù)的壟斷,有利于中小軟件企業(yè)開(kāi)發(fā)出更多具有兼容性的軟件,從而促進(jìn)軟件產(chǎn)業(yè)的健康發(fā)展。對(duì)于侵權(quán)的、不合理的反編譯應(yīng)用,除了被計(jì)算機(jī)使用者鄙視和抵制外,完善的法律也是解決問(wèn)題的有效途徑。