一种软件代码侵权检测方法与流程

文档序号:11729651阅读:505来源:国知局
一种软件代码侵权检测方法与流程

本发明涉及一种计算机数据处理技术,特别涉及一种软件代码的侵权检测方法。



背景技术:

软件代码的侵权检测具有比较重要的现实意义,可以帮助软件开发组织避免知识产权相关的法律风险。

软件开发组织的开发人员出于提高开发效率的目的,往往习惯于从既有的代码中复用一些代码。但是,这种行为有时是可行的,有时又是不可行的,是否可行取决于被复制的代码的许可证情况。特别是开源代码,许可证种类繁多,每种许可证的约束都不同,盲目的复用软件很可能给为企业带来严重的法律的风险。例如,如果某企业的开发人员不小心使用或者扩展了遵循gpl版权的代码,按照gpl的许可证规范,该企业所有和该代码相关的其他代码也都必须遵循gpl规范,面向公众全部公开,这可能给该企业造成不可挽回的损失。

由于软件开发人员为数众多,软件代码数量庞大,而开源软件的数量更是数不胜数,许可证情况有非常复杂,对各种侵权风险进行手工检查几乎是不可能的。因此,可以检测并报告潜在的软件侵权风险的方法和系统就显得非常必要。

现有的软件代码侵权检测方法都需要被检测方提供程序的原始代码。其中使用的技术有两类:基于属性统计的检测技术和基于结构度量的检测技术。基于属性的统计技术统计软件代码中的操作符、操作数等信息,然后计算他们的平均值、中位值、标准差等,然后对比待检测样本和样本库中的样本。由于是全局统计数据,这种检测方法缺陷较大,只有在软件代码和样本库中的代码几乎完全相似的情况下才能发现侵权,并不实用。基于结构度量的技术是代码重复检测方法的一个子集。其中包括了基于文本的方法、基于抽象语法树的方法、基于程序依赖图的方法等。这些方法的目标在于发现软件代码的重复,并不是专门为侵权检测设计的,所以也并未考虑和侵权检测有关的特征提取问题、样本库建立问题以及商业秘密保护问题。

在实践中,上述的本地侵权检测方法带来的主要局限源于如下两个方面的冲突:如果软件组织使用第三方服务,就必须提供待检测的源代码。这可能造成企业技术秘密泄露。如果软件组织决定自己按照上述本地侵权检测方法建立一个检测系统,则需要建立规模庞大的全局样本库,例如收集整个互联网级别的开源代码,成本巨大。



技术实现要素:

本发明是针对代码侵权检测需要大量样本、同时又需要保护软件组织的商业秘密问题所提出的一种检测方法。

本发明的技术方案为:一种软件代码的侵权检测方法,其特征在于:包括云端检测服务器和本地代理系统两部分,在两者之间传输和服务器端存储的都是代码的经变换的关键特征信息。其中,云端检测服务器负责管理用于侵权检测的代码特征样本库并依据侵权规则进行检测,本地代理系统负责提取软件代码的关键特征、上报信息到云端检测服务器以及对云端检测服务器下发的侵权信息进行本地化解读;

本地代理系统包含代码解析器,代码特征生成器以及本地映射表三个部分。其中,代码解析器负责解析被检测的代码,产生代码块信息;代码特征生成器负责产生和代码块唯一对应的代码特征信息,在实践中使用代码块标识符、位置信息、结构信息、和代码块散列信息定义该特征;本地映射表维护上传到云端服务器的代码和本地原始代码之间的对应关系,当云端服务器传回和代码块标识符对应的侵权信息时,在本地解析为可以阅读的代码侵权信息;

云端服务器包含代码解析器、代码特征生成器、全局特征信息表以及侵权检测引擎四个部分。其中代码解析器和代码特征生成器和本地代理系统的功能相同。全局特征信息表存储了用于检测的代码样本库的特征信息。侵权检测引擎对比全局特征信息表和本地代理上传的代码块信息判断代码块侵权特征,如果发现特征匹配,就将其标记为侵权,然后将此信息发送给本地代理系统,交由本地代理系统进行解析和报告。

所述的该代码侵权检测方法,具体检测步骤包括:

步骤一,构建全局特征信息表:获取代码样本库,云端检测服务器依次读取样本库的源代码文件,然后按照语法树的形式,将每个代码文件解析成一组树形结构的代码块,并将代码块信息记录到全局特征信息表中。每个代码块都记录代码块的位置信息、结构信息、以及代码块散列信息。在实践中,代码解析可以使用抽象语法树解析器完成。位置信息可使用如下信息联合进行描述:所属项目、文件名、起始位置、终止位置信息。结构信息可使用本代码块和父代码块的关联关系描述。代码块散列特征信息可使用对代码进行归一化后对应的文本的散列值描述;

步骤二,提取本地代码特征:本地代理系统读入待检测的源代码,使用和云端检测服务器相同的特征信息提取方法,分解源代码为代码块,并提取代码块的位置信息、结构信息和代码块散列特征信息,进入步骤三;

步骤三,建立本地映射表:本地代理系统为步骤二中获取的每个代码块分配本地唯一的标识符,建立该标识符和代码块对应的原始代码的关联关系,用于后续步骤七。然后进入步骤四;

步骤四,发送检测请求:本地代理系统将步骤二获取的本地代码特征信息以及代码块的标识符一起上传到云端检测服务器,请求云端检测服务器进行侵权检测;

步骤五,云端检测服务器接收本地代理系统传来的代码块信息,并将该代码块信息和全局特征信息表按照侵权规则进行比对。在实践中,侵权规则可基于散列值重复、或代码结构对应的散列值重复的统计情况进行定义。如果上传的待检测代码的特征信息和全局特征库中的特征信息按照侵权规则属于侵权,则记录该信息。待所有代码块检测完成后,进入步骤六;

步骤六,云端检测服务器将标记为侵权的代码块的标识符下发到本地代理系统;

步骤七,本地代理系统接收云端检测服务器传回的侵权代码块信息,使用本地映射表还原成本地可见的代码,进行显示、通知所需的处理动作。

发明作用与效果:

本发明的有益效果在于:本发明所述的软件代码侵权检测方法,无需提供待检测的代码的原始形式,保护商业秘密;扩大了软件代码侵权检测的样本库的范围,甚至可以达到整个互联网级别的检测能力。

附图说明

图1为本发明所述的软件代码侵权检测方法的结构说明;

图2为本发明所述的软件代码侵权检测方法的步骤说明;

图3为本发明的实施例之全局特征信息库的一个示例片段;

图4为本发明的实施例之本地代理的代码块解析结果;

图5为本发明的实施例之本地代理的代码特征信息;

具体实施方式

为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,以下实施例结合附图对本发明的软件代码侵权检测方法的原理步骤、使用效果作具体阐述。

本实施例包括云端检测服务器和本地代理系统两部分。

云端检测服务器负责管理用于侵权检测的代码特征样本库并依据侵权规则进行检测。云端服务器包括代码解析器、代码特征生成器、全局特征信息表以及侵权检测引擎四个部分。

本地代理系统负责提取软件代码的特征信息、上报信息到云端检测服务器以及对云端检测服务器下发的侵权信息进行本地化的解读。本地代理系统包含代码解析器,代码特征生成器以及本地映射表三个部分。其中代码解析器,代码特征生成器的功能和实现方法和云端检测服务器对应部分完全一致。

步骤s1,构建全局特征信息表。本实施例基于互联网级别的开源软件代码库对全局特征信息表进行构建。首先获取开源代码库的代码文件,然后将所述代码文件依次进行如下处理:

代码结构解析:通过抽象语法树将程序源代码解析为代码块结构,然后将代码块作为后续分析检测的基本单元,然后分别提取其位置信息和结构信息。定义解析后的代码块的位置信息为一个五元组:(segmentid,fileid,startline,endline,sequence)。其中segmentid是全局唯一的一个标识符,每个标识符标识一个代码块。fileid定义了该代码块所在的文件位置,也同样使用全局唯一标识符表示。startline为代码块在文件中的起始行。endline为代码块在文件中的终止行。sequence为同属于一个父结点的代码块的顺序。定义解析后的代码块的结构信息为一个二元组:(segmentid,parentsegmentid)。其中segmentid和前述定义相同,parentsegmentid为代码块父结点的标识符,用于找出父结点;

代码块散列特征提取:本实施例的代码散列特征提取包括归一化和哈希值计算两个步骤。归一化包括移除空格、用一致的符号替换变量名和数字两个步骤,消除由于代码格式、变量名等因素的不同对检测效果的影响。然后,在归一化的代码上使用md5哈希算法,为每个结点生成一个128位的哈希值。图3为通过以上步骤获取的全局特征信息表的一个片段,包括项目信息、许可证信息、位置信息、结构信息和散列特征信息;

步骤s2,提取本地代码特征。本地代理系统读入待检测的源代码,使用和云端检测服务器相同的特征信息提取方法,分解源代码为代码块,并提取代码块的位置信息、结构信息和指纹特征信息。本步骤的方法和步骤s1完全相同。图4为一个文件通过源代码解析器后获得的代码块解析结果,使用树形结构表示。图5为通过本步骤获得的待检测代码的代码块的位置信息、结构信息和散列特征信息;

步骤s3,建立本地映射表。本地代理系统使用步骤s2中获取的每个代码块标识符,建立该标识符和代码块对应的原始代码的关联关系,包括原来所在文件的文件名及位置信息;

步骤s4,发送检测请求:本地代理系统将步骤s2获取的本地代码特征信息以及代码块的标识符一起,构成一个代码块特征信息序列,一起上传到云端检测服务器,请求云端检测服务器进行侵权检测。上传的代码块信息不包含任何原始代码信息;

步骤s5,云端检测服务器接收本地代理系统传来的代码块信息,并将该代码块信息和全局特征信息表按照侵权规则进行比对。本实施例采取两种侵权检测规则进行侵权检测:

规则一:对比代码块的散列特征,并综合代码块行数及统计信息:如果代码块散列特征完全重复且代码块行数超过10行且该散列特征在样本库项目中出现频率低于3次,则判定为侵权。在图3和图5表示的特征数据中,加粗的行的散列特征值相同,故检测引擎会判定待检测代码的编号为122文件的n3-n5为侵权代码。本检测结果说明,虽然检测引擎能够准确地判定侵权,但整个检测过程所依赖的任何数据都不包含原始代码的有意义的涉及商业秘密的信息;

规则二:对比代码块的散列特征,并综合父结点代码块的区域统计信息。如果同一父结点下的具有和样本库中具有重复散列值的代码块的数量比例超过一定阈值,在本实施例中定义为50%,则判定为侵权。在本例中未发现符合上述侵权特征的代码块,则不予报告;

在实际实施中并不限于上述两种侵权检测规则,而可以综合使用代码块的位置信息、结构信息和散列特征对检测规则进行扩充;

步骤s6,云端检测服务器将标记为侵权的代码块的标识符,在本实施例中为122文件的n3-n5代码块,下发到本地代理系统;

步骤s7,本地代理系统接收云端检测服务器传回的侵权代码块信息,使用本地映射表还原成本地可见的代码,进行显示。

实施例的作用和有益效果

根据本实施例所提供的软件代码侵权检测方法,可实现基于云端服务的侵权检测系统,其优势在于:在云端服务器和本地代理系统之间传输的是经过变换的代码散列特征,从中无法恢复代码的原始形式。该代码散列特征能够完全支持各种侵权检测规则,对检测效果没有影响。因此,不同的软件开发组织能够共享同一检测系统,同时又无需提供本组织的代码的原始形式。既保护了软件组织的商业秘密,又保证了软件代码侵权检测的样本库的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1