1.一种基于代码检索与子图匹配的细粒度二进制代码相似性检测方法,其特征在于,所述方法包括:步骤S1、基于代码片段级别的细粒度检索,将待测二进制代码在基本块级别进行向量化嵌入;在已有的二进制代码数据库中对基本块级别的嵌入向量进行检索,从而执行基本块级别的二进制代码匹配;步骤S2、将每个匹配到的基本块扩展到其相邻的基本块,形成子图,并将匹配到的基本块作为种子节点;通过对多个不连续子图进行种子图匹配,判断待测二进制代码与二进制代码数据库中的代码的相似程度,从而完成细粒度二进制代码相似性检测;在步骤S2中,使用有监督的种子图匹配模型SeedGNN,将匹配到的基本块作为种子节点,进行种子图匹配;其中:SeedGNN由多层神经网络组成,使用卷积运算进行节点的属性传播,使用过滤模块针对节点中种子节点被噪声节点干扰的情况,利用匈牙利算法对两个图进行最大化相似度的节点预先匹配,从而将真正的种子节点与噪声节点进行区分,对噪声节点进行掩码后,使用真正的种子节点进行图神经网络的运算;随着卷积层数的增加,不断有新的种子节点加入运算,且图神经网络中的消息传递在逐级加深,最终得到两个目标图结构中各对节点间的相似度数值;通过设定阈值进行筛选来判断图的匹配结果,从而确定目标代码片段与待测二进制代码片段的子图中匹配的比例,并进一步确定两段代码是否相似。
2.根据权利要求1所述的一种基于代码检索与子图匹配的细粒度二进制代码相似性检测方法,其特征在于,在步骤S1中,将待测二进制代码在基本块级别进行向量化嵌入;具体包括:将二进制函数级别的待测二进制代码基于控制流图进行代码片段分割,分为两个级别的代码单元,分别是:由相邻的两个基本块组成的连续基本块级别的代码单元;以及所有单独的基本块组成的单一基本块级别的代码单元;通过对待检测的二进制代码进行分割,来执行检测粒度转换,使用sem2vec工具,输入基本块中连续的二进制汇编代码,并输出向量形式的嵌入表征。
3.根据权利要求2所述的一种基于代码检索与子图匹配的细粒度二进制代码相似性检测方法,其特征在于,在步骤S1中,在已有的二进制代码数据库中对基本块级别的嵌入向量进行检索;具体包括:采用IVF-PQ算法执行基于向量相似度的代码检索,IVF-PQ由两部分组成,分别是乘积量化PQ与倒排文件IVF;乘积量化PQ基于向量压缩技术,用于减少嵌入向量的维数,加快向量相似度计算速度;向量库中有N个维度为D的向量,每一位浮点数值由d个比特位表示,PQ通过将高维向量划分成M组维度均为D/M的子向量,在M组子向量中进行K-means聚类,使得每个组产生K个聚类中心,并编入该组子向量的代码本中;倒排文件IVF应用于检索过程,倒排文件索引通过将文件的片段化内容作为索引的键,将所有含有相应内容的文件序号作为值,从而检索出特定的文件内容;通过K-means聚类将空间里的点划分成n list 个单元,查询时将目标向量与所有单元的中心进行距离比较,选出n probe 个最近单元,比较被选出的单元里的所有向量,得到最终结果。
4.根据权利要求3所述的一种基于代码检索与子图匹配的细粒度二进制代码相似性检测方法,其特征在于,在步骤S1中:IVF-PQ算法通过IVF减少用于检索的向量范围,使用PQ进行相似度计算与相似向量的检索,得到与待测向量最为相似的一个或一簇向量;从而实现在二进制代码数据库中对基本块级别嵌入向量的相似度计算;在计算出所有基本块单元与待测二进制代码中的基本块单元的相似度后,进行相似度排序,将基本块单元相似度高于阈值T B 且匹配到的单元数量较多的前K top 段代码,作为匹配候选进行相似性检测。
5.根据权利要求4所述的一种基于代码检索与子图匹配的细粒度二进制代码相似性检测方法,其特征在于,在步骤S2中,种子图匹配指基于匹配到的基本块与基本块序列,检测目标代码是否存在于待测二进制代码中,或者检测目标代码是否包含待测二进制代码。
6.根据权利要求5所述的一种基于代码检索与子图匹配的细粒度二进制代码相似性检测方法,其特征在于,在步骤S2中,在K top 段代码中,对相似度高于阈值的多个匹配基本块单元添加相邻节点,从而扩展为多个子图,通过图匹配算法进行相似度匹配;其中:当匹配到的相似子图数量达到阈值T G 时,则判定二进制代码相似性匹配成功;并且在已匹配节点的基础上,将其作为种子节点,进一步进行图结构匹配。
7.一种基于代码检索与子图匹配的细粒度二进制代码相似性检测系统,其特征在于,所述系统包括处理单元,所述处理单元被配置为执行:基于代码片段级别的细粒度检索,将待测二进制代码在基本块级别进行向量化嵌入;在已有的二进制代码数据库中对基本块级别的嵌入向量进行检索,从而执行基本块级别的二进制代码匹配;将每个匹配到的基本块扩展到其相邻的基本块,形成子图,并将匹配到的基本块作为种子节点;通过对多个不连续子图进行种子图匹配,判断待测二进制代码与二进制代码数据库中的代码的相似程度,从而完成细粒度二进制代码相似性检测;其中,使用有监督的种子图匹配模型SeedGNN,将匹配到的基本块作为种子节点,进行种子图匹配;其中:SeedGNN由多层神经网络组成,使用卷积运算进行节点的属性传播,使用过滤模块针对节点中种子节点被噪声节点干扰的情况,利用匈牙利算法对两个图进行最大化相似度的节点预先匹配,从而将真正的种子节点与噪声节点进行区分,对噪声节点进行掩码后,使用真正的种子节点进行图神经网络的运算;随着卷积层数的增加,不断有新的种子节点加入运算,且图神经网络中的消息传递在逐级加深,最终得到两个目标图结构中各对节点间的相似度数值;通过设定阈值进行筛选来判断图的匹配结果,从而确定目标代码片段与待测二进制代码片段的子图中匹配的比例,并进一步确定两段代码是否相似。
8.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1-6任一项所述的一种基于代码检索与子图匹配的细粒度二进制代码相似性检测方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1-6任一项所述的一种基于代码检索与子图匹配的细粒度二进制代码相似性检测方法。