软件源代码的同一性司法鉴定比对技术及技巧总结

2024
08-23 16:23

(部分咨询收费)
直线:139 2652 7105
咨询:0755-2500 0007
邮件:zhenjie@ipcoo.com
地址:深圳市南山区粤海街道软件产业基地5栋C座1002A

计算机软件源代码同一性鉴定对比,软件源代码司法鉴定对比
 
涉及软件知识产权司法鉴定均表述为软件同一性鉴定,同时也是针对软件源代码的同一性鉴定,所作的工作主要集中于比对源代码。通过对比工作来确定鉴定双方是否存在相同或相近视,以确认是否存在软件侵权行为;为此,有力的计算机软件同一性司法鉴定报告对软件侵权案件的重要意义不言而喻。那么我们应该如何更好的进行软件同一性鉴定呢?为此,我们总结我们做过的两起案件来说明鉴定中的技术和技巧问题。

软件源代码的同一性鉴定

1、关于“同一性”、“实质相似”,以及“相似性”的表述问题

关于软件的“同一性”、“实质相似”,以及“相似性”的表述问题,我们认为“同一性”与“实质相似”的内涵基本上是相同的,“同一性”所表达的程度较“实质相似”更高一些,但是在两套代码中多少比例的代码是相同或相似,进而将两套代码认定为具有“同一性”或“实质相似”,业界并没有统一的标准,笔者认为对于具体情况,应该有一个弹性标准。

比如两套软件中实现核心功能的代码量所占总代码量的比例并不大,除了核心代码外,还存在与前端界面相关的大量代码,在核心代码基本相同的前提下,由于核心代码量占总代码量的比例不高,也不能轻易认定两套代码不具有同一性或实质相似性的结论。如果在委托过程中,进一步明确要求鉴定的代码的具体范围,一定程度上可以解决这个问题,但是这个范围往往不是太好确定。“相似性”是较“同一性”和“实质相似”更上位的一个概念,三者之间都是对结果状况的一种描述,笔者认为在没有对其进行充分详细界定的前提下,具体使用哪一种表述区别不是太大,但是无论用哪一种表述,其背后的客观事实——相同或相似代码所占总代码的比例,都是相同的,这也是鉴定真正要发掘和反映的客观事实。

2、软件同一性鉴定的依据和鉴定原则


对于软件同一性鉴定,主要依据的法律、法规包括:
1)《计算机软件保护条例》200211日起施行;
2)《北京市高级人民法院关于审理计算机软件著作权纠纷案件几个问题的意见》1995621日。

其中,《计算机软件保护条例》第二条规定,“本条例所称计算机软件(以下简称软件),是指计算机程序及其有关文档。”该条例第三条第二款规定,“计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。”
依据上述规定,比对两个软件是否具有同一性,应遵循以下原则:

1) 比对二者的目标程序二进制代码、源程序代码和有关文档是否构成相同或实质性相似。
2)若二者比对项的相应内容完全相同,则二者的比对项具有同一性。
3)若二者比对项的相应内容不完全相同,但比对项的必要部分、或主要部分没有本质区别,属于实质性相似,则二者的比对项仍具有同一性。
4)若二者比对项的相应内容不完全相同,且具有本质区别,不构成实质性相似,则二者的比对项不具有同一性。
5)若二者比对项的相应内容完全不同,则二者的比对项不具有同一性。
6)一般情况下,当二者的目标程序二进制代码构成相同或实质性相似,则二者的目标程序具有同一性;当二者的源程序代码构成相同或实质性相似,则二者的源程序具有同一性;当二者的目标程序或源程序具有同一性,则比对的两个软件具有同一性。

3、源代码比对的几种方式


1)使用文本比对工具

无论使用什么语言开发的源代码,均可以视为文本文件,进而对其中的内容进行比对。UltraCompareUltraEdit是两款常用的文本比对工具。笔者在工作过程中常使用的一款文本比对软件是Beyond CompareBeyond Compare是一套由Scooter Software推出的软件,主要用于比较用途。Beyond Compare可以比较的内容有以下这三种:1.电脑上两个目录的内容;2.电脑上的目录和FTP地址的内容;3.两个文本档案的内容(包括 UTF-8htmlDelphi源程序等文本档案)。

2使用DOS中的FcCOMP命令

FcCOMPDOS中的两个命令,其中,FC命令只进行二进制文件和ASCⅡ文件的比较。
Fc的语法为:fc [/a] [/b] [/c] [/l] [/lbn] [/n] [/t] [/u] [/w] [/nnnn] [drive1:][path1]filename1 [drive2:][path2]filename2
FC e:\1.txt 2.txt>3.txt 意思是比较e盘根目录下的1.txt2.txt中文本的不同之处,比输出到3.txt里。
COMP的语法为:COMP [FILE1][FILE2][/D][/A][/L][/N:number][/C]
对于一些完全copy的软件,无论源代码还是目标代码,均完全相同的情况,使用FcCOMP命令比较有意义,尤其是对于一些只有目标代码而无源代码的情况,但是如果源代码或目标代码差异比较大,使用这两个简单命令无法达到细致的比对目的。

3)使用sdiff命令编制shell脚本进行比对

sdiff使用LCS(最长公共字符串)算法,主要用于版本合并的目的,本不是用来进行文本比对的。使用LCS算法进行文本比对时,相同行的标准是文本行的内容(空格除外)和格式完全一致,文本行的前后顺序需要完全一致。如果一个文本行完全相同,但中间有其他的文本插入或删除,或行的位置发生了移动,都可能导致LCS将文本行标识为差异。一般情况下,会导致比对结果较实际的文本相似度低出较多,此外,sdiff还存在其他的较多局限,表现在:
①LCS算法以最长公共字符串为优先识别目标,搜索到LCS后,在此搜索过程中的其他公共字符串将被标识为差异;
无法识别文本行前后位置调换的情况;
变量名告便,代码语法的轻微调整等任何细小变化,sdiff都将识别为完全不同的文本;
使用如:-bsdiff的一个参数,它的作用是忽略空行差异)这样的选项会使得比对更有效一些,但会产生较小的统计差异。
鉴于此,使用sdiff编写shell脚本,对其比对的结果进行人工或辅以比对软件对sdiff不能比对的情形进行人工比对和识别,从而提高比对的精度。

在代码比对过程中,为了进一步提高比对精确度,可以将删除代码中的空行和注释行。剔除空行和注释行后进行比较的意义在于,在源代码中往往存在着大量的空行和注释行,由于空行和注释行均不是实现功能的源代码,与程序功能的实现无关,将其剔除后只对实现程序功能的源代码进行比对,能从另一个角度客观反映检材本身的情况。
在上述脚本中加入一些正则表达式,就可以达到删除注释和空格文本的目的。

软件源代码司法鉴定比对技巧

笔者在从事软件知识产权司法鉴定过程中,主要工作是围绕源代码进行比对,但是除此之外,根据实践中碰到的一些问题和笔者个人的一些思考,将所认为的在鉴定过程中可以/需要考虑一些问题简述如下:

1)源代码的表现形式

对于源代码,不仅仅只有一种表现形式,随着软件工程和IDEIntegrated Development Environment,集成开发环境),在现实中至少存在着开发者直接开发的源代码和版本控制器用于控制版本的源代码形式。对于java源代码来说,就存在着.Java文件与.Java-svn-base文件的形式。

一般来说,.java文件是开发者开发的源代码,.java文件在所需要的Java类库和配置文件的配合下实现软件的功能。第三方的类库属于第三方的工作成果,因此不应予以考虑;对于内部类库应予以考虑。关于配置文件,一方面其数量很少,另一方面,由于各方开发测试的环境不一样,进行统计和比对没有意义。
.java.svn-base文件(保存在Java文件所在目录下的.svn/text-base/目录下)是由版本控制系统生成的文件,其保存从版本服务器上检出的Java源代码原本。此外,SVN工具还会在本地建立其它svn控制文件,如:.svn/prop-base/*.java.svn-base.svn/text-base/*.java.svn-work等,SVN工具使用控制文件对本地版本和服务器版本进行比较和更新维护。对于.java.svn-base文件,一方面,.java.svn-base文件本身是源代码的一种表现方式,记录了与版本服务器最近一次同步更新后的源代码状态;另一方面,将.java.svn-base文件与开发者的本地机器上的.java文件作对比,能够体现出开发者针对.java.svn-base原本文件所作的修改。如:
D:/SRC/ORG/TOOLS/mytools.javaD:/SRC/ORG/TOOLS/.svn/text-base/mytools.java.svn-base是对应的,前者为本地修改后的副本,后者为从版本服务器上检出的副本。
如果检材中存在着.java文件和.java.svn-base文件,为了全面反映检测的情况,更客观地出具鉴定意见,应该均予以考虑。

2)源代码文件的时间戳

时间戳是指文件属性中的创建、修改和访问时间。由于时间戳能够较容易地被篡改,而篡改后在文件中并不留下直接的痕迹,因此时间戳信息仅可以反映检材中的文件的当前的时间信息。

3)源代码中的签名信息

在编写源代码的过程中,开发者在源代码中往往标记一些反映开发过程中的涉及个人或/和开发过程的状况的信息,一般称为签名信息,比如指向具体开发者的姓名、邮箱、公司、编写日期等。一般来说,签名信息是有含义的信息,具有唯一性。
敏感词往往是一些与时间、人物和公司/厂家名称相关的词,是特定于某一环境的专属信息,一般不会巧合。在两个文本中,一旦发现大量的相同或类似的敏感词,可以证明两个文本之间具有一定的相关性。

4)源代码中的注释信息

注释是对源代码功能实现、开发记录等相关内容的一些文字描述。在源代码中,注释往往包含程序功能描述、开发者签名、版本和修改记录等信息。注释本身不构成程序的功能、逻辑和控制,一般来说,也没有特定的格式和内容约束,因此,注释往往包含了大量的个性化信息。另外,一些开发者也习惯将一些之前版本中不用的源代码注释掉,以备查看和比较。注释检测的目的是反映检材的各个版本之间注释信息的情况。另外,由于有些类型代码的可执行文件(如java代码的.class)可以被容易反编译,源代码之间的注释比对还可以从一个角度反映源文件是否是反编译的结果,为相应的司法裁量提供依据。

5)源代码中的字符串信息

固定字符串是程序代码中的常量数据,常用于输入输出的显示信息、文件和数据的固定内容等。一般来说,固定字符串与开发者的语言水平和用词用语习惯有密切关联。比如java中大量存在的print(“字符串”)语句中的字符串,如果两套代码中所打印出的一行或两行字符串相同无可厚非,但是若存在大量相同的打印输出字符串,两套代码很可能系同一开发者所为或其中一套大量剽窃了另外一套。

6)待比对文件对的确定

在实践过程中,检材中的代码常常存在拆分、组合,以及重新划分等现象,在代码比对过程中,如果仅仅文件名相同的文件组成待比对文件对,而将文件名不同但是其中存在大量相同或相似代码块的文件均忽略,则有失客观,可以通过人工,寻找文件名称相似/相近、名称含义相似/相近、或命名规则雷同的文件,若存在相似性,使用文本比对工具比对文件,如果有相当数量的相同代码行,则组成文件对。

7)类库文件中文件与源代码

类库为应用软件系统提供运行支撑环境、公共功能、整体框架、以及有效继承前人已经完成的工作。类库通常分为第三方类库和内部类库,前者为由外部公司或组织提供的类库。后者为一家公司内部自主开发的类库。通常情况是,在开发软件时,对一些公共的功能和程序,开发者将一些已经固化的公共程序和公共功能编译为类库供多个项目或者部门使用,也有利于知识积累、继承和版本控制。

java程序为例,.jar文件是java中类库的表现形式,其实际上是Java源代码编译后的Java二进制代码(.class文件)的打包和压缩文件,可以使用常用的WinZip或者WinRar工具打开。通常情况下,.class文件可以轻易地被反编译工具还原为可读性很高的Java源代码,Java源代码也可以很容易地被编译打包后以.jar文件的形式提供。对于java的同一代码,至少有三种表现形式,.class.java.Java-svn-base。由于编译器的实现机制不同以及格式差异,反编译后的.java源代码与.class对应的原始.java源代码之间会存在差异,如果.class反编译后的.java与某些.java的相似度极高,基本可以确定这些.java文件与.class文件对应的原始.java源代码是一致或者高度相似的。
因此,笔者认为,对于所涉及的非第三方代码(诉讼中鉴定申请人自主开发或对方当事人自主开发的),在检材中如果出现同一代码的不同表现形式,即使其存在于类库中,为保证比对范围的公正,也应该将其纳入考虑范围。

8)其它

除软件源代码比对,以及上述所可以/需要考虑的问题之外,对于软件的功能、体系结构、调用流程等等也可以作为辅助的考虑角度。



相信通过这篇技术性的软件源代码司法鉴定技术及技巧的说明,笔者可以更好的理解在针对软件比对司法鉴定时需要掌握和理解的技术手段及技巧,同时,如果您有鉴定需求,也欢迎您直接来电咨询我们,我们拥有大量的鉴定代理经验,更能有效的实现你的诉求;

--the end--
推荐阅读

保护了源代码不等于保护了技术信息...

保护了源代码不等于保护了技术信息要点先读1、技术秘密的本质在于技术信息,价值在于能够指导软件开发,提高稳定性和效率,而非直接复制使用。2、流程、逻辑......

全流程服务

我们用八年经验积累服务每一位朋友

软件著作权侵权证据调查

侵权证据调查
固定民事侵权\刑事立案证据

软件源代码司法鉴定

司法鉴定
预鉴定提高鉴定精准度

侵犯计算机软件著作权罪公安报案立案

侵犯著作权罪公安立案
通过公安立案严厉打击刑事犯罪

网站主页
咨询我们