[发明专利]适用于大规模样本的程序源代码相似度检测方法有效
申请号: | 202010068918.5 | 申请日: | 2020-01-21 |
公开(公告)号: | CN111290784B | 公开(公告)日: | 2021-08-24 |
发明(设计)人: | 万寒;刘康旭;高小鹏 | 申请(专利权)人: | 北京航空航天大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F8/77 |
代理公司: | 北京永创新实专利事务所 11121 | 代理人: | 祗志洁 |
地址: | 100191*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 适用于 大规模 样本 程序 源代码 相似 检测 方法 | ||
本发明提出一种适用于大规模样本的程序源代码相似度检测方法,用于软件测试、威胁检测等领域。本发明包括:预处理程序源代码;若进行模块级相似度检测,对源代码按照模块进行切分;对模块级或工程级源代码的待检测样本计算文本特征和特征权重;对各待检测样本的文本特征序列和特征权重序列计算局部敏感哈希值,将该值作为样本特征向量;将所有样本的特征向量进行排列规则变化得到若干有序表,根据检测敏感度要求检测相似样本。本发明将待检测的程序样本以较低的计算开销转化为低维特征向量,并借助查找表机制,大大降低了查找相似样本的时间复杂度,适用于大规模场景,具有适应语言广、检测速度快、抗干扰能力强和可精确定位相似片段的优点。
技术领域
本发明涉及软件测试、威胁检测等技术领域,尤其涉及一种基于程序源代码文本特征,能够以较低的计算成本实现对大规模样本进行相似检测的方法。
随着软件工程的发展,相似程序代码检测在软件测试、恶意软件检测、知识产权保护以及计算机教学等领域均能发挥重要的作用。目前,针对程序代码的相似度检测问题,国内外已有若干工具或系统实现,所采用技术包括串匹配方法、抽象语法树(AbstractSyntax Tree,AST)方法、编译优化和反编译方法以及文档指纹(Document Fingerprint)方法。
现有的代码相似度检测方法,所存在的问题包括:(1)检测效率低下,无法应对大规模样本检测需要;(2)要求被检测程序具备正确的逻辑或可被指定编译器编译,无法处理异常程序样本;(3)抗干扰能力差,易受到增加冗余代码、指令重排序等混淆手段影响。
发明内容
本发明针对大规模样本的程序源代码相似度检测问题,提出了一种利用程序源代码中文本特征的局部敏感哈希对大规模样本进行相似度检测的方法,具有适应语言广、检测速度快、抗干扰能力强和可精确定位相似片段的优点。
本发明提供了一种适用于大规模样本的程序源代码相似度检测方法,包括如下步骤:
步骤1:对输入的程序源代码进行预处理,删除与程序逻辑无关的干扰信息,将程序源代码中的整数型常量统一为同一种进制的表示;
若进行模块(module)级相似度检测,执行步骤2,否则,若进行工程级相似度检测,将程序源代码的每个工程源代码作为一个工程级的待检测样本,直接进入步骤3执行;
步骤2:将经过步骤1处理后的程序源代码样本按照模块进行切分,得到模块级的待检测样本,进入步骤3执行;
将步骤1输出的源代码按照模块定义语法规则划分为若干代码区段,每个代码区段的内容为原始工程中对应模块内部的程序语句,不包含模块定义及端口定义语句。使用“原始样本编号”和“区块对应模块名”对所有划分后所得到的代码区段进行标识,作为步骤3的检测样本。
步骤3:对于每个模块级或工程级待检测样本,使用以下3种方法中的任意一种或多种组合提取其文本特征及并计算特征权重。
方法1:n元语法提取,具体步骤为:对于样本中的每个源代码行,假设其长度为m,自行首开始,按照固定的宽度n,以1为步长,将改行切分成(m-n+1)个长度为n的文本特征。m、n均为正整数,且n小于m。
方法2:哈希取模提取,具体步骤为:对于方法1所提取的文本特征,使用相同的哈希函数逐一计算哈希值,将所得的哈希值与固定的常数k进行取模运算,保留计算结果等于0的文本特征,舍弃计算结果不等于0的文本特征。k为正整数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010068918.5/2.html,转载请声明来源钻瓜专利网。