逆向工程

從人造的任何東西中提取知識或設計信息並重新生成或根據提取的信息再現任何東西的過程

逆向工程(英语:Reverse Engineering),又称反向工程,是一种技术仿造过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是,在无法轻易获得必要的生产信息下,直接从成品的分析,推导产品的设计原理。

逆向工程可能会被误认为是对知识产权的严重侵害,但是在实际应用上,反而可能会保护知识产权所有者。例如在集成电路领域,如果怀疑某公司侵犯知识产权,可以用逆向工程技术来查找证据。

动机 编辑

需要逆向工程的原因如下:

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

应用 编辑

机械设备 编辑

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

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

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

软件 编辑

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

软件防篡改技术被用于遏制对专有软件进行逆向工程及再工程实际应用中出现了两类逆向工程。第一种,软件的源代码可用,但是更高层次的部分几乎没有描述文档或者描述文档不再适用或者丢失。第二种,软件没有可用的源代码,任何能找到它的源代码的努力都被称为逆向工程。[来源请求]大部分人都熟悉这个词的第二种用法。软件的逆向工程可以使用净室技术来避免侵犯著作权。

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

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

二进制软件 编辑

对最终程序的二进制代码所进行的逆向工程被称为“代码反向工程”,或简称RCE(Reverse Code Engineering)。[4]例如,我们可以用Jad对Java平台的二进制码进行反编译。一个著名的逆向工程案例是,首个由非IBM公司所实现的IBM个人电脑中的BIOS,这开创了IBM PC兼容机产业,使得IBM PC兼容机成为多年来的主流计算机硬件平台。一个以软件逆向工程为乐的团体例子是CORE(Challenge Of Reverse Engineering,意为“挑战逆向工程”)。在美国,软件逆向工程只要遵守著作权法合理使用规定,都是受保护的。[5]成功的软件逆向工程项目有:

  • Samba:一个允许非Windows系统与Windows系统共享文件的开源项目。由于微软没有公开Windows文件共享机制的信息,Samba必须作逆向工程,以便在非Windows系统上,仿真出同样的行为。
  • Wine:对Windows API做了同样的工作,
  • OpenOffice.org:对Microsoft Office文件格式作逆向工程。
  • ReactOS:竭力在ABIAPI上,兼容NT系Windows系统,以便让为Windows所编写的软件和驱动程序可以在其上运行。
  • WindowsSCOPE:用来监测及分析Windows系统内存的实况内容。

二进制软件技术 编辑

软件逆向工程有多种实现方法,主要有三:

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

源代码 编辑

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

集成电路和智能卡 编辑

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

军事 编辑

逆向工程经常被用在军事上,用来复制从战场上由常规部队或情报活动获得的别国之技术、设备、信息或其零件。二战冷战中经常被用到。二战以来的著名例子有:

  • 德国桶:英美军注意到德军有一种设计绝妙的油桶,于是就用逆向工程复制了这些桶。这些被泛称为“便携油桶”。
  • 四式7.5公分高射炮:日本从中国战场掳获的波佛斯75毫米口径M1929高射炮上的逆向工程,产生四式7.5公分高射炮[9]并搭配日本的九八式六吨牵引车使用,拖弋速度可达时速45公里[10],并拥有快速放列的作战的能力。[10]
  • 图波列夫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)。

相关法律 编辑

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

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

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

在虚构作品 编辑

另见 编辑

延伸导读 编辑

参考 编辑

  1. ^ Varady, T; Martin, R; Cox, J. Reverse engineering of geometric models–an introduction (PDF). Computer-Aided Design. 1997, 29 (4): 255–268 [2019-01-18]. doi:10.1016/S0010-4485(96)00054-1. (原始内容存档 (PDF)于2011-09-28). 
  2. ^ Chikofsky, E. J.; Cross, J. H. Reverse engineering and design recovery: A taxonomy (PDF). IEEE Software. January 1990, 7: 13–17 [2019-01-18]. doi:10.1109/52.43044. (原始内容 (PDF)存档于2018-04-17). 
  3. ^ Warden, R. Software Reuse and Reverse Engineering in Practice. London, England: Chapman & Hall. 1992: 283–305. 
  4. ^ Chuvakin, Anton; Cyrus Peikari. Security Warrior 1st. O'Reilly. January 2004 [2006-05-25]. (原始内容存档于2006-05-22). 
  5. ^ Samuelson, Pamela & Scotchmer, Suzanne. The Law and Economics of Reverse Engineering. Yale Law Journal英语Yale Law Journal. 2002, 111 (7): 1575–1663 [2019-01-18]. JSTOR 797533. doi:10.2307/797533. (原始内容存档于2010-07-15). 
  6. ^ Wolfgang Rankl, Wolfgang Effing, Smart Card Handbook (2004)
  7. ^ T. Welz: Smart cards as methods for payment (2008), Seminar ITS-Security Ruhr-Universität Bochum, "http://www.crypto.rub.de/its_seminar_ws0708.html Archive.is存档,存档日期2012-07-24"
  8. ^ David C. Musker: Protecting & Exploiting Intellectual Property in Electronics, IBC Conferences, 10 June 1998
  9. ^ 虽然在炮架结构上与波佛斯防空炮类似,但是在火炮倍径以及重量上比较接近自苏联输入的1931年型76毫米高射炮,不能排除日本是以两种防空炮混合的可能性。
  10. ^ 10.0 10.1 “日本の大炮” 竹内昭・佐山二郎共著 出版共同社 昭和61年 p376
  11. ^ Sega v. Accolade, 203 F.3d 596 (9th Cir. 1993)

外部链接 编辑