[发明专利]基于代码映射和词法分析的大规模程序相似性快速检测与证据生成方法有效
申请号: | 201811237212.6 | 申请日: | 2018-10-23 |
公开(公告)号: | CN109542766B | 公开(公告)日: | 2020-08-18 |
发明(设计)人: | 刘烃;贾昂;徐茜;范铭;魏闻英;楼隽真 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 田洲 |
地址: | 710049 陕*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 代码 映射 词法 分析 大规模 程序 相似性 快速 检测 证据 生成 方法 | ||
1.基于代码映射和词法分析的大规模程序相似性快速检测与证据生成方法,其特征在于,包括如下步骤:
1)、基于代码映射的疑似相似程序搜索:
步骤S101:通过分析待检测样本集A和源代码样本集B中样本程序的代码,获取每一个样本程序的第三方库调用信息和词频信息;基于代码映射思想,将样本程序的第三方库调用信息和词频信息转化为一个向量;对待检测样本集A,生成样本程序的向量集A*;对源代码样本集B,生成样本程序的向量集C;
步骤S102:将向量集C中的程序的向量表示作为输入,程序的源代码相似性作为标签,采用机器学习方法训练相似计算网络,用于根据程序的向量表示判定程序代码相似性;
步骤S103:利用步骤S102训练得到的相似计算网络,对向量集C和待检测样本集A中的每一个样本的向量表示进行相似度计算和相似性判定,得到向量集C和样本集A的向量集间的相似关系;
步骤S104:对于待检测样本集A中的每一个程序,如果在向量集C中不存在与其有相似关系的样本,将归类到无显著相似性的程序样本集A1中;如果存在,将该样本与相似样本归类为可疑样本集A′,并保留其抄袭关系;
2)、基于词法分析的程序相似判定与证据生成:
步骤S105:将可疑样本集A′的源代码按照其已有的抄袭关系与源代码样本集B中的样本使用贪婪字符串匹配算法进行计算,得到相应的相似度和相似部分;
步骤S106:对经过相似度计算的可疑样本集A′的源代码,按照其相似度大小是否大于阈值分为有无相似样本两类;若其具有相似样本,将该代码及其相似部分和抄袭关系归类到抄袭程序样本集A2中,如果不具有相似样本,将该代码归类到无显著相似性的程序样本集A1中;
步骤S107:对于抄袭程序样本集A2中的每一个样本,提取步骤S105得到的相似部分,作为其抄袭证据,构建含证据的相似集A2;
步骤S108:输出抄袭程序样本集A2和无显著相似性的程序样本集A1。
2.根据权利要求1所述的方法,其特征在于,所述步骤S101具体为对于待检测样本集A和源代码样本集B中样本程序的代码,使用语法分析工具提取代码的语法树,从语法树中提取调用的API序列;使用K-gram算法对源代码进行处理,得到对应的K-gram词频信息;对于API序列和K-gram词频信息都使用one-hot的表示形式,表示为两个一维向量,其中向量的每个位置代表相应的API名称或者K-gram,向量的每个位置的数据代表出现的频数;对于一个源代码的one-hot的两个向量,使用代码映射的方法将其转化为特定维度的向量;通过以上步骤,获得样本集A的向量集A*和样本集B的向量集C。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811237212.6/1.html,转载请声明来源钻瓜专利网。