一种基于字节码和神经网络的代码克隆检测方法及系统技术方案

技术编号:32364028 阅读:21 留言:0更新日期:2022-02-20 03:35
本发明专利技术属于代码克隆检测技术领域,具体涉及一种基于字节码和神经网络的代码克隆检测方法及系统,该方法包括:获取待检测的代码数据,将待检测的代码数据输入到训练好的代码克隆检测模型中,得到检测结果,将检测结果进行标记保存;本发明专利技术以字节码代替源代码,相较于现有的基于文本和词法的检测方法而言,具有充分考虑代码语义信息的特点,能够从准确率、召回率、F1度量值等方面提升对类型3、类型4克隆的检测效果。的检测效果。的检测效果。

【技术实现步骤摘要】
一种基于字节码和神经网络的代码克隆检测方法及系统


[0001]本专利技术属于代码克隆检测
,具体涉及一种基于字节码和神经网络的代码克隆检测方法及系统。

技术介绍

[0002]代码克隆(code clone),也称为重复代码(duplicate code)或相似代码,是指存在于代码库中两个及以上的相同或者相似的源代码片段。代码克隆检测是软件工程领域的难点问题。代码克隆分为四类,分别是类型1(Type

1)克隆、类型2(Type

2)克隆、类型3(Type

3)克隆和类型4(Type

4)克隆。其中,类型1克隆是指除了空格、注释之外,两个代码片段完全相同的代码对;类型2克隆是指在类型1的基础上,除了变量名、类型名、函数名之外都完全相同的代码对;类型3克隆是指在类型2的基础上,两个代码片段结构相似,有程序语句的增加、减少或修改;类型4克隆是指具有相同功能的异构代码。
[0003]针对以上四种克隆类别,目前主流的检测方法按照代码表征方式不同可以分为:基于文本的检测方法、基于词法(Token)的检测方法、基于语法的检测方法和基于语义的检测方法。但是上述方法存在以下的缺点:
[0004]1、基于文本和词法的检测方法在类型3和类型4克隆上的检测准确率(Precision)、召回率(Recall)以及F1度量值过低。
[0005]2、基于语法和语义的检测方法往往要构建抽象语法树、程序依赖图等,时空复杂度高。
[0006]3、在一些场景下(例如对字节码文件进行代码混淆),字节码文件无法被反编译为源代码。此时,基于源代码的比较方法无法检测出潜在的代码克隆现象。

技术实现思路

[0007]为解决以上现有技术存在的问题,本专利技术提出了一种基于字节码和神经网络的代码克隆检测方法,该方法包括:获取待检测的代码数据,将待检测的代码数据输入到训练好的代码克隆检测模型中,得到检测结果,将检测结果进行标记保存;
[0008]对代码克隆检测模型进行训练的过程包括:
[0009]S1:获取原始的代码数据集;对代码数据进行预处理,得到格式化后的数据集;
[0010]S2:对格式化后的数据集进行划分,得到训练集、验证集和测试集;
[0011]S3:将训练集中的数据进行特征提取,得到代码数据的特征,将代码数据特征进行集合,得到矩阵对集合;
[0012]S4:将矩阵对集合输入到神经网络中,得到检测结果;
[0013]S5:根据计算得到的结果计算模型的损失函数值,将验证集中的数据输入到模型中,不断调整模型的参数,当损失函数最小时,完成模型的训练;
[0014]S6:将测试集输入到训练好的代码克隆检测模型中,对模型进行评估。
[0015]优选的,对代码数据进行预处理的过程包括:对原始的代码数据进行清洗,删除冗
余数据;将清洗后的数据进行格式转化,得到格式化后的数据集;格式化后数据集中的每条数据包含字节码指令序列对和分类标签。
[0016]优选的,将训练集中的数据进行特征提取的过程包括:
[0017]步骤1:建立字节码词向量语料库;
[0018]步骤2:构建自定义词向量模型,将字节码词向量语料库输入到自定义词向量模型中进行训练,得到训练后的词向量模型;
[0019]步骤3:将数据集中的字节码指令序列对输入到训练后的词向量模型中,得到由词向量组合而来的矩阵对集合。
[0020]进一步的,建立字节码词向量语料库的过程包括:
[0021]步骤11:选定代码库;
[0022]步骤12:对选定的代码库进行编译,得到class文件库;
[0023]步骤13:将class文件库转化为字节码指令文件库;
[0024]步骤14:提取每个字节码指令文件中所有函数的操作码序列作为词向量训练语料库,其中每个函数的操作码序列作为一条训练数据。
[0025]进一步的,对自定义词向量模型进行训练的过程包括:
[0026]步骤21:构建词向量模型;
[0027]步骤22:设置词向量模型的关键参数;该关键参数包括训练的次数,向量形状以及滑动窗口尺寸;
[0028]步骤23:根据设置的关键参数和字节码词向量语料库对词向量模型进行训练,得到训练好的词向量模型。
[0029]优选的,采用神经网络对矩阵对集合进行处理的过程包括:将矩阵对集合中的矩阵对输入到神经网络中,通过正向传播,得到预测值。
[0030]优选的,模型的损失函数表达式为:
[0031][0032]其中,N代表数据总量,y
i
表示第i个数据的实际值,表示第i个数据的预测值。
[0033]一种基于字节码和神经网络的代码克隆检测系统,该系统包括:数据获取模块、数据检测模块以及输出模块;
[0034]所述数据获取模块用于获取待检测的代码数据,并将获取的待检测代码数据输入到数据检测模块中,得到检测结果;
[0035]所述数据检测模块包括预处理单元、特征提取单元以及相似度计算单元;
[0036]所述预处理单元包括格式化组件和划分组件;所述格式化组件用于对数据获取模块发送的待检测代码数据进行数据格式转化,得到特定格式的数据;所述划分组件用于对特定格式的数据集进行划分,得到训练集、验证集和测试集;
[0037]所述特征提取单元获取训练集、验证集和测试集中的数据,并将各个集合中的数据转化为矩阵;
[0038]所述相似度计算单元用于获取特征提取单元产生的矩阵对,并计算各个矩阵对的相似性,并根据相似性对待检测的代码数据进行分类;
[0039]所述输出模块用于获取相似度计算单元的分类结果,并将分类结果进行输出。
[0040]优选的,特定格式的数据包括格式化后数据集中的每条数据,其包含字节码指令序列对和分类标签。
[0041]本专利技术的有益效果:
[0042]1、本专利技术以字节码代替源代码,相较于现有的基于文本和词法的检测方法而言,具有充分考虑代码语义信息的特点,能够从准确率、召回率、F1度量值等方面提升对类型3、类型4克隆的检测效果。
[0043]2、本专利技术提出的方法将字节码指令序列以词向量矩阵形式进行表征,相较于现有的基于语法和语义的检测方法而言,具有检测耗时低的特点。
[0044]3、本专利技术提出的方法结合了神经网络技术,能够从代码克隆数据集中学习到代码克隆的潜在规律,相较于传统的基于字节码的检测方法具有增益效果。
附图说明
[0045]图1为本专利技术实施例的检测示意图;
[0046]图2为本专利技术实施例的数据检测模块图;
[0047]图3为本专利技术实施例的预处理单元图;
[0048]图4为本专利技术实施例的数据集格式化示意图;
[0049]图5为本专利技术实施例的特征提取单元图;
[0050]图6为本专利技术实施例的词向量语料库本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于字节码和神经网络的代码克隆检测方法,其特征在于,包括:获取待检测的代码数据,将待检测的代码数据输入到训练好的代码克隆检测模型中,得到检测结果,将检测结果进行标记保存;对代码克隆检测模型进行训练的过程包括:S1:获取原始的代码数据集;对代码数据进行预处理,得到格式化后的数据集;S2:对格式化后的数据集进行划分,得到训练集、验证集和测试集;S3:将训练集中的数据进行特征提取,得到代码数据的特征,将代码数据特征进行集合,得到矩阵对集合;S4:将矩阵对集合输入到神经网络中,得到检测结果;S5:根据计算得到的结果计算模型的损失函数值,将验证集中的数据输入到模型中,不断调整模型的参数,当损失函数最小时,完成模型的训练;S6:将测试集输入到训练好的代码克隆检测模型中,对模型进行评估。2.根据权利要求1所述的一种基于字节码和神经网络的代码克隆检测方法,其特征在于,对代码数据进行预处理的过程包括:对原始的代码数据进行清洗,删除冗余数据;将清洗后的数据进行格式转化,得到格式化后的数据集;格式化后数据集中的每条数据包含字节码指令序列对和分类标签。3.根据权利要求1所述的一种基于字节码和神经网络的代码克隆检测方法,其特征在于,将训练集中的数据进行特征提取的过程包括:步骤1:建立字节码词向量语料库;步骤2:构建自定义词向量模型,将字节码词向量语料库输入到自定义词向量模型中进行训练,得到训练后的词向量模型;步骤3:将字节码指令序列对输入到训练后的词向量模型中,得到矩阵对集合。4.根据权利要求3所述的一种基于字节码和神经网络的代码克隆检测方法,其特征在于,建立字节码词向量语料库的过程包括:步骤11:选定代码库;步骤12:对选定的代码库进行编译,得到class文件库;步骤13:将class文件库转化为字节码指令文件库;步骤14:提取每个字节码指令文件中所有函数的操作码序列作为词向量训练语料库,其中每个函数的操作码序列作为一条训练数据。5.根据权利要求3...

【专利技术属性】
技术研发人员:万邦睿董双黄江平钱鹰
申请(专利权)人:重庆邮电大学
类型:发明
国别省市:

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

1