云社区 博客 博客详情
云社区 博客 博客详情

逆向工程技术发展前景如何?它的原理,用途及法律边界

技术火炬手 发表于 2020-09-29 14:37:34 09-29 14:37
技术火炬手 发表于 2020-09-29 14:37:34 2020/09/29
1
1

【摘要】 逆向工程,是指对人造产品进行构造分解,以揭示其设计、结构或从产品中提取相关知识的过程。这项工作的性质类似于科学研究,区别是研究对象不同,科学研究的对象一般是自然现象。

【引言】

逆向工程,是指对人造产品进行构造分解,以揭示其设计、结构或从产品中提取相关知识的过程。这项工作的性质类似于科学研究,区别是研究对象不同,科学研究的对象一般是自然现象。

【常见领域】

逆向工程适用于机械工程、电子工程、软件工程、化学工程和系统生物学等领域。

【逆向工程技术的价值】

在某个领域进行逆向工程的原因有很多。

逆向工程技术最早起源于对那些具有商业优势或军事优势的硬件进行的分析。

逆向工程过程本身并不是为了复制或者改变产品本身。它只是一种分析过程,主要是为了推导某产品的设计思路,很少或根本不需要额外的了解原始生产过程中所涉及的工序。

即使逆向工程技术所研究的产品是竞争对手的产品,其目的也可能不是为了复制它们,而是为了分析竞争对手的产品,找出其中的优点和缺点。

逆向工程技术也可以用来创造出与现有产品可互动的产品。尽管美国和欧盟出台了的一些相对明确的立法支持这类工作,但是近二十多年来,为此目的而使用逆向工程技术的合法性在全世界的法院里一直存在激烈的争论。

软件逆向工程技术用途

软件逆向工程技术有助于提高对底层源码的理解,从而利于软件的维护和改进。通过提取相关的信息,也可以为软件开发提供决策依据。并且逆向工程以后产生的代码的图形化可以提供有关源码的另类视图,有助于发现和修复软件的bug或漏洞。

通常,随着一些软件产品的发展和版本的更迭,其设计信息往往会随着时间的推移而丢失,这些丢失的信息通常可以通过逆向工程技术来恢复。

有时候对于新团队来说,逆向工程技术可以帮助减少了解源代码所需的时间,从而降低了软件开发的整体成本。

逆向工程技术还可以用作代码检测器来检测和消除写到软件中的恶意代码。

逆向工程技术也可以用来寻找源码的保护控制,比如检测授权控制部分,或者剖析竞争对手的产品是如何构建的,这一过程通常用于 "破解"软件和媒体数据,以消除其复制保护,进一步的话可以创建一个副本甚至山寨版本,这通常是竞争对手或黑客的目标之一。

恶意软件开发者经常使用逆向工程技术来寻找操作系统或者软件系统中的漏洞,以构建可以利用系统漏洞进行攻击和破坏的计算机病毒。

逆向工程技术也被用于密码分析中,用来寻找密码替换方案、对称密钥算法或公钥密码学中的漏洞。

【软件逆向工程技术的定义和运作】

【软件逆向工程定义】

1990年,美国电气和电子工程师学会(IEEE)将逆向工程定义为 "分析一个主题系统,以确定系统的组成部分及其相互关系,并以另一种形式或更高的抽象重新建立系统的过程",其中 "主题系统 "是软件开发的最终产品。逆向工程只是一个检查分析的过程:不对所涉及的软件系统进行修改。

逆向工程可以从产品周期的任何阶段进行,而不一定是从功能上的最终产品进行。

【逆向工程有两个组成部分】

逆向工程有两个组成部分:重建文档和设计恢复。重建文档是指在计算机代码中建立新的表述方式,使之更容易理解。设计恢复是利用对产品的一般知识或个人经验进行推理,从而更充分的理解产品的功能,这部分也可以看成是 "开发周期回溯"

经过逆向工程以后,对照实施阶段的输出(源代码及文档)和逆向工程的输出(源代码及文档),进行分析,是对传统瀑布模型的一种反转。这种技术的另一个术语是程序理解。

【对逆向工程技术的探索和拓展】

逆向工程工作会议(WCRE)每年都会召开一次,对逆向工程技术进行探索和拓展。

计算机辅助软件工程(CASE)和自动生成代码在逆向工程领域做出了巨大的贡献。

软件防篡改技术被用来阻止对专有软件和软件驱动系统的逆向工程和重新设计。

【两种类型的软件逆向工程】

在实践中,主要出现了两种类型的逆向工程:

在第一种情况,软件的源码已经有了,但程序的更高层次的设计思路记录不全或有记录不再有效的, 通过逆向工程技术重新梳理。

在第二种情况,该软件没有源代码,任何为尝试找出该软件的可能的源代码的努力都被认为是逆向工程。

第二种情况是大多数人所熟悉的。

软件的逆向工程可以利用无尘室设计技术来避免版权侵犯。

【软件逆向工程的目的】

从相关的角度来说,软件工程中的黑盒测试与逆向工程有很多共同点。测试者通常拥有API,但他们的目标是通过从外部敲打淬炼产品,寻找bug和功能缺陷。

逆向工程的其他目的包括:安全审计、移除复制保护("破解")、规避消费类电子产品中经常出现的访问限制、定制嵌入式系统(如引擎管理系统)、内部维修或改装、在低成本 "残缺 "硬件(如某些显卡芯片组)上启用额外功能,有时候仅仅是为了满足好奇心。

【二进制软件逆向工程技术】

二进制逆向工程是在软件的源代码不可用的情况下进行的,这个过程有时被称为逆向代码工程。

软件的逆向工程在美国受到版权法中的公平使用例外条款的保护。

【逆向工程技术的典型案例】

下面来看一些业界逆向工程技术的典型案例:

JAD

l  Java平台的二进制文件的反编译为例,可以用Jad来完成。

JD-GUI:

JD-GUI

JD-Eclipse

JD-Eclipse

PC BIOS

l  一个著名的逆向工程案例是第一个非IBM实现的PC BIOS,它开创了历史性的IBM PC兼容产业,多年来一直在计算机硬件平台上拥有压倒性优势。

PC BIOS

Samba

l  Samba软件允许非微软Windows系统的操作系统与Windows系统共享文件,是软件逆向工程的一个典型例子,因为Samba项目必须对未公开的Windows文件共享信息进行逆向工程,以便非Windows计算机可以模仿已完成共享过程。

Samba

Wine

l  Wine项目为Windows API做了逆向工程。

Wine运行界面)

OpenOffice

l  OpenOffice.org也为微软Office文件格式做了逆向工程。

Open Office启动页面)

ReactOS

l  ReactOS项目的目标更为宏大,它提供与当前Windows操作系统的二进制(ABIAPI)兼容的NT分支,让Windows的软件和驱动可以在无尘室逆向设计的免费软件(GPL)上运行。 

ReactOS桌面示例)

WindowsSCOPE

l  WindowsSCOPE允许对Windows系统的实时内存的全部内容进行逆向工程,包括对所有运行中的进程进行二进制级别的图形化逆向工程。

WindowsScope

Mac OS

l  另一个经典的例子是1987Bell实验室对Mac OS系统4.1进行了逆向工程,该系统最初是在苹果公司的Macintosh SE上运行的,最后他们可以在自己的RISC机器上运行这套系统。

MacOS 4.x

软件的逆向工程方法

软件的逆向工程可以通过各种方法完成,主要有以下三类:

观察信息交换

l  通过观察信息交换进行分析,这在协议逆向工程中最为普遍,它涉及到使用总线分析仪和数据包嗅探器,例如,用于访问计算机总线或计算机网络连接并揭示其中的流量数据。然后,可以分析总线或网络行为,以创建可以模仿该行为的独立实现。这对于设备驱动程序的逆向工程特别有用。

有时,在嵌入式系统上的逆向工程可借助制造商提供的一些工具来进行,如JTAG端口或其他调试手段。

(引脚数减少的JTAG实例) 

Microsoft Windows中,像SoftICE这样的低级调试器很受欢迎。

SoftICE列出所有可调试的进程) 

反汇编

l  使用反汇编器进行反汇编,即借助于对程序的原始机器语言进行读取和理解。这对任何计算机程序都适用,但可能需要相当长的时间,特别是对于不习惯机器代码的人来说,可能会花费更长的时间。交互式反编译器(Interactive Disassembler)是一个特别受欢迎的工具。

(交互式反编译器演示) 

反编译 

l  使用反编译器进行反编译,这种方法试图使用某种高级语言对机器代码或字节码程序重新创建源代码的过程,具体结果和效果因使用场景的变化而各不相同。

反编译器的反编译过程是由一系列阶段组成的,每个阶段都对整个反编译过程的具体方面做出了贡献。

加载器

第一个反编译阶段是加载和解析输入机器代码或中间语言程序的二进制文件格式。它应该能够分析输入程序的基本情况,如体系结构(PentiumPowerPC等)和入口点。

发现程序入口是非常必要的,比如C语言程序的主函数,也就是用户编写的代码的运行起始点。

如果可以的话,还可以加载符号表和调试数据。前端可识别出所使用的库和库接口。

如果能确定编译器的话,可提供更多的有用信息。

分解

下一个逻辑阶段是将机器码指令拆解成机器独立的中间命令(IR)。例如,Pentium机器指令:

mov    eax, [ebx+0x04]

可能被翻译成IR

eax  := m[ebx+4];

术语

术语代码序列是指从指令的单独语义中无法立即看出其组合语义的代码序列。无论是作为反汇编阶段的一部分,还是作为后期分析的一部分,这些术语序列都需要翻译成已知的等效IR。例如,x86汇编代码:

    cdq    eax             ; edx 设置为sign-extension≠edi,edi +(tex)push

    xor    eaxedx

    sub    eaxedx

可翻译成:

eax  := abs(eax);

有些术语序列与机器无关,有些只涉及一条指令。例如,xor eaxeax清除eax寄存器(将其设为0)。这可以用一个独立于机器的简化规则来实现,如a=0

一般来说,如果可能的话,最好把术语序列的检测延迟到受指令排序影响较小的后期阶段。例如,编译器的指令调度阶段可能会在术语序列中插入其他指令,或者改变序列中指令的顺序。在反汇编阶段的模式匹配过程可能不会识别出被改变的模式。后期阶段会将指令表达式分组成更复杂的表达式,并将其修改成规范化的形式,这样,即使是被改变的术语也更有可能在后期的反编译中匹配到更高级别的模式。

识别子程序调用、异常处理和开关语句的编译器习惯用语尤其重要。有些语言还对字符串或长整数有广泛的支持。

程序分析

各种程序分析可以应用到IR中。特别是,表达式处理将多个指令的语义组合成更复杂的表达式。比如说:

    mov   eax,[ebx+0x04]

    add   eax,[ebx+0x08]

    sub   [ebx+0x0C],eax

 

表达式处理后,可能生成以下的IR

m[ebx+12]  := m[ebx+12] - (m[ebx+4] + m[ebx+8]);

这样得到的结果更像高级语言,也省去了机器寄存器eax的使用。后面的分析可去掉ebx寄存器。

【数据流分析】

我们必须用数据流分析法来追踪寄存器内容的定义和使用位置,对于临时数据和本地数据也应该使用相同的分析法。这样就可以为每一个关联值的定义和使用创建一个不同的名称。

也有可能在原始程序的不同部分中,同一个局部变量位置被多个变量使用。这说明源程序在此处存在问题。

更糟糕的是,数据流分析有可能会发现一个值位置可能会被用作不同用途。在这种情况下,需要将这个位置定义为类型的联合。

反编译器可允许用户显式地打破这种不自然的依赖关系,从而创建更清晰的代码。

当然,这也可能意味着一个变量在没有被初始化的情况下被使用,因此表明原程序中存在问题

【类型分析】

一个好的机器代码反编译器会进行类型分析, 在这里,寄存器或称内存位置的使用方式会对位置所对应的可能的类型进行限制。

比如,一个and指令意味着操作符是整数,

因为程序不会对浮点值或指针进行这样的操作,当然特殊情况除外。

一个add指令的结果有三个约束:

因为操作数可能都是整数,对应结果是整数;

也可能是一个整数和一个指针,对应的结果就指针;

当两个操作符的类型不同时,取决于两个操作符的优先级。

识别各种高级表达式的能力可以对结构或数组进行识别。

但是,客观上讲,由于机器代码甚至一些高级语言(如C语言)允许使用cast和指针运算,有时候很难区分。

上一节中的例子可能产生以下的高级代码:

struct T1 *ebx;

    struct T1 {

        int v0004;

        int v0008;

        int v000C;

    };

ebx->v000C -= ebx->v0004 + ebx->v0008;

【结构化】

这个反编译阶段涉及到将IR构造成更高层次的结构,如while循环和if/then/else条件语句。比如,下面的机器代码:

    xor eaxeax

l0002:

    or  ebxebx

    jge l0003

    add eax,[ebx]

    mov ebx,[ebx+0x4]

    jmp l0002

l0003:

    mov [0x10040000],eax

 

可翻译为:

 

eax = 0;

while (ebx < 0) {

    eax += ebx->v0000;

    ebx = ebx->v0004;

}

v10040000 = eax;

显然,非结构化代码比已经结构化的代码更难转化为结构化代码。解决的方案有代码复制,或者布尔变量添加。

【代码生成】

最后一个阶段是在反编译器的后端生成高级代码。一个编译器可能有几个后端用于生成不同体系结构的机器代码,同样的,反编译器也可能有几个后端用于生成不同高级语言的代码。

在代码生成之前,适当的可以允许对IR进行交互式编辑,这种编辑如果通过某种形式的图形用户界面就很方便。

在这个过程中,可以允许用户输入注释,改变非通用变量和函数名,

当然,这些工作可以在反编译完成后的代码编辑中轻松完成。

用户有可能想改变结构方面的内容,比如将while循环转换为for循环。有些源代码重构工具可以帮助用户修改这样的内容。

用户也可能需要输入在类型分析阶段未能被识别的信息,例如将内存的表达式修改为数组或结构的表达式。

最后的情况是,可能需要纠正或者修改一些不正确的IR,使输出的代码更易读。

【软件分类任务】

软件分类是识别不同软件产品二进制之间的相似性的过程(例如,同一个二进制程序的两个不同版本),用于检测软件样本之间的代码关系。这项任务用于漏洞检测和版权侵犯的补丁分析,如果存在大量的样本,可以在一定程度上自动完成这个过程。

这种方法主要用于长时间、比较彻底的逆向工程任务,比如对一个复杂算法或大型软件的完整分析。 一般来说,统计分类被认为是一个很难的问题,对于软件分类也是如此,目前没有非常有效的解决方案或者工具能够很好地处理这个任务。

【源代码】

一些 UML 工具把导入和分析源码以生成 UML 图的过程称为 "逆向工程"

尽管UML是提供 "逆向工程 "的一种方法,目前比较引人注目的是国际标准活动所推动的知识发现元模型(KDM)。这个标准提供了用于表示编程语言构造及其相互关系的本体抽象。

作为一个对象管理组标准(也即将成为ISO标准),随着工具和分析环境的开发,KDM已经开始在工业界占有一席之地,这些工具和分析环境可以提供源码、二进制和字节码的提取和分析。

在源码分析方面,KDM的颗粒化标准架构可以提取软件系统流(数据、控制和调用图)、架构和业务层知识(规则、术语、流程)。

该标准允许使用通用的数据格式(XML),使各层系统知识的关联性得以实现,以进行详细的分析(如根本原因、影响)或派生分析(如业务流程提取)。

由于编程语言数量众多,新的编程语言不断的涌现,该标准的具体实践也是一个不断发展的过程。该标准允许使用扩展来支持广泛的语言集和演变。

KDMUMLBPMNRDF和其他标准兼容,可以迁移到其他环境中,从而利用系统知识进行软件系统转换和企业业务层分析等工作

 

KDM示例)

其他逆向工程技术应用

 

l  接口对接。当一个系统需要与另一个系统对接时,可以使用逆向工程技术来研究两个系统如何进行协商。

l  军事或商业间谍活动。通过窃取或获取原型机并拆解,了解敌方或竞争对手的最新研究,从而开发出类似的产品或更好的反制措施。

l  过时性问题的应对策略。集成电路往往是在专有系统上设计的,在生产线上制造的集成电路在短短几年内就会过时。当使用这些部件的系统不能再维持时(因为这些部件已经过时了),唯一的办法就是将功能融入新技术中,对现有的芯片进行逆向工程,然后用较新的工具重新设计,把这个过程研究所得的成果作为指导进行推广。

另一个可以通过逆向工程来解决的过时问题是支持现有的、老旧的设备,这些设备可能非常老旧了,原始设备制造商早已不提供支持了。

l  产品安全分析。通过分析产品部件的规格和成本估算,研究产品的工作原理,识别潜在的专利侵权行为。

同样是产品安全分析的一部分,通过拆解和分析系统组件的设计来获取敏感数据。

另一个分析目标是消除复制保护,或者规避访问限制。

l  竞争性技术情报。了解自己的竞争对手实际在做什么,而不是听说他们在做什么。

l  省钱。省钱是逆向工程技术应用的重要驱动力。

l  再利用。老旧的产品或者技术可以通过逆向工程技术变废为宝。

【协议的逆向工程】

协议是描述消息格式和消息交换方式的规则集(即协议状态机)。因此,协议的逆向工程问题可以分为两个子问题:消息格式和状态机逆向工程。

消息格式逆向工程

传统上,消息格式的逆向工程是通过繁琐的手工过程来实现的,这涉及到分析协议程序如何处理消息。

最近的研究提出了一些自动的解决方案,通常情况下,这些自动的方法要么利用各种聚类分析将观察到的消息分组成群,要么模拟协议程序跟踪消息处理的过程。

状态机逆向工程

关于协议状态机的逆向工程的工作较少。一般来说,协议的状态机可以经过过程离线学习和在线学习两种方式来学习,前者是被动地观察通信,并试图建立接纳所有观察到的消息序列的最一般的状态机,后者是在线学习,可以交互式地生成探测序列的消息,并听取对这些探测序列的响应。

一般来说,小状态机的离线学习是已知的NP-complete,而在线学习可以在多项式时间内完成。

Comparetti等人证明了一种自动离线方法在此基础上,Cho等人提出了一种在线方法。

典型协议的其他组件,如加密和散列函数,也可以自动进行逆向工程。通常情况下,自动方法会追踪协议程序的执行情况,并尝试检测内存中持有未加密数据包的缓冲区。

【机器的逆向工程】

随着计算机辅助设计(CAD)的普及,逆向工程技术可以将现有的物理零件建立一个三维虚拟模型,用于三维CADCAMCAE或其他软件中。

逆向工程过程可以使用三维扫描技术如坐标测量机、激光扫描仪、结构化光数字化仪或工业CT扫描(计算机断层扫描)等来测量物理对象,然后将其重建为三维模型。

单纯的测量数据,通常以点云的形式表示,缺乏拓扑信息和设计意图。可以通过将点云转换为三角面网格来恢复拓扑信息。逆向工程的目的不仅仅局限于此,在适当的情况下,通过简单的分析面(平面、圆柱体等)以及可能的NURBS曲面来恢复设计意图,以生成一个有边界的CAD模型。通过创建或者恢复这样的模型,可以修改设计以满足新的需求,制定新的产品制造计划等。

混合建模是NURBS(非均匀有理基础曲线)和参数化建模一起实现时常用的术语。使用几何曲面和自由曲面的组合可以提供一种强大的三维建模方法。自由形状数据的区域可以与精确的几何曲面结合起来,创建一个混合模型。这方面的一个典型例子是圆筒盖的逆向工程,其中包括自由形状的铸造特征,如水夹克和高公差加工区域等。

逆向工程也被企业用来将现有的物理几何图形带入数字化的产品开发环境,对自己的产品进行数字化的3D记录,或者对竞争对手的产品进行评估。例如,用来分析产品的工作原理、功能、由哪些部件组成,估计成本,以及识别潜在的专利侵权等。

价值工程是与逆向工程相关,也被企业所使用。它涉及到对产品的去结构化及其分析,其目的是为了寻找降低成本的可能性。

【集成电路/智能卡的逆向工程】

逆向工程是一种侵入性的破坏性分析智能卡的形式。分析者使用化学药剂逐层蚀刻掉智能卡,然后用扫描电子显微镜(SEM)拍摄照片。通过这种技术,可以将智能卡的完整硬件和软件部分暴露出来。攻击者的主要挑战是将所有的东西都组排出正确的顺序,以找出其的工作原理。智能卡的制造者则试图通过混淆内存位置如总线扰乱等来方式隐藏按键和操作方式。

在某些情况下,甚至可以在智能卡还在工作的时候安装一个探头来测量电压。

智能卡的制造商采用传感器来检测和防止这种攻击,这种攻击并不常见,因为它需要投入大量的精力和特殊设备,一般只有大型芯片制造商才有可能进行这种分析攻击。

此外,这种攻击的回报率很低,因为经常采用其他安全技术,如影子账户等安全技术。目前还不能确定针对CHIP/PIN卡复制加密数据并进而破解PINS的攻击是否能提供一种具有成本效益的多因素认证攻击。

完整的逆向工程分5个主要步骤

完整的逆向工程分5个主要步骤进行:

1. 扫描电子显微镜拍摄图像

2.将图像拼接在一起因为每一层的图像都不可能被一次拍摄到。一个扫描电子显微镜需要扫过整个电路区域,拍摄几百张图像来覆盖整个图层。图像拼接需要将这几百张图片作为输入,然后输出一张完整图层的单张适当重叠的图片。

3. 接下来,需要对拼接后的图层进行对齐。这是因为样品在蚀刻后,不能每次都把样品放到相对于扫描电子显微镜的位置完全相同,缝合后的版本不会像在真实电路上一样,以正确的方式重叠。通常会选择三个对应的点,并在此基础上进行调整。

4. 为了提取电路结构,需要对对齐后的拼接图像进行分割。分段突出了重要的电路,并将其与纯色的背景和绝缘材料区分开来。

5. 将导线从一层到另一层进行追踪,并重建出包含电路所有信息的电路网表。

【军事应用的逆向工程】

逆向工程在战争中的使用非常广泛。

人们为了复制其他国家的技术、设备, 在正规战场中或者情报行动中经常使用逆向工程技术。

在第二次世界大战及其以后的著名例子包括:

杰里汽油罐

英军和美军注意到,德军有设计精良的汽油罐。他们对这些罐子进行了逆向工程仿制。这种仿制而成的罐子被人们俗称为 "杰里罐"

(杰里罐)

反坦克火箭筒

德国人在二战期间缴获了一门美式巴祖卡反坦克火箭筒,并将其逆向工程化,制造出了更大的反坦克火箭筒。

(巴祖卡反坦克火箭筒)

Tu-4战略轰炸机

1944年,3架美国B-29轰炸机在日本上空执行任务时,被迫降落在苏联境内。没有类似战略轰炸机的苏联人,决定仿制B-29轰炸机。三年内,他们研制出了近乎完美的Tu-4型轰炸机。

Tu-4

SCR-584雷达

二战后被苏联仿制。 其中的佼佼者有СЦР-584、Бинокль-Д。

SCR-584

V-2火箭

V-2火箭的技术文件及相关技术在战争结束后被西方盟军缴获。美方通过 "夹纸行动"Paperclip)集中力量进行逆向工程,最终研制出了PGM-11 "红石"火箭,苏联方面则利用缴获的德国工程师重写技术文件和设计计划,并根据缴获的硬件进行研制,从而制造出了R-1火箭。接着,战后苏联开始了R-7火箭的研制,并开始了太空竞赛。

V-2

 

 

K-13/R-3S导弹(北约报告名称为AA-2 Atoll

是苏联对AIM-9 "潜行者"导弹的逆向工程复制。

K-13

 

BGM-71 TOW导弹

19755月,伊朗与休斯导弹系统公司就共同生产TOWMaverick导弹的谈判因价格上的分歧而暂停,随后的1979年革命结束了所有的共同生产计划。伊朗后来成功地对该导弹进行了反导,目前正在生产自己的仿制版:"托普汉"导弹。

BGM-71 TOW

中国对西方和俄罗斯的硬件进行逆向工程:

从战机到导弹和HMMWV军用卡车等西方和俄罗斯的硬件进行了许多逆向工程研究实施,如米格-15(后来变成了歼-7)和苏-33(后来变成了歼-15)。最近对中国军事发展的更多分析指出,逆向工程对先进武器系统的研究存在一定的局限性。

(歼15

破解德国人发送的密码

在第二次世界大战期间,波兰和英国的密码学家研究了缴获的德国 "英格玛 "电文加密机,通过逆向工程发现了它的弱点,然后在被称为 "炸弹"的电子机械装置上模拟它们的操作,这些装置尝试了"英尼格玛"机器的所有可能的干扰器设置,以帮助破解德国人发送的密码信息。

(英尼格玛电文加密机)

无线电导航系统

同样是在第二次世界大战期间,英国科学家分析并破解了德国空军在夜间执行制导轰炸任务时使用的一系列日益精密的无线电导航系统。英国人对这套系统的反制措施非常有效,以至于在某些情况下,德国飞机在信号的引导下在英国空军基地降落,以为自己回到了德国本土。

(等速信号示意图)

【合法性】

与专利法的重叠

逆向工程主要是指在发明人没有明确说明其构造、使用或内部过程的情况下,对某一工艺或产品的操作分析。

专利项目本身不一定要经过逆向工程才能研究,因为专利发明人自己已经提供了详细的公开信息,从而获得了相关发明的法律保护。

很多情况下,根据一项或多项专利生产的产品,可以包括其他未申请的专利或者未公开的技术。

事实上,逆向工程的一个常见动机是确定竞争对手的产品是否包含专利侵权或版权侵权。

美国

在美国,即使是受商业秘密保护的人工制品或工艺,只要是合法获得的,对该人工制品或工艺进行逆向工程通常是合法的。

在美国,计算机软件的逆向工程往往既属于合同法中的违约行为,也属于其他相关法律的支持范畴。

大多数最终用户的许可协议都明确禁止逆向工程,而且美国法院裁定,如果存在这样的条款,就会凌驾于版权法之上,而版权法明确允许逆向工程。这里就存在一种有限的豁免,即允许以互用性目的共享和使用逆向工程技术。

欧盟

欧盟关于计算机程序的法律保护的第2009/24号指令,取代了早先(1991年)的指令,对欧盟的逆向工程进行了规范。

部分规范如下:

程序的合法拥有者被假定为拥有许可,可以创建任何必要的副本来使用该程序,并在其预期的目的范围内修改程序(例如,为纠正错误)。合法所有者也可以制作一个备份副本供其个人使用。如果有必要,也可以对程序进行反编译,以确保其与其他程序或设备一起运行,并且不得将反编译的结果用于任何其他目的, 所有这些应在不侵犯程序版权的情况下进行。

小结

本文对于逆向工程技术从常见领域,价值,用途,软件逆向工程的定义和运作原理,其他逆向工程技术的应用以及合法性等方面进行了总体的概括性研究。希望能够对今后的具体业务研究和开发有所裨益。

 

欢迎讨论。


登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 1
点赞
分享文章到微博
分享文章到朋友圈

评论 (1)


缘缘100

1楼2020-10-14 15:57:56
0/1000
评论

登录后可评论,请 登录注册

评论

您还没有评论的权限!

温馨提示

您确认删除评论吗?

确定
取消
温馨提示

您确认删除评论吗?

删除操作无法恢复,请谨慎操作。

确定
取消
温馨提示

您确认删除博客吗?

确定
取消

确认删除

您确认删除博客吗?

确认删除

您确认删除评论吗?

温馨提示

登录超时或用户已下线,请重新登录!!!

确定
取消