【技术实现步骤摘要】
基于代码映射和词法分析的大规模程序相似性快速检测与证据生成方法
本专利技术涉及源代码程序分析及软件抄袭检测
,特别涉及一种多层的源代码程序相似度检测方法。
技术介绍
随着计算机软件产业的迅速发展,软件的安全问题得到了越来越多的研究人员、教育人员及软件企业的重视。而计算机软件的开源,给软件的抄袭带来了更便利的条件。近几年来,各类软件侵权案件时有发生,Google、Apple、eBay等都曾卷入到相关案件中。为了对抗软件抄袭案件,保护软件知识产权,国内外的研究人员提出了大量的软件抄袭检测技术。以应用场景和技术手段作为基准,可将现有的软件抄袭检测技术归为三类:源码抄袭检测技术,基于软件水印的抄袭检测技术,以及基于软件胎记的抄袭检测技术。目前发展最为成熟、使用最为广泛的是源码检测技术。但是,目前的源代码抄袭检测技术存在一系列的局限性:1)目前大部分源码检测技术都面向小规模的抄袭检测,无法满足大规模抄袭检测场景下的快速检测需要;2)混淆技术的发展增加软件抄袭检测的难度,会使得一部分的抄袭检测技术失效;3)现有的很多抄袭检测技术都只是提供了一个简单的结果,并没有提供具体 ...
【技术保护点】
1.基于代码映射和词法分析的大规模程序相似性快速检测与证据生成方法,其特征在于,包括如下步骤:1)、基于代码映射的疑似相似程序搜索:步骤S101:通过分析待检测样本集A和源代码样本集B中样本程序的代码,获取每一个样本程序的第三方库调用信息和词频信息;基于代码映射思想,将样本程序的第三方库调用信息和词频信息转化为一个向量;对源代码样本集B,生成所有样本程序的向量集C;步骤S102:将向量集C中的程序的向量表示作为输入,程序的源代码相似性作为标签,采用机器学习方法训练相似计算网络,用于根据程序的向量表达判定程序代码相似性;步骤S103:利用步骤S102训练得到的相似计算网络,对 ...
【技术特征摘要】
1.基于代码映射和词法分析的大规模程序相似性快速检测与证据生成方法,其特征在于,包括如下步骤:1)、基于代码映射的疑似相似程序搜索:步骤S101:通过分析待检测样本集A和源代码样本集B中样本程序的代码,获取每一个样本程序的第三方库调用信息和词频信息;基于代码映射思想,将样本程序的第三方库调用信息和词频信息转化为一个向量;对源代码样本集B,生成所有样本程序的向量集C;步骤S102:将向量集C中的程序的向量表示作为输入,程序的源代码相似性作为标签,采用机器学习方法训练相似计算网络,用于根据程序的向量表达判定程序代码相似性;步骤S103:利用步骤S102训练得到的相似计算网络,对向量集C和待检测样本集A中的每一个样本的向量表示进行相似度计算和相似性判定,得到向量集C和样本集A的向量集间的相似关系;步骤S104:对于待检测样本集A中的每一个程序,如果在向量集C中不存在与其有相似关系的样本,将归类到无显著相似性的程序样本集A1中;如果存在,将该样本与相似样本归类为可疑样本集A′,并保留其抄袭关系;2)、基于词法分析的程序相似判定与证据生成:步骤S105:将保留下的源代码按照其已有的抄袭关系与源代码样本集B中的样本使用贪婪字符串匹配算法进行计算,得到相应的相似度和相似部分;步骤S106:对经过相似度计算的源代码,按照其相似度大小是否大于阈值分为有无相似样本两类;若其具有相似样本,将该代码及其相似部分和相似关系归类到抄袭程序样本集A2中,如果不具有相似代码,将该代码归类到无显著相似性的程序样本集A1中;步骤S107:对于抄袭程序样本集A2中的每一个样本,提取步骤S105得到的相似部分,作为其抄袭证据,构建含证据的相似集A2;步骤S108:输出抄袭程序样本集A2和无显著相似性的程序样本集A1。2.根据权利要求1所述的方法,其特征在于,所述步骤S101具体为使用语法分析工具提取代码的语法树,从语法树中提取调用的API序列;使用K-gram算法对源代码进行处理,得到对应的K-gram词频信息;对于API序列和K-gram词频信息都使用one-hot的表示形式,表示为两个一维向量,其中向量的每个位置代表相应的API名称或者K-gram,向量的每个位置的数据代表出现的频数;对于一个源代码的one-hot的两个向量,使用代码映射的方法将其转化为特定维度的向量;通过以上步骤,获得源代码文件的向量表示。3.根据权利要求1所述的方法,其特征在于,所述步骤S102使用向量集C,通过小批量梯度下降法训练相似计算网络,具体步骤如下:步骤S201:对于向量集C,使用向量集中所有的向量组成一对一的向量对,形成向量对集D,并且向量对集D的每对源代码的相似度di已知;步骤S202:从向量集C中随机选取若干源代码样本组成新的向量集C1;步骤S203:对于向量集C1,使用向量集中所有的向量组成一对一的向量对,形成向量对集D′,并且向量对集D的每对源代码的相似度di已知;步骤S204:对于向量对集D中的每对向量,使用神经网络计算其最终的相似度d′i;步骤S205:使用以下公式更新权值w:w=w+2α∑i(di′-di)2iXi,式中:α——训练步长;Xi——第i次的输入矢量;步骤S206:计算均方误差E[(d′i-di)2]<阈值θ是否成立,若成立,训练结束;若不成立,返回步骤S202;通过以上步骤,完成相似计算网络的模型训练。4.根据权利要求1所述的方法,其特征在于,所述步骤S103具体为对于样本集A中的每一个源代码,都使用以下步骤计算其与样本集B中的所有样本的相似度:步骤S301:按顺序从样本集A中选取源代码,记其向量表示为ai;步骤S302:按顺序从向量集C中选取向量cj;步骤S303:使用相似计算网络计算ai和cj的相似度Sij;步骤S304:判断cj是否是向量集C中的最后一个,若是,转到步骤S305;若不是,转到步骤S302;步骤S305:判断ai是否是样本集A中的最后一个,若是,结束计算;若不是,转到步骤S301。5.根据权利要求1所述的方法,其特征在于,所述步骤S104具体为对于样本集A中的每一个源代码,都使用以下步骤判断其是否有相似样本:步骤S401:按顺序从样本集A中选取源代码,记其向量表示为ai;步骤S402:从ai与向量集C的相似度中按顺序选取相似度Sij;步骤S403:判断Sij和阈值θ的关系,若Sij大于等于阈值θ,则向量表示为ai的源代码具有相似样本,转到f);若Sij小于阈值θ,判断j是否向量集C的最后一个,若是,转到d),若否,转到b);步骤S404:记向量表示为ai的源代码不具有相似样本;步骤S405:判断ai是否为源代码样本集A的最后一个,若是,则结束;若否,则转到步骤S402;根据源代码样本是否有相似样本,将没有相似样本的源代码和其向量表示剔除,并将其源代码存储在无显著相似性的程序样本集A1中,将有相似样本的源代码和其相似度集合保留,并保存为可疑样本集A′。6.根据权利要求5所述的方法,其特征在于,所述步骤S104具体为对保留下的有相似样本的源代码和其相似度集合,使用如下步骤得到其相似关系:a)按顺序从样本集A′中选取源代码,记其向量表示为ai′;b)从ai′与向量集C的相似度中按顺序选取相似度Sij;c)判断Sij和阈值θ的关系,若Sij大于等于阈值θ,ai′与向量集C中的cj存在抄袭关系,并将...
【专利技术属性】
技术研发人员:刘烃,贾昂,徐茜,范铭,魏闻英,楼隽真,
申请(专利权)人:西安交通大学,
类型:发明
国别省市:陕西,61
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。