一种函数相似度检测方法、装置、设备及可读存储介质制造方法及图纸

技术编号:37581412 阅读:18 留言:0更新日期:2023-05-15 07:55
本申请提供了一种函数相似度检测方法、装置、设备及可读存储介质。所述方法包括:获取源码文件中目标函数的第一特征信息;其中,第一特征信息包括:第一变量信息以及所调用的子函数信息数组的第一哈希值;将第一特征信息与预设样本函数对应的数据包进行匹配;其中,数据包包括预设样本函数的第二特征信息;根据匹配结果确定目标函数与预设样本函数的相似状态;其中,相似状态包括以下任意一种:相似、不相似、可能相似;通过本申请方案的实施,只需将目标函数的第一特征信息与预设样本对应的数据包进行匹配,根据匹配结果即可确定两个函数的相似状态,从而能够有效提高检测效率,且特征信息量较少便于存储。信息量较少便于存储。信息量较少便于存储。

【技术实现步骤摘要】
一种函数相似度检测方法、装置、设备及可读存储介质


[0001]本申请涉及电子
,尤其涉及一种函数相似度检测方法、装置、设备及可读存储介质。
[0002]
技术介绍

[0003]目前相关行业多采用生成语法树进行比对、基于AI的训练识别等方法来判定不同源码文件中的函数是否相似。
[0004]生成语法树的方案需要根据编译原理生成抽象语法树(Abstract Syntax Tree,AST),该抽象语法树会用复杂的树形结构来描述代码的层次结构、调用关系等,然后通过将两个函数的语法树的特征(树形、关键结点等)进行比对,当两个语法树的特征相似,则认为两个函数相似。基于AI训练识别的算法,需要进行部署操作,包括寻找模型、转换模型、优化模型等,接着需要训练模型,最后再正式用于检测。
[0005]但是通过生成语法树来进行对比的方法存在以下问题:构建复杂,虽然可以使用现成的库,但不管是学习成本还是代码的复杂程度,都具有较高的复杂性,门槛较高;耗时久,由于构建语法树是个非常繁琐复杂的过程,因此每个函数生成语法树都需要不少时间(相对于正常的函数执行速度);存储困难,由于生成的语法树拥有较大的数据量,且在内存中的存储形式为树结构,因此难以存储成文件,而且由于其数据量远远超过待计算的函数本身,存储代价较大,因此一般采用特征提取以及哈希(hash)计算的方式来浓缩信息,但这样就丢失了很多信息。而基于AI训练识别的算法会存在以下问题:从数据准备到训练到检测,是一个繁琐和复杂的过程,门槛较高;不够轻便,部署复杂;不够灵活变通;成本高。

技术实现思路

[0006]本申请实施例的主要目的在于提供一种函数相似度检测方法、装置、设备及可读存储介质,至少能够解决相关技术中检测函数相似度的方法较为复杂且特征信息不易存储的问题。
[0007]为实现上述目的,本申请实施例第一方面提供了一种函数相似度检测方法,该方法包括:
[0008]获取源码文件中目标函数的第一特征信息;其中,所述第一特征信息包括:第一变量信息以及所调用的子函数信息数组的第一哈希值;
[0009]将所述第一特征信息与预设样本函数对应的数据包进行匹配;其中,所述数据包包括所述预设样本函数的第二特征信息;
[0010]根据匹配结果确定所述目标函数与所述预设样本函数的相似状态;其中,所述相似状态包括以下任意一种:相似、不相似、可能相似。
[0011]本申请实施例第二方面提供了一种函数相似度检测装置,包括:
[0012]获取模块,用于获取源码文件中目标函数的第一特征信息;其中,所述特征信息包
括:第一变量信息以及所调用的子函数信息数组的第一哈希值;
[0013]匹配模块,用于将所述第一特征信息与预设样本函数对应的数据包进行匹配;其中,所述数据包用于存储所述预设样本函数的第二特征信息;
[0014]确定模块,用于根据匹配结果确定所述目标函数与所述预设样本函数的相似状态;其中,所述相似状态包括以下任意一种:相似、不相似、可能相似。
[0015]本申请实施例第三方面提供了一种电子设备,包括:存储器及处理器,其中,处理器用于执行存储在存储器上的计算机程序,处理器执行计算机程序时,实现上述本申请实施例第一方面提供的函数相似度检测方法中的各步骤。
[0016]本申请实施例第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,实现上述本申请实施例第一方面提供的函数相似度检测方法中的各步骤。
[0017]由上可见,根据本申请方案所提供的函数相似度检测方法、装置、设备及可读存储介质,获取源码文件中目标函数的第一特征信息;其中,第一特征信息包括:第一变量信息以及所调用的子函数信息数组的第一哈希值;将第一特征信息与预设样本函数对应的数据包进行匹配;其中,数据包包括所述预设样本函数的第二特征信息;根据匹配结果确定目标函数与预设样本函数的相似状态;其中,相似状态包括以下任意一种:相似、不相似、可能相似。通过本申请方案的实施,只需将目标函数的第一特征信息与预设样本对应的数据包进行匹配,根据匹配结果即可确定两个函数的相似状态,从而能够有效提高检测效率,且特征信息量较少便于存储。
附图说明
[0019]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020]图1为本申请第一实施例提供的函数相似度检测方法的基本流程示意图;
[0021]图2为本申请第二实施例提供的一种函数相似度检测装置的模块示意图;图3为本申请第三实施例提供的电子设备的结构示意图。
具体实施方式
[0022]为使得本申请的专利技术目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0023]在本申请实施例的描述中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请实施例的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
[0024]为了解决相关技术中检测函数相似度的方法较为复杂且特征信息不易存储的问
题,本申请第一实施例提供了一种函数相似度检测方法,应用于C语言源码文件中,如图1为本实施例提供的函数相似度检测方法的基础流程示意图,该函数相似度检测方法包括以下的步骤:
[0025]步骤101、获取源码文件中目标函数的第一特征信息。
[0026]具体的,在本实施例中,第一特征信息包括:第一变量信息以及所调用的子函数信息数组的第一哈希值。应当说明的是,在通常情况下,一个函数实现的功能由它所调用的子函数主导,当调用的子函数基本一致,那么函数的功能就基本一致,相似性就更高,而调用的子函数相差较大,则函数的功能就相差很大,相似性就很低。因此,本实施例尝试以子函数调用为主体来判定函数的相似性,通过获取围绕子函数信息以及变量信息来判定两个函数是否相似。因为本实施例主要针对具有多个子函数调用的函数的相似判定而设计,对于无子函数调用的函数,识别效果较差。
[0027]在本实施例一些实施方式中,获取源码文件中的目标函数的第一特征信息的步骤之前,还包括:获取标识处理后的目标函数中子函数的名称、子函数所调用的参数数量以及子函数的层级信息;基于子函数名称、参数数量、层级信息生成子函数信息数组元素;将所有子函数信息数组元素依次存储,得到子函数信息数组。
[0028]具体的,在本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种函数相似度检测方法,其特征在于,包括:获取源码文件中目标函数的第一特征信息;其中,所述第一特征信息包括:第一变量信息以及所调用的子函数信息数组的第一哈希值;将所述第一特征信息与预设样本函数对应的数据包进行匹配;其中,所述数据包包括所述预设样本函数的第二特征信息;根据匹配结果确定所述目标函数与所述预设样本函数的相似状态;其中,所述相似状态包括以下任意一种:相似、不相似、可能相似。2.根据权利要求1所述的函数相似度检测方法,其特征在于,所述将所述第一特征信息与预设样本函数对应的数据包进行匹配的步骤之前,还包括:分别获取所述预设样本函数的函数名以及所述函数名的位置信息;其中,所述位置信息包括:所在源码文件的文件名称以及在所述源码文件中的行号;获取所述预设样本函数的第二变量信息以及所调用的子函数信息数组的第二哈希值;其中,所述第二变量信息包括:已声明变量中被引用的变量数量以及已声明变量中作为子函数参数的变量数量;基于所述函数名、所述函数名的位置信息、所述第二哈希值以及所述第二变量信息构建所述数据包。3.根据权利要求1所述的函数相似度检测方法,其特征在于,所述获取源码文件中目标函数的第一特征信息的步骤之前,还包括:获取标识处理后的所述目标函数中子函数的名称、所述子函数所调用的参数数量以及所述子函数的层级信息;基于所述子函数名称、参数数量、层级信息生成子函数信息数组元素;将所有子函数信息数组元素依次存储,得到所述子函数信息数组。4.根据权利要求3所述的函数相似度检测方法,其特征在于,所述获取标识处理后的目标函数中子函数的名称、所述子函数所调用的参数数量以及子函数的层级信息的步骤之前,还包括:获取所述目标函数中函数体的语句种类;其中,所述语句种类包括:层级类语句、非层级类语句;根据预设的语句种类标识字符,对不同的所述语句种类进行标识,得到所述标识处理后的目标函数。5.根据权利要求4所述的函数相似度检测方法,其特征在于,所述根据预设的语句种类标识字符,对不同的所述语句种类进行标识,得到所述标识处理后的目标函数的步骤之后,还包括:当所述标识处理后的目标函数中存在子函数调用语句时,获取调用的子函数的名称以及所述子函数所调用的参数...

【专利技术属性】
技术研发人员:朱劲松万振华王颉
申请(专利权)人:深圳开源互联网安全技术有限公司
类型:发明
国别省市:

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

1