标题：反向工程
反向工程
反向工程（又称逆向工程），指从他人的产品入手，进行分解剖析和综合研究，在广泛搜集产品资讯的基础上，通过对尽可能多的同类产品的解体和破坏性研究，运用各种科学测试、分析和研究手段，反向求索该产品的技术原理、结构机制、设计思想、制造方法、加工工艺和原材料特性，从而达到从原理到制造，由结构到材料全面系统地掌握产品的设计和生产技术。
反向工程，是相对正向工程来说的，正向工程：将工程概念或工程设计模型，通过设计、制造，转变为实物模型或产品模型的过程。反向工程：将实物模型或产品模型，通过测量、分析，转变为工程概念或工程设计模型的过程。或称逆向工程、反求工程（Reverse Engineering）。
中国最高人民法院2007年1日17日公布“关于审理不正当竞争民事案件应用法律若干问题的解释”，首次明确规定：通过自行开发研制或者反向工程等方式获得的商业秘密，不认定为反不正当竞争法有关条款规定的侵犯商业秘密行为。即通过自行研发或反向工程获得商业秘密不属非正当竞争行为，正式为反向工程正名。[1]
反向工程技术
反向工程技术，是以实物（产品）、软件、图纸、程序、技术文件、影像（图片、照片）作为研究对象，应用现代设计理论方法、生产工程学、材料学和有关专业知识（测量学、信号自动处理）进行系统深入的分析和研究，是一种快捷的新产品开发技术。
反向工程技术反求内容广泛，包括：产品的结构和工作原理、产品的材料和力学性能、制造产品的技术资料（图纸、制造工艺、装配工艺、产品检验）、产品技术标准（型号、规格、标准）。其本质是对先进产品进行消化、吸收，再开发和创新，设计和制造出具有竞争力的新产品。缩短新产品的开发周期，提高新产品开发的一次成功率，从而提高企业在市场中的竞争力。
反向工程技术主要应用于：产品（零件）的仿制和复制，复杂产品（零件）的设计，产品（零件）的检验、改进设计，复杂形体的CAD建模，产品设计与快速成形技术等。
何时使用
需要反向工程的原因如下：
1.接口设计。由于互操作性，反向工程被用来找出系统之间的协作协议。
2.军事或商业机密。窃取敌人或竞争对手的最新研究或产品原型。
3.改善文档。当原有的文档有不充分处，又当系统被更新而原设计人员不在时，反向工程被用来获取所需数据，以补充说明或了解系统的最新状态。
4.软件升级或更新。出于功能、合规、安全等需求更改，反向工程被用来了解现有或遗留软件系统，以评估更新或移植系统所需的工作。
5.制造没有许可/未授权的副本。
6.学术/学习目的。
7.去除复制保护和伪装的登录权限。
8.文件丢失：采取反向工程的情况往往是在某一个特殊设备的文件已经丢失了（或者根本就没有），同时又找不到工程的负责人。完整的系统时常需要基于陈旧的系统上进行再设计，这就意味着想要集成原有的功能进行项目的唯一方法便是采用反向工程的方法分析已有的碎片进行再设计。
9.产品分析：用于调查产品的运作方式，部件构成，估计预算，识别潜在的侵权行为。
芯片反向工程
芯片反向工程，又称芯片解密（IC解密），单片机解密，就是指单片机攻击者凭借专用设备或自制设备，利用单片机芯片设计上的漏洞或软件缺陷，通过多种专业技术手段，直接提取加密单片机中烧写文件的关键信息，并可以自己复制烧写芯片或反汇编后自己参考研究。这种反向获取单片机片内程序的方式就叫芯片反向工程。
国内有人认为芯片反向工程其实就是抄袭。相比之下，在国外反向工程是伴随着积体电路工业发展起来的，1984年“半导体芯片保护法案(Semiconductor ChipProtection Act of 1984)”诞生，该法案明确了反向工程的合法性并且严格地区分了侵权和反向工程。中国也于2001年颁布实施了《积体电路布图保护条例》。在芯片反向工程这个问题上为什么在认识上有如此大的差别呢？下面我们将以龙人计算机为例，从芯片反向工程所从事的研究范围和研究手段等方面来透视芯片反向工程。
芯片反向工程其实就是芯片分析，芯片分析涉及三大关键技术∶样品预处理技术；芯片分析软体技术和芯片分析技术（也就是电路分析能力）。以上三项技术相辅相成，缺一不可，其中一项薄弱都会影响到企业分析芯片的能力和水准。
广东龙人列出了芯片分析的流程，我想这有助于大家进一步了解什么是芯片反向工程。
分析流程∶
（1）拍照∶芯片逐层去封装，拍照并对准拼接获得各层芯片照片。
（2）建库∶通过芯片照片提取其中的单元器件建立单元库。
（3）标注∶通过单元库在芯片照片上标记单元器件及器件之间的连接关系。
（4）整理∶把标注出的单元器件整理成为结构清晰的电路图。
（5）层次化∶通过从下至上分析系统的逻辑及机制，从而建立从系统图表到传输级电路的层次化电路图和功能模组。
由上面的分析流程可以看出芯片分析其实就是一个对芯片的解剖过程，在这过程中可以获得芯片的很多相关资料，这些资料可以用来分析学习先进的技术，但是也可以用来复制IC。正如龙人计算机公司总经理夏先生所说“反向工程的不当运用有可能导致侵犯知识产权的后果”。对技术落后的厂商来说实施反向工程可以对先进的技术进行深入的分析、理解，从中找出有规律的东西来，领略设计者的先进设计思想。如果能进一步消化这些技术并在此基础上进行创新应用到自己的产品上去，那将是一件好事，这样可以缩短自己和先进厂商技术上的差距。如果做反向工程单纯是为了复制IC那就是错误的了。一味地跟在先进技术后面跑没有自己的想法，那永远只能充当掉队者的角色。反向工程在国外还被用来做专利分析为法律提供支援。
PCB反向工程
PCB反向工程，又称PCB抄板，即在已经有电子产品实物和电路板实物的前提下，利用反向研发技术手段对电路板进行逆向解析，将原有产品的PCB文件、物料清单(BOM)文件、原理图文件等技术文件以及PCB丝印生产文件进行1：1的还原，然后再利用这些技术文件和生产文件进行PCB制板、元器件焊接、飞针测试、电路板调试，完成原电路板样板的完整复制。
对于PCB反向工程，很多人存在概念误解，甚至认为是山寨，事实上，随着抄板行业的不断发展和深化，今天的PCB抄板概念已经得到更广范围的延伸，不再局限于简单的电路板的复制和克隆，还会涉及产品的二次开发与新产品的研发。比如，通过对既有产品技术文件的分析、设计思路、结构特征、工艺技术等的理解和探讨，可以为新产品的研发设计提供可行性分析和竞争性参考，协助研发设计单位及时跟进最新技术发展趋势、及时调整改进产品设计方案，研发最具有市场竞争性的新产品。同时，PCB抄板的过程通过对技术资料文件的提取和部分修改，可以实现各类型电子产品的快速更新升级与二次开发，根据抄板提取的文件图与原理图，专业设计人员还能根据客户的意愿对PCB进行优化设计与改板，也能够在此基础上为产品增加新的功能或者进行功能特征的重新设计，这样具备新功能的产品将以最快的速度和全新的姿态亮相，不仅拥有了自己的知识产权，也在市场中赢得了先机，为客户带来的是双重的效益。
PCB反向工程的技术实现过程简单来说，就是先将要抄板的电路板进行扫描，记录详细的元器件位置，然后将元器件拆下来做成物料清单（BOM）并安排物料采购，空板则扫描成图片经抄板软件处理还原成pcb板图文件，然后再将PCB文件送制版厂制板，板子制成后将采购到的元器件焊接到制成的PCB板上，然后经过电路板测试和调试即可。
目前最高人民法院已为PCB反向工程正名，但许多正规的抄板单位机构（例如：广东龙人计算机）都有明确规定，凡在公司进行反向工程的客户，必须有合法的设计版权来源声明，以保护原创设计版权所有者的合法权益，并要求客户承诺反向成果主要用于教学、分析、技术研究等合法用途。同时，反向工程致力于在原有产品设计思路上进行二次开发，通过电路原理分析与资料提取，在产品设计中加入新的设计理念与功能模块，快速在原有产品基础上实现创新升级与更新换代，助力电子行业整体竞争力的提升。
反向工程与软件
由于“反向工程”一词用在软件工程（简称“软工”）领域中的具体含义模糊不清，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系统上，仿真出同样的行为。
2.Wine：对Windows API做了同样的工作，
3.OpenOffice：对Microsoft Office文件格式作反向工程。
4.ReactOS：竭力在ABI及API上，兼容NT系Windows系统，以便让为Windows所编写的软件和驱动程序可以在其上运行。
5.WindowsSCOPE：用来监测及分析Windows系统内存的实况内容。
二进制软件技术
软件反向工程有多种实现方法，主要有三：
1.分析通过信息交换所得的观察。最常用于协议反向工程，涉及使用总线分析器和数据包嗅探器。在接入计算机总线或网络的连接，并成功截取通信数据后，可以对总线或网络行为进行分析，以制造出拥有相同行为的通信实现。此法特别适用于设备驱动程序的反向工程。有时，由硬件制造商特意所做的工具，如JTAG端口或各种调试工具，也有助于嵌入式系统的反向工程。对于微软的Windows系统，受欢迎的底层调试器有SoftICE。
2.反汇编，即藉用反汇编器，把程序的原始机器码，翻译成较便于阅读理解的汇编代码。这适用于任何的计算机程序，对不熟悉机器码的人特别有用。流行的相关工具有Interactive Disassembler。
3.反编译，即藉用反编译器，尝试从程序的机器码或字节码，重现高级语言形式的源代码。
集成电路和智能卡的反向工程
分析智能卡的反向工程具有侵入性和破坏性，智能卡被层层刮掉用电子显微镜拍照。这种技术可以完整地揭示出智能卡的硬件和软件部份。主要的问题就是，把所有的东西按正确的顺序放好以找出每一个部件是如何工作的。工程师们用打乱内存位置的方法隐藏密码和操作，例如busscrambling。有时甚至可以在智能卡运行的时候用探针直接测量电压，设计师则用感应器来检测和防止。破坏支付业务中使用的智能卡很困难，只有大芯片制造商使用那些专业的设备。况且，和其他安全机制例如阴影帐户相比，这种方法回报太低。
反向工程在军事上的应用
反向工程经常被用在军事上，用来复制从战场上由常规部队或情报活动获得的别国的技术、设备、信息或其零件。二战和冷战中经常被用到。二战以来的著名例子有：
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）。
相关法律
在美国及其他许多国家，制品或制法都受商业秘密保护，只要合理地取得制品或制法就可以对其进行反向工程。专利需要把你的发明公开发表，因此专利不需要反向工程就可进行研究。反向工程的一种动力就是确认竞争者的产品是否侵权专利或侵犯版权。
为了互用性（例如，支持未公开的文件格式或硬件外围），而对软件或硬件系统进行的反向工程被认为是合法的，虽然专利持有者经常反对并试图打压以任何目的对他们产品进行的反向工程。
为了获取一个有版权的计算机程序中隐含的思想和功能元素且有合法的理由要获取，当只有拆解这一种方法时，根据法律判定，拆解是对有版权作品的公平使用。[2]