话说exe可执行文件,可以通过反编译的方式获得对应的源代码吗?

35 阅读5分钟

这个还得取决于可执行文件用的具体编程语言以及是否对目标程序采取混淆或加密等手段?只能说没有加密的,java语言的更接近源代码,C系的基本不太可能?

以下从法律角度分析,为什么要对目标程序进行防反编译保护?

如果出现法律诉讼,目标程序可以被反编译,那么对方取证就容易的多。因为实践中很多原告通过反编译的方式获得代码,可以作为初步证据提交法院,证明存在相似,以此倒逼对方提交源代码。

一、原因

作为原告,在大多情况下,你都无法获得对方的源代码,所以无法证明“相似”。但通过反编译对方的目标程序(如在公开渠道----应用市场获得的Apk文件),如果可以获得反编译代码

,则可以与自己的源代码或者对源代码进行编译后获得的代码,进行比对,如存在相似的代码段、函数等,可以作为初步证据提交法院,证明两者存在相似。

二、前提

对方的目标程序没有进行混淆或者加密。如果没有相关的加密措施,对于java语言编写的程序,反编译基本能获得与源代码差不了太多的代码,但对于C语言/C++等编写的程序,即使没有加密,反编译后的代码差距还是比较大,所以说只是初步证据。

三、“相似”并不是认定侵权的唯一条件

计算机软件侵权判定原则

1、接触+实质性相似-合理解释

(1)接触

被控侵权人

有机会接触涉案计算机软件,如曾经的合作伙伴、曾为涉案软件开发人员后离职等;

(2)实质性相似

一是源代码的相似程度,包括编程语言、开发环境、系统设计、组织结构、变量、函数、数据结构等;二是软件功能的相似程度,但实现相同的功能并不能反推出源代码一定相同,因为用C语言编写的程序可能与用JAVA编写的程序实现的功能相同,但由于编程语言不同,源代码实质性相似的可能性非常小。

(3)合理解释

如果被控侵权人对源代码相似作出合理解释,如合法来源、反向工程等,则存在排除被控侵权人构成侵权的可能性。

2、抽象→过滤→比较

在判断源代码是否构成实质性相似时,通常采用的为“抽象→过滤→比较”三步判断法:

(1)抽象

将被控侵权源代码与权利人源代码

中属于“思想”的部分,从“表达”中剥离,如开发软件所用的思想,这部分不受著作权的保护。为此,可以将软件程序分解为由低到高的金字塔形状,金字塔底端大多属于软件源程序的表达,随着高度的上升,越来越多的“思想”被挤压出来,最后在金字塔顶端部分基本属于不受保护的思想。

(2)过滤

a.过滤掉“唯一或表达有限”部分。所谓唯一或表达有限,是指如基于某些编程规范的限制,相关编程人员可选择的编程方式唯一或者只有有限的编程方式,则这种情况就属于唯一或表达有限。

b.过滤掉“公有领域”部分。所谓公有领域,是指任何人均不能对其主张著作权,如开源代码、已过了著作权保护期限

的软件源代码等,都属于已进入公有领域,任何人可以自由使用,不受著作权法

的规制。

(3)比较

将被控侵权

源代码与权利人源代码经过抽象和过滤后,将两者剩余部分进行比较,判断最终是否构成实质性相似。

附部分源代码比对工具软件:

1、Beyond Compare

2、Diffuse

3、WinMerge

4、Code Compare

5、AptDiff

四、其他证明“相似”的方法

1、对方软件目标代码存在你方软件的特有内容

比如有你的公司名称,有你的软件名称,有你的程序员姓名等,或者拼写错误等缺陷信息,冗余设计

完全一致等,都可以作为相似的辅助手段。但前提还是你得能对对方的目标程序进行反编译。

2、对方软件运行结果与你方相似

如果对方软件的运行结果(包括软件界面、运行参数、数据库结构

)等方面,与你方软件运行结果相同或者实质性相似,也可以证明软件相似。

五、附:相关法律规定

根据我国《著作权法》及《计算机软件保护条例》,计算机软件著作权保护客体为:计算机程序及有关文档。其中计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。文档,是指用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法的文字资料和图表等,如程序设计说明书、流程图、用户手册等。但是,

计算机软件著作权的保护不延及开发软件所用的思想、处理过程、操作方法或者数学概念等。