[发明专利]基于最小分支路径函数胎记的软件局部抄袭证据生成方法有效
申请号: | 201711322531.2 | 申请日: | 2017-12-12 |
公开(公告)号: | CN107967152B | 公开(公告)日: | 2020-06-19 |
发明(设计)人: | 刘烃;徐茜;佟菲菲;刘欣宇;郑庆华 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 田洲 |
地址: | 710049 陕*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 最小 分支 路径 函数 胎记 软件 局部 抄袭 证据 生成 方法 | ||
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∈PBFBj'∈QB;
步骤S104:基于函数间的相似度以及函数间调用图,发现相似子图集,构建最优相似子图集;
步骤S105:基于最优相似子图集,进行抄袭判定,如存在抄袭,生成抄袭证据;
所述步骤S101具体为使用逆向分析工具来撤除编译和汇编过程,输入为机器语言,输出结果为汇编语言;对原告及被告程序P,Q对应的二进制可执行文件进行反汇编,对反汇编后输出的汇编代码进行分析,对程序包含的静态信息进行预处理,删除库函数以及过小的函数,得到有效的函数信息,以数据表的形式记录存储;
所述静态信息具体包括:基本块,函数,指令,助记符,操作数,函数内静态控制流图以及函数间调用图;
所述过小的函数为指令数小于3的函数;
步骤S102中基于最小分支路径的函数胎记FBid即最小分支路径集合PATH的提取方法是基于函数的静态控制流图,对函数内的每一个基本块bid进行分析,如果该基本块的分支大于等于2或该基本块为所属函数的起始基本块,则提取以该基本块为起点的所有最小分支路径集合PATHid={pathid,i|i=0,1,…,m},并将该集合加入所属函数胎记集合,PATH=PATH∪PATHid,m为以基本块bid为起点的所有最小分支路径的个数;
步骤S102中提取基本块bid的最小分支路径的方法是为其每一个分支创建一条以bid为起点的路径pathid,i,对于每一条路径,将其后继基本块不断加入该路径中,直至遇到下一个分支,则该路径经过的基本块内的汇编指令构成了该最小分支路径,这些路径的集合PATHid即为以该基本块为起点的所有最小分支路径;
步骤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');
步骤S104中,相似子图是指以函数为节点,函数的调用关系为边,对应节点相似度较高且对相似的函数有相同的调用关系的子图;最优相似子图是指,对每个子图基于节点数目、对应节点相似值和节点权重赋予一个分数,分数最高的子图为该子图的最优相似子图;最优相似子图集是指每次加入一个最优相似子图所得到的集合{G1→G1',G2→G2',...,Gn→Gn'},G1,G2,...Gn属于原告程序P,G1',G2',...Gn'属于被告程序Q,且G1,G2,...Gn不相交,G1',G2',...Gn'不相交;Gi→Gi'为一个相似子图,其中i=1,2,…n;
步骤S104中最优相似子图集发现的方法是:
1)筛选出相似度大于阈值ε1的相似函数对:
FF={(Fun_i,Fun_j)|Fun_i∈PFun_j∈QSIM(Fun_i,Fun_j)ε1};
2)基于函数间调用图,生成FF的相似子图集G,并计算每个子图的分数S;
子图分数S是指子图中所有函数对的相似度的和,计算公式为:
式中,n为子图中所有函数对的数目;
3)提取最优相似子图Gb,记录其分数Sb,并入最优相似子图集;
4)如果最优相似子图的分数大于ε2,更新FF,将目前最优相似子图集中包含的函数对从FF中移除,FF=FF-{(Fun_i,Fun_j)|Fun_i∈Gb||Fun_j∈Gb},并跳转至步骤2);否则,结束,并输出当前的最优相似子图集;
其中阈值ε1的取值为0.5~1;ε2的取值大于1小于第一个提取的最优相似子图Gb的分数Sb;
步骤S104中生成FF的相似子图集G的方法是:
2.1)将FF={ffi|i=0,1,…,n}中的第一个函数对ff0作为一个子图加入子图集G中;G={{ff0}};n为FF中函数对的个数;
2.2)从ffi,i=1开始,遍历FF,对于ffi:
a)遍历子图集G={Gj|j=0,1,…,m};m为子图集G中的子图个数;
b)如果ffi与Gj不冲突,且基于函数调用图,对于ffi,存在Gj中的函数对与其符合调用关系,则G=G∪{Gj∪{ffi}};
2.3)将函数对ffi作为一个子图加入子图集G中,G=G∪{{ffi}};
2.4)输出相似子图集G;
步骤S104中判断一个函数对ffi=(Fun_i,Fun_i')是否与子图Gj冲突的方法是:如果存在ff=(Fun,Fun')∈Gj,使得Fun_i=Fun且Fun_i'≠Fun',或Fun_i'=Fun'且Fun_i≠Fun,则函数对ffi与子图Gj冲突。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711322531.2/1.html,转载请声明来源钻瓜专利网。