簡介
反向工程(Reverse Engineering, RE)也稱
逆向工程或
反求工程,是相對於傳統的產品設計流程即所謂的
正向工程(Forward Engineering, FE)而提出的。正向工程是泛指按常規的從概念(草圖)設計到具體模型設計再到成品的生產製造過程。反向工程常指從現有模型(產品樣件、
實物模型等)經過一定的手段轉化為概念模型和工程
設計模型,如利用
三坐標測最機的測量數據對產品進行數學模型重構,或者直接將這些離散數據轉化成NC 程式進行數控加工而獲取成品的過程,是對已有產品的再設計、再創造的過程。
反向工程指從他人的產品入手,進行分解剖析和綜合研究,在廣泛蒐集產品資訊的基礎上,通過對儘可能多的同類產品的解體和破壞性研究,運用各種科學測試、分析和研究手段,反向求索該產品的技術原理、結構機制、設計思想、製造方法、加工工藝和原材料特性,從而達到從原理到製造,由結構到材料全面系統地掌握產品的設計和生產技術。
技術
反向工程技術,是以實物(產品)、軟體、圖紙、程式、技術檔案、影像(圖片、照片)作為研究對象,套用現代設計理論方法、生產工程學、材料學和有關專業知識(測量學、信號自動處理)進行系統深入的分析和研究,是一種快捷的新產品開發技術。
反向工程技術反求內容廣泛,包括:產品的結構和工作原理、產品的材料和力學性能、製造產品的技術資料(圖紙、製造工藝、裝配工藝、產品檢驗)、產品技術標準(型號、規格、標準)。其本質是對先進產品進行消化、吸收,再開發和創新,設計和製造出具有競爭力的新產品。縮短新產品的開發周期,提高新產品開發的一次成功率,從而提高企業在市場中的競爭力。
反向工程技術主要套用於:產品(零件)的仿製和複製,複雜產品(零件)的設計,產品(零件)的檢驗、改進設計,複雜形體的CAD建模,產品設計與
快速成形技術等。
使用原因
需要反向工程的原因如下:
1.接口設計。由於
互操作性,反向工程被用來找出系統之間的協作協定。
2.軍事或
商業機密。竊取敵人或競爭對手的最新研究或產品原型。
3.改善文檔。當原有的文檔有不充分處,又當系統被更新而原設計人員不在時,反向工程被用來獲取所需數據,以補充說明或了解系統的最新狀態。
4.軟體升級或更新。出於功能、合規、安全等需求更改,反向工程被用來了解現有或遺留軟體系統,以評估更新或移植系統所需的工作。
5.製造沒有許可/未授權的副本。
6.學術/學習目的。
7.去除複製保護和偽裝的登錄許可權。
8.檔案丟失:採取反向工程的情況往往是在某一個特殊設備的檔案已經丟失了(或者根本就沒有),同時又找不到工程的負責人。完整的系統時常需要基於陳舊的系統上進行再設計,這就意味著想要集成原有的功能進行項目的唯一方法便是採用反向工程的方法分析已有的碎片進行再設計。
9.產品分析:用於調查產品的運作方式,部件構成,估計預算,識別潛在的侵權行為。
晶片
晶片反向工程,又稱
晶片解密(
IC解密),
單片機解密,就是指單片機攻擊者憑藉專用設備或自製設備,利用單片機晶片設計上的漏洞或
軟體缺陷,通過多種專業技術手段,直接提取加密單片機中燒寫檔案的關鍵信息,並可以自己複製燒
寫晶片或反彙編後自己參考研究。這種反向獲取單片機片內程式的方式就叫晶片反向工程。
國內有人認為晶片反向工程其實就是抄襲。相比之下,在國外反向工程是伴隨著積體電路工業發展起來的,1984年“
半導體晶片保護法案(Semiconductor ChipProtection Act of 1984)”誕生,該法案明確了反向工程的合法性並且嚴格地區分了侵權和反向工程。中國也於2001年頒布實施了《積體電路布圖保護條例》。在晶片反向工程這個問題上為什麼在認識上有如此大的差別呢?
晶片反向工程其實就是晶片分析,晶片分析涉及三大關鍵技術∶樣品預處理技術;晶片分析軟體技術和晶片分析技術(也就是電路分析能力)。以上三項技術相輔相成,缺一不可,其中一項薄弱都會影響到企業分析晶片的能力和水準。
晶片反向工程分析流程∶
(1)拍照∶晶片逐層去封裝,拍照並對準拼接獲得各層晶片照片。
(2)建庫∶通過晶片照片提取其中的單元器件建立單元庫。
(3)標註∶通過單元庫在晶片照片上標記單元器件及器件之間的連線關係。
(4)整理∶把標註出的單元器件整理成為結構清晰的電路圖。
(5)層次化∶通過從下至上分析系統的邏輯及機制,從而建立從系統圖表到傳輸級電路的層次化電路圖和功能模組。
由上面的分析流程可以看出晶片分析其實就是一個對晶片的解剖過程,在這過程中可以獲得晶片的很多相關資料,這些資料可以用來分析學習先進的技術,但是也可以用來複製IC。
PCB
PCB反向工程,又稱
PCB抄板,即在已經有電子產品實物和電路板實物的前提下,利用反向研發技術手段對電路板進行逆向解析,將原有產品的PCB檔案、
物料清單(BOM)檔案、原理圖檔案等技術檔案以及PCB
絲印生產檔案進行1:1的還原,然後再利用這些技術檔案和生產檔案進行
PCB制板、元器件焊接、
飛針測試、電路板調試,完成原電路板樣板的完整複製。
對於PCB反向工程,很多人存在概念誤解,甚至認為是山寨,事實上,隨著
抄板行業的不斷發展和深化,今天的PCB抄板概念已經得到更廣範圍的延伸,不再局限於簡單的電路板的複製和克隆,還會涉及產品的
二次開發與新產品的研發。比如,通過對既有產品技術檔案的分析、設計思路、結構特徵、工藝技術等的理解和探討,可以為新產品的研發設計提供可行性分析和競爭性參考,協助研發設計單位及時跟進最新技術發展趨勢、及時調整改進產品設計方案,研發最具有市場競爭性的新產品。同時,
PCB抄板的過程通過對技術資料檔案的提取和部分修改,可以實現各類型電子產品的快速更新升級與
二次開發,根據
抄板提取的檔案圖與原理圖,專業設計人員還能根據客戶的意願對PCB進行最佳化設計與改板,也能夠在此基礎上為產品增加新的功能或者進行功能特徵的重新設計,這樣具備新功能的產品將以最快的速度和全新的姿態亮相,不僅擁有了自己的智慧財產權,也在市場中贏得了先機,為客戶帶來的是雙重的效益。
PCB反向工程的技術實現過程簡單來說,就是先將要抄板的電路板進行掃描,記錄詳細的元器件位置,然後將元器件拆下來做成
物料清單(BOM)並安排物料採購,空板則掃描成圖片經抄板軟體處理還原成pcb板圖檔案,然後再將PCB檔案送製版廠制板,板子製成後將採購到的元器件焊接到製成的PCB板上,然後經過電路板測試和調試即可。
智慧卡
分析智慧卡的反向工程具有侵入性和破壞性,智慧卡被層層刮掉用
電子顯微鏡拍照。這種技術可以完整地揭示出智慧卡的硬體和軟體部份。主要的問題就是,把所有的東西按正確的順序放好以找出每一個部件是如何工作的。工程師們用打亂記憶體位置的方法隱藏密碼和操作,例如busscrambling。有時甚至可以在智慧卡運行的時候用探針直接測量電壓,設計師則用感應器來檢測和防止。破壞支付業務中使用的智慧卡很困難,只有大晶片製造商使用那些專業的設備。況且,和其他安全機制例如陰影帳戶相比,這種方法回報太低。
與軟體
由於“反向工程”一詞用在
軟體工程(簡稱“軟工”)領域中的具體含義模糊不清,Chikofsky和Cross為此寫了篇文章,以闡清及區分“反向工程”與各種相近的概念。據文章所述,反向工程是一種分析目標系統的過程,其目的是識別出系統的各個組件以及它們之間的關係,並以其它的形式或在較高的抽象層次上,重建系統的表征(Representations)。軟體反向工程也可被視作“開發周期的逆行”。 在此定義下,對一項軟體程式進行反向工程,類似於逆行傳統
瀑布模型中的開發步驟,即把實現階段的輸出(即軟體程式)還原回在設計階段所做的構思。軟體反向工程僅僅是一種檢測或分析的過程,它並不會更改目標系統(否則就成了
軟體再工程)。
軟體
防篡改技術被用於遏制對
專有軟體進行反向工程及再工程。實際套用中出現了兩類反向工程。第一種,軟體的
原始碼可用,但是更高層次的部分幾乎沒有描述文檔或者描述文檔不再適用或者丟失。第二種,軟體沒有可用的原始碼,任何能找到它的原始碼的努力都被稱為反向工程。大部分人都熟悉這個詞的第二種用法。軟體的反向工程可以使用淨室技術(Clean Room Design)來避免侵犯著作權。
軟工中的
黑盒測試與反向工程有很多共同點,但黑箱測試人員常供以
API以作測試,並且測試的目的就是通過外部攻擊,找出程式漏洞和未歸檔的特性。
反向工程的其他目的包括:安全審查、 解除複製保護(又稱破解)、繞過
消費類電子產品中常設有的訪問限制、定製
嵌入式系統(例如引擎管理系統)、產品內部修補或更新、給功能不全的廉價硬體(例如某些顯示卡晶片組)添加額外功能,或僅為滿足好奇心。
二進制
對最終程式的
二進制代碼所進行的反向工程被稱為“代碼反向工程”,或簡稱RCE(
Reverse
Code
Engineering)。例如,我們可以用Jad對
Java平台的二進制碼進行
反編譯。一個著名的反向工程案例是,首個由非IBM公司所實現的IBM
個人電腦(PC)中的
BIOS,這開創了IBM PC兼容機產業,使得IBM PC兼容機成為多年來的主流計算機硬體平台。一個以軟體反向工程為樂的團體例子是CORE(
Challenge
Of
Reverse
Engineering,意為“挑戰反向工程”)。在美國,軟體反向工程只要遵守
著作權法的
合理使用規定,都是受保護的。成功的軟體反向工程項目有:
1.
Samba:一個允許非Windows系統與Windows系統已分享檔案的開源項目。由於微軟沒有公開Windows
檔案共享機制的信息,Samba必須作反向工程,以便在非Windows系統上,仿真出同樣的行為。
4.
ReactOS:竭力在
ABI及
API上,兼容NT系Windows系統,以便讓為Windows所編寫的軟體和驅動程式可以在其上運行。
5.WindowsSCOPE:用來監測及分析Windows系統記憶體的實況內容。
二進制軟體技術
軟體反向工程有多種實現方法,主要有三:
1.分析通過信息交換所得的觀察。最常用於協定反向工程,涉及使用匯流排分析器和數據包嗅探器。在接入計算機匯流排或網路的連線,並成功截取通信數據後,可以對匯流排或網路行為進行分析,以製造出擁有相同行為的通信實現。此法特別適用於
設備驅動程式的反向工程。有時,由硬體製造商特意所做的工具,如
JTAG連線埠或各種調試工具,也有助於嵌入式系統的反向工程。對於微軟的Windows系統,受歡迎的底層調試器有
SoftICE。
2.
反彙編,即藉用
反彙編器,把程式的原始
機器碼,翻譯成較便於閱讀理解的彙編代碼。這適用於任何的電腦程式,對不熟悉機器碼的人特別有用。流行的相關工具有Interactive Disassembler。
軍事套用
反向工程經常被用在軍事上,用來複製從戰場上由常規部隊或
情報活動獲得的別國的技術、設備、信息或其零件。二戰和
冷戰中經常被用到。二戰以來的著名例子有:
1.便攜油桶:英美軍注意到德軍有一種設計絕妙的油桶,於是就用反向工程複製了這些桶。這些被泛稱為“便攜油桶”。
2.圖波列夫Tu-4: 三架飛往日本的
B-29轟炸機迫降到了蘇聯。蘇聯沒有類似的戰略轟炸機,就決定複製B-29。幾年後他們開發出了Tu-4,幾近完美的複製品。
3.
V2火箭:戰爭結束時V2的技術文檔和相關技術被西方聯盟俘獲。蘇聯和被俘的德工程師要用俘獲的構件重建技術文檔和圖紙,用於生產這種飛彈的代件。R-1啟動了戰後蘇聯飛彈計畫,一直到
R-7,並導致了
太空競賽。
4.K-13/R-3S飛彈(
北約代號為
AA-2 'Atoll)是蘇聯對AIM-9響尾蛇的反向工程複製品。早期傳說一枚台灣AIM-9B射中中國大陸MiG-17後沒有爆炸,這枚飛彈留在了機身里,飛行員帶著這枚飛彈返回了基地。根據蘇聯公開的數據則是由墜毀在中國境內的美國海軍的戰鬥機殘骸上取得。
5.BGM-71 TOW飛彈:1975年三月,伊朗與休斯飛彈系統公司的關於TOW和Maverick飛彈合作的談判因
價格體系的分歧停止了,接下來的1979年革命結束了這種合作的所有計畫。伊朗成功地對這種飛彈進行反向工程,目前正在生產他們自己的複製品:圖芬(Toophan)。
相關法律
在美國及其他許多國家,製品或製法都受商業秘密保護,只要合理地取得製品或製法就可以對其進行反向工程。專利需要把你的發明公開發表,因此專利不需要反向工程就可進行研究。反向工程的一種動力就是確認競爭者的產品是否侵權專利或
侵犯著作權。
為了
互用性(例如,支持未公開的檔案格式或硬體外圍),而對軟體或
硬體系統進行的反向工程被認為是合法的,雖然專利持有者經常反對並試圖打壓以任何目的對他們產品進行的反向工程。
為了獲取一個有著作權的電腦程式中隱含的思想和功能元素且有合法的理由要獲取,當只有拆解這一種方法時,根據法律判定,拆解是對有著作權作品的公平使用。
中國最高人民法院2007年1月17日公布“關於審理
不正當競爭民事案件套用法律若干問題的解釋”,首次明確規定:通過自行開發研製或者反向工程等方式獲得的商業秘密,不認定為
反不正當競爭法有關條款規定的
侵犯商業秘密行為。 即通過自行研發或反向工程獲得商業秘密不屬非正當競爭行為,正式為反向工程正名。