跳轉到內容

軟體工程/重構/逆向工程簡介

來自華夏公益教科書

逆向工程是透過分析人類製造的裝置、物體或系統的結構、功能和操作,來發現其技術原理的過程。它通常涉及將某物(例如機械裝置、電子元件或軟體程式)拆開並詳細分析其工作原理,以便用於維護,或嘗試製造一個新的裝置或程式來執行相同的操作,而無需使用或簡單地複製(無需理解)原始裝置的任何部分。

逆向工程起源於對硬體的分析,以獲取商業或軍事優勢。[1] 目的是從最終產品中推斷設計決策,而對原始生產過程中涉及的程式幾乎沒有或根本沒有額外瞭解。這些相同的技術隨後正在被研究以應用於遺留軟體系統,不是為了工業或國防目的,而是為了替換不正確、不完整或其他不可用的文件。[2]

逆向工程的原因

  • 互操作性。
  • 丟失的文件:逆向工程通常是由於某個特定裝置的文件丟失(或從未編寫),並且製造該裝置的人員不再可用。積體電路似乎經常是在過時的專有系統上設計的,這意味著將功能整合到新技術中的唯一方法是反向工程現有晶片,然後重新設計它。
  • 產品分析。檢查產品的工作原理、組成部件、估計成本以及識別潛在的專利侵權行為。
  • 數字更新/校正。更新物體的數字版本(例如 CAD 模型)以匹配“竣工”狀態。
  • 安全審計。
  • 透過拆卸和分析系統元件的設計來獲取敏感資料。[3]
  • 軍事或商業間諜活動。透過竊取或俘獲原型並將其拆卸,瞭解敵方或競爭對手的最新研究成果。
  • 刪除複製保護、規避訪問限制。
  • 建立未經許可/未經授權的副本。
  • 材料收集、分類或報廢。[4]
  • 學術/學習目的。
  • 好奇心。
  • 競爭技術情報(瞭解您的競爭對手實際在做什麼,而不是他們說他們正在做什麼)。
  • 學習:從他人的錯誤中學習。不要犯其他人已經犯過並隨後糾正的錯誤。

機器的逆向工程

[編輯 | 編輯原始碼]

隨著計算機輔助設計 (CAD) 的日益普及,逆向工程已成為一種可行的方法,可以建立現有物理零件的 3D 虛擬模型,用於 3D CAD、CAM、CAE 或其他軟體。[5] 逆向工程過程包括測量物體,然後將其重建為 3D 模型。可以使用 CMM、雷射掃描器、結構光數字化儀或工業 CT 掃描(計算機斷層掃描)等 3D 掃描技術測量物理物體。單獨測量的點雲通常缺乏拓撲資訊,因此通常需要將其處理和建模為更易於使用的格式,例如三角面網格、一組 NURBS 曲面或 CAD 模型。

企業也使用逆向工程將現有的物理幾何形狀引入數字產品開發環境,以建立他們自己產品的數字 3D 記錄,或評估競爭對手的產品。它用於分析,例如,產品的工作原理、功能、組成部件、估計成本以及識別潛在的專利侵權行為等。

價值工程是企業也使用的相關活動。它涉及對產品的拆卸和分析,但目標是尋找成本削減的機會。

軟體的逆向工程

[編輯 | 編輯原始碼]

應用於軟體的術語逆向工程對不同的人意味著不同的東西,促使 Chikofsky 和 Cross 撰寫了一篇論文來研究各種用途並定義分類法。從他們的論文中,他們指出,“逆向工程是分析目標系統以建立更高階抽象級別系統表示的過程”。[6] 它也可以被視為“沿著開發週期向後走”。[7] 在此模型中,實現階段的輸出(以原始碼形式)被反向工程回分析階段,反轉了傳統的瀑布模型。逆向工程僅是一個檢查過程:所考慮的軟體系統不會被修改(這將使其成為重新設計)。軟體防篡改技術用於阻止對專有軟體和軟體驅動系統的逆向工程和重新設計。實際上,出現了兩種主要的逆向工程型別。在第一種情況下,軟體的原始碼已經可用,但程式的更高級別方面,可能是文件不足的,或者有文件但不再有效,將被發現。在第二種情況下,軟體沒有可用的原始碼,任何努力去發現該軟體的一種可能的原始碼都被視為逆向工程。這種對術語的第二種用法是大多數人熟悉的。軟體的逆向工程可以使用潔淨室設計技術來避免侵犯版權。

相關的是,軟體工程中的黑盒測試與逆向工程有很多共同點。測試人員通常擁有 API,但他們的目標是透過從外部猛擊產品來發現錯誤和未記錄的功能。

逆向工程的其他目的包括安全審計、刪除複製保護(“破解”)、規避消費電子產品中經常出現的訪問限制、嵌入式系統的定製(例如發動機管理系統)、內部維修或改裝、啟用低成本“殘缺”硬體上的附加功能(例如一些顯示卡晶片組),甚至僅僅滿足好奇心。

認證逆向工程分析師 (CREA) 是 IACRB 提供的認證,它證明候選人精通軟體逆向工程。

二進位制軟體

[編輯 | 編輯原始碼]

此過程有時被稱為逆向程式碼工程或 RCE。[8] 例如,可以使用 Jad 完成對 Java 平臺二進位制檔案的反編譯。逆向工程的一個著名案例是 PC BIOS 的第一個非 IBM 實現,它啟動了歷史性的 IBM PC 相容行業,該行業多年來一直是壓倒性地佔主導地位的計算機硬體平臺。一個以娛樂為目的(並分發註冊破解)對軟體進行逆向工程的團體示例是 CORE,它代表“逆向工程挑戰”。軟體的逆向工程在美國受到版權法中合理使用例外條款的保護。[9] Samba 軟體允許不執行 Microsoft Windows 系統的系統與執行 Windows 系統的系統共享檔案,是軟體逆向工程的典型例子。[10] 因為 Samba 專案必須反向工程關於 Windows 檔案共享工作原理的未公開資訊,以便非 Windows 計算機可以模擬它。Wine 專案對 Windows API 做了同樣的事情,而 OpenOffice.org 是為此執行此操作的其中一方。Microsoft Office 檔案格式。ReactOS 專案的目標更加雄心勃勃,因為它努力為 NT 分支的當前 Windows 作業系統提供二進位制(ABI 和 API)相容性,允許為 Windows 編寫的軟體和驅動程式在潔淨室反向工程的 GPL 免費軟體或開源對應物上執行。

二進位制軟體技術

[編輯 | 編輯原始碼]

軟體的逆向工程可以透過多種方法完成。軟體逆向工程的三大類是

  1. 透過觀察資訊交換進行分析,這在協議逆向工程中最常見,例如,使用匯流排分析器和資料包嗅探器來訪問計算機匯流排或計算機網路連線,並揭示其上的流量資料。然後可以分析匯流排或網路行為,以生成模仿該行為的獨立實現。這對於反向工程裝置驅動程式特別有用。有時,嵌入式系統上的逆向工程會受到製造商故意引入的工具(如 JTAG 埠或其他除錯方法)的極大幫助。在 Microsoft Windows 中,低階偵錯程式(如 SoftICE)很受歡迎。
  2. 使用反彙編器進行反彙編,這意味著僅藉助機器語言助記符,就可以讀取和理解程式的原始機器語言。這適用於任何計算機程式,但可能需要相當長的時間,特別是對於不習慣機器程式碼的人來說。互動式反彙編器是一個特別流行的工具。
  3. 使用反編譯器進行反編譯,這是一個嘗試(結果各不相同)以某種高階語言重新建立僅以機器程式碼或位元組碼形式提供的程式的原始碼的過程。

原始碼

[edit | edit source]

許多 UML 工具將匯入和分析原始碼以生成 UML 圖表的過程稱為“逆向工程”。參見 UML 工具列表。

協議的逆向工程

[edit | edit source]

協議是一組規則,描述了訊息格式以及訊息如何交換(即協議狀態機)。因此,協議逆向工程問題可以分為兩個子問題;訊息格式和狀態機逆向工程。

訊息格式傳統上是透過一個乏味的手動過程進行逆向工程的,該過程涉及分析協議實現如何處理訊息,但最近的研究提出了一些自動解決方案[11][12][13]。通常,這些自動方法要麼使用各種聚類分析將觀察到的訊息分組到聚類中,要麼模擬協議實現以跟蹤訊息處理。

關於協議狀態機逆向工程的工作較少。通常,協議狀態機可以透過離線學習過程來學習,該過程被動地觀察通訊並嘗試構建接受所有觀察到的訊息序列的最一般狀態機,以及線上學習過程,該過程允許互動式生成探測訊息序列並監聽對這些探測序列的響應。通常,離線學習小型狀態機被認為是 NP 完全的[14],而線上學習可以在多項式時間內完成[15]。Comparetti 等人展示了一種自動離線方法。[13]。Cho 等人最近提出了一種線上方法。[16]

其他典型協議元件(如加密和雜湊函式)也可以自動逆向工程。通常,自動方法跟蹤協議實現的執行,並嘗試檢測記憶體中包含未加密資料包的緩衝區[17]

積體電路/智慧卡的逆向工程

[edit | edit source]

逆向工程是一種侵入性和破壞性的分析智慧卡的形式。攻擊者會一層一層地磨掉智慧卡,並用電子顯微鏡拍照。使用這種技術,可以揭示智慧卡的完整硬體和軟體部分。攻擊者面臨的主要問題是將所有內容按正確順序排列,以找出所有內容的工作原理。工程師試圖透過混淆記憶體位置(例如,匯流排混淆)來隱藏金鑰和操作。[18][19]在某些情況下,甚至可以連線探針來測量智慧卡執行時的電壓。工程師使用感測器來檢測和防止這種攻擊。[20]這種攻擊並不常見,因為它需要大量的努力和專門裝置的投資,而這些裝置通常只有大型晶片製造商才能獲得。此外,這種攻擊的回報率很低,因為通常會使用其他安全技術,例如影子賬戶。

軍事應用的逆向工程

[edit | edit source]

軍隊經常使用逆向工程來複制其他國家從戰場或情報行動中獲得的技術、裝置或資訊。它經常在第二次世界大戰和冷戰期間使用。二戰及其後的一些著名例子包括

  • Jerry 罐:英美軍隊注意到德國人擁有設計精良的汽油罐。他們逆向工程複製了這些罐子。這些罐子俗稱“Jerry 罐”。
  • 圖波列夫 Tu-4:三架美國 B-29 轟炸機在日本執行任務時被迫降落在蘇聯。蘇聯沒有類似的戰略轟炸機,於是決定複製 B-29。幾年內,他們開發了 Tu-4,這是一款幾乎完美的複製品。
  • V2 火箭:戰爭結束時,西方盟軍繳獲了 V2 及相關技術的技術檔案。蘇聯和被俘的德國工程師不得不從繳獲的硬體開始,重新制作技術檔案和圖紙,以製造他們的火箭克隆體 R-1,這開啟了戰後蘇聯的火箭計劃,最終導致了 R-7 和太空競賽的開始。
  • Vympel K-13/R-3S 導彈(北約代號為 **AA-2 Atoll**),是蘇聯根據 AIM-9 Sidewinder 逆向工程複製的,這是因為一架臺灣 AIM-9B 擊中了一架中國 MiG-17,但沒有爆炸;令人驚訝的是,導彈卡在了機身內,飛行員帶著俄羅斯科學家所稱的導彈開發大學課程回到了基地。
  • BGM-71 TOW 導彈:1975 年 5 月,伊朗與休斯導彈系統公司關於 TOW 和小牛導彈聯合生產的談判因定價結構分歧而陷入僵局,隨後的 1979 年革命終止了所有此類聯合生產計劃。伊朗後來成功地對該導彈進行了逆向工程,目前正在生產自己的複製品:Toophan。
  • 中國已經對許多西方和俄羅斯硬體進行了逆向工程,從戰鬥機到導彈和悍馬汽車。

合法性

[edit | edit source]

在美國,即使某件物品或某個過程受商業秘密保護,對其進行逆向工程通常也是合法的,只要它是合法獲得的。[21]另一方面,專利需要對一項發明進行公開披露,因此,不一定需要對專利物品進行逆向工程才能對其進行研究。(但是,根據一項或多項專利生產的物品也可能包含其他未獲得專利且未公開的技術。)逆向工程師的一個常見動機是確定競爭對手的產品是否包含專利侵權或版權侵權。

在美國,對軟體進行逆向工程通常是非法的,因為大多數終端使用者許可協議禁止這樣做,法院也裁定此類合同禁止條款優先於版權法;參見 Bowers v. Baystate Technologies。[22][23]1991 年歐盟《計算機程式指令》第 6 條允許出於互操作性目的進行逆向工程,但禁止出於建立競爭產品的目的進行逆向工程,並且還禁止公開發布透過對軟體進行逆向工程獲得的資訊。[24][25][26]

另請參閱

[edit | edit source]
  • 安提基特拉機械
  • 基準測試
  • 匯流排分析器
  • Chonda
  • 潔淨室設計
  • 程式碼變形
  • Connectix 虛擬遊戲站
  • 反編譯器
  • 數字千年版權法 (DMCA)
  • 法醫工程
  • 互動式反彙編器
  • 知識發現元模型
  • 生產主題列表
  • 邏輯分析儀
  • 薪水 (電影)
  • 價值工程
  • 密碼分析
  • 軟體考古學

參考文獻

[編輯 | 編輯原始碼]
  1. Chikofsky, E. J.; Cross, J. H., II (1990). "逆向工程和設計恢復:分類法". IEEE 軟體. 7 (1): 13–17. doi:10.1109/52.43044. {{cite journal}}: 未知引數 |lastauthoramp= 被忽略 (|name-list-style= 建議) (幫助).
  2. 逆向工程和程式理解調查。邁克爾·L·尼爾森,1996 年 4 月 19 日,ODU CS 551 - 軟體工程調查。此外,逆向工程概念用於修改或更改作業系統中的預製 .dll 檔案
  3. 網際網路工程任務組 RFC 2828 網際網路安全詞彙表
  4. http://scrappingmetal.blogspot.com/2010/10/reverse-engineering.html
  5. T. Varady, R. R. Martin, J. Cox, 幾何模型的逆向工程 - 概述,計算機輔助設計 29 (4), 255-268, 1997.
  6. Chikofsky, E.J. (1990). "逆向工程和設計恢復:IEEE 軟體中的分類法". IEEE 計算機學會: 13–17. {{cite journal}}: 未知引數 |coauthors= 被忽略 (|author= 建議) (幫助); 未知引數 |month= 被忽略 (幫助)
  7. Warden, R. (1992). 軟體重用和逆向工程實踐. 英國倫敦:Chapman & Hall. pp. 283–305.
  8. Chuvakin, Anton (2004). 安全戰士 (第 1 版). O'Reilly. {{cite book}}: |access-date= 需要 |url= (幫助); 未知引數 |coauthors= 被忽略 (|author= 建議) (幫助); 未知引數 |month= 被忽略 (幫助)
  9. 參見 Samuelson, Pamela; Scotchmer, Suzanne (2002). "逆向工程的法律與經濟學". 耶魯法學雜誌. 111 (7): 1575–1663. doi:10.2307/797533. JSTOR 797533. {{cite journal}}: 未知引數 |lastauthoramp= 被忽略 (|name-list-style= 建議) (幫助).
  10. "Samba:簡介". 2001-11-27. 檢索於 2009-05-07.
  11. W. Cui、J. Kannan 和 H. J. Wang。Discoverer:從網路跟蹤中自動逆向工程協議。在第 16 屆 USENIX 安全研討會上關於 USENIX 安全研討會的論文集,第 1-14 頁。
  12. W. Cui、M. Peinado、K. Chen、H. J. Wang 和 L. Irún-Briz。Tupni:輸入格式的自動逆向工程。在第 15 屆 ACM 計算機和通訊安全會議論文集,第 391-402 頁。ACM,2008 年 10 月。
  13. a b P. M. Comparetti、G. Wondracek、C. Kruegel 和 E. Kirda。Prospex:協議規範提取。在 2009 年第 30 屆 IEEE 安全與隱私研討會論文集,第 110-125 頁,華盛頓,2009 年。IEEE 計算機學會。
  14. E. M. Gold。從給定資料中識別自動機的複雜性。資訊與控制,37(3):302-320,1978 年。
  15. D. Angluin。從查詢和反例中學習正則集。資訊與計算,75(2):87-106,1987 年。
  16. C.Y. Cho、D. Babic、R. Shin 和 D. Song。 殭屍網路命令和控制協議的形式模型的推理和分析,2010 年 ACM 計算機和通訊安全會議。
  17. Polyglot:使用動態二進位制分析自動提取協議訊息格式。J. Caballero、H. Yin、Z. Liang 和 D. Song。第 14 屆 ACM 計算機和通訊安全會議論文集,第 317-329 頁。
  18. Wolfgang Rankl,Wolfgang Effing,智慧卡手冊 (2004)
  19. T. Welz:智慧卡作為支付方式 (2008 年),魯爾大學波鴻 ITS 安全研討會,"http://www.crypto.rub.de/its_seminar_ws0708.html"
  20. David C. Musker:保護和利用電子產品中的智慧財產權,IBC 會議,1998 年 6 月 10 日
  21. http://www.memagazine.org/contents/current/features/trade101/trade101.html
  22. http://www.utsystem.edu/ogc/intellectualproperty/baystatevbowersdiscussion.htm
  23. http://www.infoworld.com/d/developer-world/contract-case-could-hurt-reverse-engineering-337
  24. http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:31991L0250:EN:HTML
  25. http://books.google.com/books?id=KJmNGglq0nwC&pg=PA321&lpg=PA321&dq=e+European+Software+Directive+reverse+engineering&source=bl&ots=D-fjaWSI4Y&sig=47VJ-tdmg8abUjEjEtvYueC4WKU&hl=en&ei=SIGITJDxI8GLswa4kpScCg&sa=X&oi=book_result&ct=result&resnum=3&ved=0CBwQ6AEwAg#v=onepage&q=e%20European%20Software%20Directive%20reverse%20engineering&f=false
  26. http://www.jenkins.eu/articles-general/reverse-engineering.asp

進一步閱讀

[編輯 | 編輯原始碼]
[edit | edit source]
華夏公益教科書