逆向工程

逆向工程（），又稱反向工程，是一種技術仿造過程，即對一專案標產品進行逆向分析及研究，從而演繹並得出該產品的處理流程、組織結構、功能效能規格等設計要素，以製作出功能相近，但又不完全一樣的產品。逆向工程源於商業及軍事領域中的硬體分析。其主要目的是，在無法輕易獲得必要的生產資訊下，直接從成品的分析，推導產品的設計原理。

逆向工程可能會被誤認為是對智慧財產權的嚴重侵害，但是在實際應用上，反而可能會保護智慧財產權所有者。例如在積體電路領域，如果懷疑某公司侵犯智慧財產權，可以用逆向工程技術來尋找證據。

动机
需要逆向工程的原因如下：
接口设计：由于互操作性，逆向工程被用来找出系统之间的协作协议。
军事或商业机密：窃取敌人或竞争对手的最新研究或产品原型。
改善文档：当原有的文档有不充分处，又当系统被更新而原设计人员不在时，逆向工程被用来获取所需数据，以补充说明或了解系统的最新状态。
软件升级或更新：出于功能、合规、安全等需求更改，逆向工程被用来了解现有或遗留软件系统，以评估更新或移植系统所需的工作。
制造没有许可／未授权的副本。
学术／学习目的。
去除复制保护和伪装的登录权限。
文件丢失：采取逆向工程的情况往往是在某一个特殊设备的文件已经丢失了（或者根本就没有），同时又找不到工程的负责人。完整的系统时常需要基于陈旧的系统上进行再设计，这就意味着想要整合原有的功能进行项目的唯一方法便是采用逆向工程的方法分析已有的碎片进行再设计。
产品分析：用于调查产品的运作方式、部件构成、估计预算，以及识别潜在的侵权行为。

應用

机械设备
随着计算机辅助设计的流行，逆向工程变成了一种能根据现有的物理部件通过CAD、CAM、CAE或其他软件构筑3D虚拟模型的方法。逆向工程的过程採用了通过測量实际物体的尺寸并将其制作成3D模型的方法，真实的物件可以通过如CMMs、激光扫描仪、结构光源转换仪，或者X射线断层成像等这些3D扫描技术进行尺寸测量。这些测量数据通常被认作是點雲，缺乏拓扑信息并且同时通常会被制作成更有用格式例如多边形网格，NURBS曲线或者CAD模型。由于點雲本身并不像3D软件裡的模型那样直观，所以如同、Imageware、、或者杰魔公司等这些软件都提供了将點雲变成能可视图像，或者被其他应用软件如3D CAD、CAM、CAE识别的格式的功能。

反向工程同时会被需要将真实的几何体应用在虚拟的数字开发环境中的商业活动中应用，比如将自己产品或者竞争者的三维数据数字化。通过这种手段可以分析出产品的运作方式，部件构成，估计预算和识别潜在的侵权行为等。

价值工程也是商业中应用的类似手段。不过价值工程的目的是通过反构造和分析产品来找到节省开销的办法。

软件
由于「逆向工程」一词用在软件工程（简称「软工」）领域中的具体含义模糊不清，Chikofsky和Cross为此写了篇文章，以阐清及区分「逆向工程」与各种相近的概念。据文章所述，逆向工程是一种分析目标系统的过程，其目的是识别出系统的各个组件以及它们之间的关系，并以其它的形式或在较高的抽象层次上，重建系统的表征（Representations）。  软件逆向工程也可被视作「开发周期的逆行」。
在此定义下，对一项软件程序进行逆向工程，类似于逆行传统瀑布模型中的开发步骤，即把实现阶段的输出（即软件程序）还原回在设计阶段所做的构思。软件逆向工程仅仅是一种检测或分析的过程，它并不会更改目标系统（否则就成了软件再工程）。

软件防篡改技术被用于遏制对专有软件进行逆向工程及再工程。大部分人都熟悉这个词的第二种用法。软件的逆向工程可以使用净室技术来避免侵犯版权。

软工中的黑盒测试与逆向工程有很多共同点，但黑箱测试人员常供以API以作测试，并且测试的目的就是通过外部攻击，找出程序漏洞和未归档的特性。

逆向工程的其他目的包括：安全审查、 解除复制保护（又称破解）、绕过消费类电子产品中常设有的访问限制、定制嵌入式系统（例如引擎管理系统）、产品内部修补或更新、给功能不全的廉价硬件（例如某些显卡芯片组）添加额外功能，或仅为满足好奇心。

二进制软件
对最终程序的二进制代码所进行的逆向工程被称为「代码反向工程」，或简称RCE（Reverse Code Engineering）。例如，我们可以用Jad对Java平台的二进制码进行反编译。一个著名的逆向工程案例是，首个由非IBM公司所实现的IBM个人电脑中的BIOS，这开创了IBM PC兼容机产业，使得IBM PC兼容机成为多年来的主流计算机硬件平台。一个以软件逆向工程为乐的团体例子是CORE（Challenge Of Reverse Engineering，意为「挑战逆向工程」）。在美国，软件逆向工程只要遵守版权法的合理使用规定，都是受保护的。成功的软件逆向工程项目有：
Samba：一个允许非Windows系统与Windows系统共享文件的开源项目。由于微软没有公开Windows文件共享机制的信息，Samba必须作逆向工程，以便在非Windows系统上，仿真出同样的行为。
Wine：对Windows API做了同样的工作，
OpenOffice.org：对Microsoft Office文件格式作逆向工程。
ReactOS：竭力在ABI及API上，兼容NT系Windows系统，以便让为Windows所编写的软件和驱动程序可以在其上运行。
WindowsSCOPE：用来监测及分析Windows系统内存的实况内容。

二进制软件技术
软件逆向工程有多种实现方法，主要有三：
 分析通过信息交换所得的观察。最常用于协议逆向工程，涉及使用和数据包嗅探器。在接入计算机总线或网络的连接，并成功截取通信数据后，可以对总线或网络行为进行分析，以制造出拥有相同行为的通信实现。此法特别适用于设备驱动程序的逆向工程。有时，由硬件制造商特意所做的工具，如JTAG端口或各种调试工具，也有助于嵌入式系统的逆向工程。对于微软的Windows系统，受欢迎的底层调试器有SoftICE。
 反汇编，即藉用反汇编器，把程序的原始机器码，翻译成较便于阅读理解的汇编代码。这适用于任何的计算机程序，对不熟悉机器码的人特别有用。流行的相关工具有Interactive Disassembler。
 反编译，即藉用反编译器，尝试从程序的机器码或字节码，重现高级语言形式的源代码。

源代码
许多UML工具涉及到导入源代码生成UML图，即“逆向工程”。

集成电路和智能卡
分析智能卡的逆向工程具有侵入性和破坏性，智能卡被层层刮掉用电子显微镜拍照。这种技术可以完整地揭示出智能卡的硬件和软件部份。主要的问题就是，把所有的东西按正确的顺序放好以找出每一个部件是如何工作的。工程师们用打乱内存位置的方法隐藏密码和操作，例如busscrambling。有时甚至可以在智能卡运行的时候用探针直接测量电压，设计师则用感应器来检测和防止。破坏支付业务中使用的智能卡很困难，只有大芯片制造商使用那些专业的设备。况且，和其他安全机制例如阴影帐户相比，这种方法回报太低。

军事
逆向工程经常被用在军事上，用来复制从战场上由常规部队或情报活动获得的别国之技术、设备、信息或其零件。二战和冷战中经常被用到。二战以来的著名例子有：
 德國桶：英美军注意到德军有一种设计绝妙的油桶，于是就用逆向工程复制了这些桶。这些被泛称为“便携油桶”。
 四式7.5公分高射炮：日本從中國戰場擄獲的波佛斯75毫米口徑M1929高射炮上的逆向工程，產生四式7.5公分高射炮並搭配日本的九八式六噸牽引車使用，拖弋速度可達時速45公里，並擁有快速放列的作戰的能力。
 图波列夫Tu-4：三架飞往日本的B-29「超級堡壘」轰炸机迫降到了苏联。苏联没有类似的战略轰炸机，就决定复制B-29。几年后他们开发出了Tu-4，几近完美的复制品。
 V-2火箭：战争结束时V2的技术文档和相关技术被西方联盟俘获。苏联和被俘的德工程师要用俘获的构件重建技术文档和图纸，用于生产这种导弹的代件。R-1啟動了戰後蘇聯導彈畫，一直到R-7，并导致了太空竞赛。
 K-13/R-3S导弹（北約代號为AA-2 'Atoll）是苏联对AIM-9响尾蛇的逆向工程复制品。早期傳說一枚臺灣AIM-9B射中中國大陆MiG-17后没有爆炸，这枚导弹留在机身裡，飞行员带着这枚导弹返回了基地。根據蘇聯公開的資料則是由墜毀在中國境內的美國海軍戰鬥機殘骸上取得。
 BGM-71 TOW導彈：1975年三月，伊朗與休斯导弹系统公司的关于TOW和Maverick导弹合作的谈判因价格体系的分歧停止了，接下来的1979年革命结束了这种合作的所有计划。伊朗成功地对这种导弹进行逆向工程，目前正在生产他们自己的复制品：圖芬（Toophan）。

相关法律
在美国及其他许多国家，制品或制法都受商业秘密保护，只要合理地取得制品或制法就可以对其进行逆向工程。专利需要將发明公开发表，因此专利不需要逆向工程就可进行研究。逆向工程的一种动力就是确认竞争者的产品是否侵权专利或侵犯版权。

为了互用性（例如，支持未公开的文件格式或硬件外围），而对软件或硬件系统进行的逆向工程被认为是合法的，虽然专利持有者经常反对并试图打压以任何目的对他们产品进行的逆向工程。

为了获取一个有版权的计算机程序中隐含的思想和功能元素且有合法的理由要获取，当只有拆解这一种方法时，根据法律判定，拆解是对有版权作品的合理使用。

在虛構作品
 记忆裂痕

另见
 安提基特拉机械
 基准化分析法
 
 净室设计
 代码融合
 索尼PS游戏机模拟器
 反编译
 千禧年数字版权法案（DMCA）
 法工程学
 交互式反汇编器
 
 逻辑分析器
 价值工程

延伸導讀
Reverse Engineering for Beginners, D.Yurichev.  .

参考

外部链接
 Crackmes.de, the longest running and most complete Crackmes web page on the internet. Free Reverse Code Engineering training material
 Video RCE, the biggest Reverse Code Engineering Video Library, with hundreds of free video tutorials
 IITAC, the Reverse Code Engineering and IT Security Training/Audit Institute a leading consulting institute, home of the above free RCE resources
 Reverse Code Engineering: The complete resource for RE of software. Archives of the most important Reverse Code Engineering sites 
 OpenRCE: Reverse Engineering Portal 
 MoDisco: (Model Discovery), an Eclipse Project on Model Driven Reverse Engineering
 ERESI: The ERESI Reverse Engineering Software Interface  for RCE on UNIX
 Radare: Advanced CmdLine Hexadecimal Editor, Disassembler and Debugger  multi-platform full-featured RCE tool
 Program transformation wiki on Reverse Engineering 
 Introduction to Reverse Engineering Software , preprint of a book by Mike Perry and Nasko Oskov.
 Reverse Engineering Shapes , article by Tamás Várady
 Online Resource for Reverse Engineering Software 
 Article on legal considerations by David C. Musker
 CNN: How Soviets copied America's best bomber during WWII 
 Very good RE definitions from Software Engineering
 Architecture-Driven Modernization group at OMG 
 Reverse Engineering Delivers Product Knowledge Aids Technology Spread - Article in Electronic Design by Dick James, Senior Technology Adviser, Chipworks
 Chikofsky, E.J.; J.H. Cross II (January 1990). "Reverse Engineering and Design Recovery: A Taxonomy in IEEE Software". IEEE Computer Society: 13–17.  - Original Paper hosted at cs.cmu.edu
 Reverse Engineering Applications Creaform 3D Reverse Engineering Services

 
著作權侵害