基于最小分支路径函数胎记的软件局部抄袭证据生成方法技术

技术编号:17812523 阅读:26 留言:0更新日期:2018-04-28 05:23
本发明专利技术公开一种基于最小分支路径函数胎记的软件局部抄袭证据生成方法,通过对程序进行逆向分析,提取出程序的静态信息;基于函数的控制流图、基本块、指令序列等,提取基于最小分支路径的函数胎记,以表征函数的行为特征;计算函数胎记之间的相似度,从而得到函数之间的相似性;基于函数间的相似度,结合函数调用图,构建出最优相似子图集,将其作为程序间局部抄袭的判断依据和有力的抄袭证据,为真实的软件侵权案件提供初步证据。

【技术实现步骤摘要】
基于最小分支路径函数胎记的软件局部抄袭证据生成方法
本专利技术涉及程序特征发现及软件抄袭检测领域,特别涉及一种软件局部抄袭证据生成的方法。
技术介绍
随着计算机软件产业迅速发展,软件的安全问题得到了越来越多的研究人员、教育人员及软件企业的重视。而开源软件的出现,更是将软件抄袭问题推到了风头浪尖。近年来,各类软件侵权案件时有发生,Verizon、eBay、Apple等公司都曾卷入相关案件当中。为了对抗软件抄袭,保护软件知识产权,国内外的研究人员提出了大量的软件抄袭检测技术。以应用场景和技术手段作为基准,可将现有的软件抄袭检测技术归为三类:源码抄袭检测技术,基于软件水印的抄袭检测技术,以及基于软件胎记的抄袭检测技术。但是,目前的软件抄袭检测技术存在一系列的局限性:1)目前大部分具有权威性的软件抄袭检测方法是针对源代码的,而在现实中,软件所有者通常是以二进制文件的形式发布软件,软件源代码在未取得一定的证据之前是很难获取;2)抄袭者为了躲避软件抄袭检测,通常使用成熟、强力的代码混淆技术和工具,使得抄袭程序与原程序在表面上呈现很大的不同,使得一部分软件抄袭检测方法失效;3)相较于整体抄袭,局部抄袭更为普遍,一方面是因为局部抄袭更容易符合抄袭者的要求,更加灵活,另一方面也因为使得计算出的软件与原版本之间的整体相似度较低,从而导致许多整体检测方法失效。4)现有的抄袭检测都只是提供一个简单的结果,没有具体且有力的抄袭证据作为佐证。
技术实现思路
本专利技术的目的在于提出一种基于最小分支路径函数胎记的软件局部抄袭证据生成方法,以应对当前的软件抄袭检测的需要。本专利技术通过对程序进行逆向分析,提取出程序的静态信息;基于函数的控制流图、基本块、指令序列等,提取基于最小分支路径的函数胎记,以表征函数的行为特征;计算函数胎记之间的相似度,从而得到函数之间的相似性;基于函数间的相似度,结合函数调用图,构建出最优相似子图集,将其作为程序间局部抄袭的判断依据和有力的抄袭证据,为真实的软件侵权案件提供初步证据。为了实现上述目的,本专利技术采用以下技术方案:基于最小分支路径函数胎记的软件局部抄袭证据生成方法,包括如下步骤:步骤S101:基于反汇编技术,对原告程序P及被告程序Q对应的可执行二进制文件进行反汇编,记录并分析生成的汇编代码,对于其包含的静态信息进行预处理并以数据表的形式存储;步骤S102:基于程序的函数内静态控制流图,将一个分支的起始基本块到下一个分支的起始基本块之间的基本块所包含的指令序列作为函数的一条最小分支路径,一个函数Fid的函数胎记FBid是其所有最小分支路径构成的集合PATH={pathid,i|i=0,1,…n},提取原告程序P与被告程序Q内所有函数对应的函数胎记PB={FBi|i=0,1,…,m1}以及QB={FBj'|j=0,1,…,m2};n为函数胎记FBid的所有最小分支路径的个数,m1和m2分别为原告程序P与被告程序Q中所有函数胎记的个数;步骤S103:基于原告程序P内的所有函数胎记,计算其对于被告程序Q内的所有函数的函数胎记相似度SIM(FBi,FBj'),FBi∈PB&&FBj'∈QB;步骤S104:基于函数间的相似度以及函数间调用图,发现相似子图集,构建最优相似子图集;步骤S105:基于最优相似子图集,进行抄袭判定,如存在抄袭,生成抄袭证据。根据最优相似子图集的规模大小,并与原程序规模作比较从而判断程序是否存在抄袭,而生成的最优相似子图集则可作为被告程序Q抄袭原告程序P的抄袭证据。如果存在抄袭,将步骤S104获得的最优相似子图集输出作为抄袭证据。进一步的,所述步骤S101具体为使用逆向分析工具来撤除编译和汇编过程,输入为机器语言,输出结果为汇编语言;对原告及被告程序P,Q对应的二进制可执行文件进行反汇编,对反汇编后输出的汇编代码进行分析,对程序包含的静态信息进行预处理,删除库函数以及过小的函数,得到有效的函数信息,以数据表的形式记录存储,存储方式如下表所示;表名表结构Functionsaddress#name#typeBasicBlocksid#parent_function#adressBasicBlocks_Instructionsbasicblock_id#instruction_addressInstructionsaddress#mnemonicOperandsaddress#expression_tree_idExpression_Tree_Nodesexpression_tree_id#expression_node_idExpression_Nodesid#type#symbol#immediate#parent_idControl_Flow_Graphsid#parent_function#source#destinationCallgraphid#source#destination所述静态信息具体包括:基本块,函数,指令,助记符,操作数,函数内静态控制流图以及函数间调用图;所述过小的函数为指令数小于3的函数。进一步的,步骤S102中基于最小分支路径的函数胎记FBid即最小分支路径集合PATH的提取方法是基于函数的静态控制流图,对函数内的每一个基本块bid进行分析,如果该基本块的分支大于等于2或该基本块为所属函数的起始基本块,则提取以该基本块为起点的所有最小分支路径集合PATHid={pathid,i|i=0,1,…,m},并将该集合加入所属函数胎记集合,PATH=PATH∪PATHid,m为以基本块bid为起点的所有最小分支路径的个数。进一步的,步骤S102中提取基本块bid的最小分支路径的方法是为其每一个分支创建一条以bid为起点的路径pathid,i,对于每一条路径,将其后继基本块不断加入该路径中,直至遇到下一个分支,则该路径经过的基本块内的汇编指令构成了该最小分支路径,这些路径的集合PATHid即为以该基本块为起点的所有最小分支路径。进一步的,步骤S102中提取基本块中汇编指令的方法是:首先读取汇编指令的助记符,接着读取该汇编指令对应的操作数的表达树id,根据表达树id读取对应的节点id,从而读取节点id对应的符号或立即数,遍历该表达树的各个节点,得到操作数,最后将助记符与操作数组合,得到该汇编指令的表达形式。进一步的,步骤S103中函数胎记之间相似度的计算方法是:令原告程序P中的函数Fun_1的胎记FB1与被告程序Q中函数Fun_2的胎记FB2'分别表示为PATH1={path1,i|i=0,1,…,a},PATH2={path2,j|j=0,1,…,b},a为函数Fun_1的函数胎记的所有最小分支路径的个数;b为函数Fun_2的函数胎记的所有最小分支路径的个数;对于PATH1中的每一条路径path1,i,计算其与PATH2中每一条路径path2,j的相似度,基于这些相似度,寻找与path1,i最匹配的路径path2,match,并记录其相似度sim(path1,i,path2,match);基于Fun_1的静态信息,以路径中包含的汇编指令个数li为权值,进行加权计算,从而得到函数胎记FB1与函数胎记FB2之间的相似度,计算公式为:式中:li——函数Fun_本文档来自技高网...
基于最小分支路径函数胎记的软件局部抄袭证据生成方法

【技术保护点】
基于最小分支路径函数胎记的软件局部抄袭证据生成方法,其特征在于,包括如下步骤:步骤S101:基于反汇编技术,对原告程序P及被告程序Q对应的可执行二进制文件进行反汇编,记录并分析生成的汇编代码,对于其包含的静态信息进行预处理并以数据表的形式存储;步骤S102:基于程序的函数内静态控制流图,将一个分支的起始基本块到下一个分支的起始基本块之间的基本块所包含的指令序列作为函数的一条最小分支路径,一个函数Fid的函数胎记FBid是其所有最小分支路径构成的集合PATH={pathid,i|i=0,1,…n},提取原告程序P与被告程序Q内所有函数对应的函数胎记PB={FBi|i=0,1,…,m1}以及QB={FBj'|j=0,1,…,m2};n为函数胎记FBid的所有最小分支路径的个数,m1和m2分别为原告程序P与被告程序Q中所有函数胎记的个数;步骤S103:基于原告程序P内的所有函数胎记,计算其对于被告程序Q内的所有函数的函数胎记相似度SIM(FBi,FBj'),FBi∈PB&&FBj'∈QB;步骤S104:基于函数间的相似度以及函数间调用图,发现相似子图集,构建最优相似子图集;步骤S105:基于最优相似子图集,进行抄袭判定,如存在抄袭,生成抄袭证据。...

【技术特征摘要】
1.基于最小分支路径函数胎记的软件局部抄袭证据生成方法,其特征在于,包括如下步骤:步骤S101:基于反汇编技术,对原告程序P及被告程序Q对应的可执行二进制文件进行反汇编,记录并分析生成的汇编代码,对于其包含的静态信息进行预处理并以数据表的形式存储;步骤S102:基于程序的函数内静态控制流图,将一个分支的起始基本块到下一个分支的起始基本块之间的基本块所包含的指令序列作为函数的一条最小分支路径,一个函数Fid的函数胎记FBid是其所有最小分支路径构成的集合PATH={pathid,i|i=0,1,…n},提取原告程序P与被告程序Q内所有函数对应的函数胎记PB={FBi|i=0,1,…,m1}以及QB={FBj'|j=0,1,…,m2};n为函数胎记FBid的所有最小分支路径的个数,m1和m2分别为原告程序P与被告程序Q中所有函数胎记的个数;步骤S103:基于原告程序P内的所有函数胎记,计算其对于被告程序Q内的所有函数的函数胎记相似度SIM(FBi,FBj'),FBi∈PB&&FBj'∈QB;步骤S104:基于函数间的相似度以及函数间调用图,发现相似子图集,构建最优相似子图集;步骤S105:基于最优相似子图集,进行抄袭判定,如存在抄袭,生成抄袭证据。2.根据权利要求1所述的方法,其特征在于,所述步骤S101具体为使用逆向分析工具来撤除编译和汇编过程,输入为机器语言,输出结果为汇编语言;对原告及被告程序P,Q对应的二进制可执行文件进行反汇编,对反汇编后输出的汇编代码进行分析,对程序包含的静态信息进行预处理,删除库函数以及过小的函数,得到有效的函数信息,以数据表的形式记录存储;所述静态信息具体包括:基本块,函数,指令,助记符,操作数,函数内静态控制流图以及函数间调用图;所述过小的函数为指令数小于3的函数。3.根据权利要求1所述的方法,其特征在于,步骤S102中基于最小分支路径的函数胎记FBid即最小分支路径集合PATH的提取方法是基于函数的静态控制流图,对函数内的每一个基本块bid进行分析,如果该基本块的分支大于等于2或该基本块为所属函数的起始基本块,则提取以该基本块为起点的所有最小分支路径集合PATHid={pathid,i|i=0,1,…,m},并将该集合加入所属函数胎记集合,PATH=PATH∪PATHid,m为以基本块bid为起点的所有最小分支路径的个数。4.根据权利要求3所述的方法,其特征在于,步骤S102中提取基本块bid的最小分支路径的方法是为其每一个分支创建一条以bid为起点的路径pathid,i,对于每一条路径,将其后继基本块不断加入该路径中,直至遇到下一个分支,则该路径经过的基本块内的汇编指令构成了该最小分支路径,这些路径的集合PATHid即为以该基本块为起点的所有最小分支路径。5.根据权利要求4所述的方法,其特征在于,步骤S102中提取基本块中汇编指令的方法是:首先读取汇编指令的助记符,接着读取该汇编指令对应的操作数的表达树id,根据表达树id读取对应的节点id,从而读取节点id对应的符号或立即数,遍历该表达树的各个节点,得到操作数,最后将助记符与操作数组合,得到该汇编指令的表达形式。6.根据权利要求1所述的方法,其特征在于,步骤S103中函数胎记之间相似度的计算方法是:令原告程序P中的函数Fun_1的胎记FB1与被告程序Q中函数Fun_2的胎记FB2'分别表示为PATH1={path1,i|i=0,1,…,a},PATH2={path2,j|j=0,1,…,b},对于PATH1中的每一条路径path1,i,计算其与PATH2中每一条路径path2,j的相似度,基于这些相似度,寻找与path1,i最匹配的路径path2,match,并记录其相似度sim(path1,i,path2,match);基于Fun_1的静态信息,以路径中包含的汇编指令个数li为权值,进行加权计算,从而得到函数胎记FB1与函数胎记FB2的相似度,计算公式为:式中:li——函数Fun_1中第i条最小分支路径包含的汇编指令的个数;所述a为函数Fun_1的函数胎记的所有最小分支路径的个数;b为函数Fun_2的函数胎记的所有最小分支路径的个数;则函数之间的相似度SIM(Fun_1,Fun_2)=SIM(FB1,FB2')。7.根据权利要求6所述的方法,其特征在于,步骤S103中路径path1,i与path2,j之间相似度的计算方法分为四个步骤,分别是预处理,校准路径,基于助记符和操作数关联的汇编指令相似值计算,以及路径相似度计算;具体如下:a)预处理:预处理的方法是首先删除路径中所包含的跳转指令,接着将操作数抽象化;操作数抽象化是指将构成路径的指令中的具体操作数抽象为...

【专利技术属性】
技术研发人员:刘烃徐茜佟菲菲刘欣宇郑庆华
申请(专利权)人:西安交通大学
类型:发明
国别省市:陕西,61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1