CN110990058B - 软件相似性度量方法及装置 - Google Patents
软件相似性度量方法及装置 Download PDFInfo
- Publication number
- CN110990058B CN110990058B CN201911189881.5A CN201911189881A CN110990058B CN 110990058 B CN110990058 B CN 110990058B CN 201911189881 A CN201911189881 A CN 201911189881A CN 110990058 B CN110990058 B CN 110990058B
- Authority
- CN
- China
- Prior art keywords
- function
- constraint
- instruction
- similarity
- software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/77—Software metrics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种软件相似性度量方法及装置,该方法包含:针对二进制程序,通过反汇编得到中间代码,并对中间代码进行规范化和标准化处理;统计函数语义特征,通过粗粒度相似度计算筛选出前M名相似函数,并添加至候选函数集;对候选函数集中的函数,利用数据流依赖和程序控制流进行后向切片,获取用于表示函数关键语义的约束推导式集;通过比较约束推导式集,获取目标函数与比较函数的最终相似度得分;依据相似度得分,选取前N名的函数作为专家验证分析内容。本发明通过对代码预处理减少程序在不同的系统架构、操作系统、编译器和优化选项下差异性,通过函数约束推导式的提取和比较筛选出与漏洞函数语义相近的补丁升级函数,提高准确率。
Description
技术领域
本发明属于计算机安全技术领域,特别涉及一种软件相似性度量方法及装置。
背景技术
软件相似性分析一般来说是给定一个未知软件判定其中的函数或代码片段与已知软件或函数库是否有同源性,可用于软件漏洞挖掘、软件侵权、恶意代码家族性分析等。在软件漏洞挖掘领域,通常给定一个已知漏洞,利用相似性度量方法在大规模软件中找到与其相似或关联的危险函数,通过对其分析可有效减少软件被攻击的风险。软件相似性分析分为静态分析和动态分析两类。静态分析通常指在不运行目标程序的前提下通过分析目标程序的语法和语义,并结合数据流或控制流分析建立相似度匹配模型。该方法通常执行效率高,但也存在较高误报率。动态分析主要是在软件运行时记录其运行状态,对其运行状态建立相似度匹配模型。该方法的准确性可较好保证,但配置各种软件运行环境耗时费力,且软件运行所产生的不良后果难以预测和消除。
21世纪以来,伴随着互联网、物联网的快速发展,软件规模呈现爆炸性增长态势。目前,动态分析方法由于搭建运行环境的复杂性和执行效率低的缺点,无法有效应对大规模软件漏洞的实时挖掘。相比之下,利用静态分析方法能较好适应大规模软件的漏洞挖掘需求。目前在使用静态分析方法对软件进行相似性度量时,普遍先使用基本块内特征统计的方法做基本块的相似性度量,再利用基本块间的控制流关系对函数相似性进行粗粒度匹配。然而,即使是同源软件,在不同系统架构、编译器和优化选项下都会产生不同的二进制代码,直接对软件反编译代码做特征统计必然存在相应误差;其次在利用相似性方法做漏洞挖掘时,存在无法有效区分漏洞函数和补丁函数的情况,因为部分漏洞函数在打补丁时仅进行了危险函数替换或修改约束以规避漏洞触发条件,这导致使用普通的相似性度量方法很难对它们进行有效区分。上述原因的存在导致目前的相似性度量方法普遍存在较高的误报率。
发明内容
为此,本发明提供一种软件相似性度量方法及装置,在传统的静态分析方法基础上利用增强型的软件相似性度量,有效提高静态相似性度量的准确性。
按照本发明所提供的设计方案,一种软件相似性度量方法,包含:
针对二进制程序代码,通过反汇编得到中间代码,并对中间代码进行规范化和标准化处理;
统计函数语义特征,通过粗粒度相似度计算筛选出前M名相似函数,并添加至候选函数集;
对候选函数集中函数,利用数据流依赖和程序控制流进行后向切片,获取用于表示函数关键语义的约束推导式集;
通过比较约束推导式集,获取目标函数与比较函数最终相似度得分;依据相似度得分,选取前N名的函数作为专家验证分析内容,其中,N≤M。
作为本发明软件相似性度量方法,进一步地,反汇编二进制程序代码,获取中间语言LLVM IR;对中间语言LLVM IR分别进行规范化和标准化处理。
作为本发明软件相似性度量方法,进一步地,中间语言规范化处理中,针对LLVMIR的指针计算指令,根据数组或结构体的元素索引计算得到字节偏移,并合并内存加载指令,将其表示成基地址加字节偏移的形式;针对LLVM IR的存放指针指令,将指针偏移计算和指针类型转换指令转换成字节偏移,并合并内存加载指令,将其表示成基地址加字节偏移的形式;并利用llvm自带的遍指令处理中间语言的其他规范化表示,该其他规范化表示至少包含死代码消除、表达式重组合、冗余指令合并、变量规范化归纳及跳转线程。
作为本发明软件相似性度量方法,进一步地,中间语言标准化处理中,将自定义子函数、局部变量、基本块标签及全局地址均分别依次按顺序编号命名。
作为本发明软件相似性度量方法,进一步地,统计函数语义特征中,首先提取函数控制流程图,并通过函数语义特征统计将数据基本块进行向量化,得到函数控制流程属性图;再利用图嵌入算法聚合函数控制流程属性图,得到固定维度的图向量;通过计算图向量距离实现粗粒度相似度计算。
作为本发明软件相似性度量方法,进一步地,约束推导式集表示为C→T,在满足约束式C的情况下,函数按切片路径执行到目的指令T。
作为本发明软件相似性度量方法,进一步地,选取返回指令和危险子函数调用指令作为函数的后向切片起始点T,如返回指令的后一指令为选择指令,则遍历不同的取值分别作为切片起始点,将起始指令的操作数存进数据依赖集S中;切片过程中,如果新指令的左值已经在数据依赖集S里,则认为指令与切片的起始指令有数据依赖性,弹出数据依赖集S里的左值,并将新指令的非常数类型操作数存进数据依赖集S;如果指令同时是约束类指令,则先查看约束集里是否有约束推导式对新指令的左值进行约束,如果有则弹出此约束推导式,并依赖此约束推导式求出新的约束推导式,新约束推导式存进约束集C中;对于有多种约束的情况,则分不同情况进行遍历,最后得到函数所有的约束推导式集C→T。
作为本发明软件相似性度量方法,进一步地,通过计算字符串的编辑距离来比较约束推导式集并求得函数相似度得分。
作为本发明软件相似性度量方法,进一步地,比较约束推导式集中,首先,将约束推导式集C→T转成字符串TC;然后,对约束推导式tici(ti∈T,ci∈C)按字符串顺序排序,并将排序后的约束推导式拼接,得TC=t0c0t1c1...tjcj;计算字符串编辑距离,得到函数相似度得分。
更进一步地,本发明还提供一种软件相似性度量装置,包含:预处理模块、分析筛选模块、约束推导模块和相似度量模块,其中,
预处理模块,用于针对二进制程序,通过反汇编得到中间代码,并对中间代码进行规范化和标准化处理;
分析筛选模块,用于统计函数语义特征,通过粗粒度相似度计算筛选出前M名相似函数,并添加至候选函数集;
约束推导模块,用于对候选函数集中函数,利用数据流依赖和程序控制流进行后向切片,获取用于表示函数关键语义的约束推导式集;
相似度量模块,用于通过比较约束推导式集,获取目标函数与比较函数最终相似度得分;依据相似度得分,选取前N名的函数作为专家验证分析内容,其中,N≤M。
本发明的有益效果:
本发明通过对软件反编译得到的代码进行规范化和标准化表示,可有效减少程序在不同的系统架构、操作系统、编译器和优化选项下代码差异性,能够提高相似性度量的准确率;并依赖函数数据流和控制流对函数进行后向切片,得到表示函数关键语义的约束式推导式,通过对约束式推导式的比较,可有效的筛选出与漏洞函数语义非常相似的补丁升级函数,具有较好的应用前景。
附图说明:
图1为实施例中相似性度量方法流程图;
图2为实施例中相似性度量原理框图;
图3为实施例中同一函数在不同编译器和优化选项下产生的程序控制流程图对比示意;
图4为实施例中内存加载数据操作规范化表示示意;
图5为实施例中在不同编译器和优化选项下同一函数规划化表示后的对比示意;
图6为实施例中约束推导式示意;
图7为实施例中相似性度量装置示意图。
具体实施方式:
为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
针对目前软件漏洞挖掘领域存在较高误报率等情形,本发明实施例,参见图1所示,提供一种软件相似性度量方法,包含如下内容:
S101)针对二进制程序,通过反汇编得到中间代码,并对中间代码进行规范化和标准化处理;
S102)统计函数语义特征,通过粗粒度相似度计算筛选出前M名相似函数,并添加至候选函数集;
S103)对候选函数集中的函数,利用数据流依赖和程序控制流进行后向切片,获取用于表示函数关键语义的约束推导式集;
S104)通过比较约束推导式集,获取目标函数与比较函数最终相似度得分;依据相似度得分,选取前N名的函数作为专家验证分析内容,其中,N≤M。
首先对反编译得到的中间代码进行规范化和标准化表示,以减小语义特征统计的差异性;再统计函数语义特征,做粗粒度的相似度计算,筛选出前M名相似候选函数;然后利用数据流依赖和程序控制流对函数进行后向切片,求出能表示函数关键语义的约束推导式集,对函数的约束推导式集做相似度计算,再筛选出前N(N≤M)名相似候选函数,实现增强型的软件相似性度量,提升程序相似性度量的执行效率和准确率。
中间语言(IR,Intermediate Representation):是介于高级语言和低级语言之间的表示。源自于编译器术语,在编译器将源代码编译为目标码的过程中,会先将源代码转换为一个或多个的中间表述,以方便编译器进行优化。LLVM IR是目前最流行的中间语言之一。
作为本发明实施例中的软件相似性度量方法,进一步地,反汇编二进制程序代码,获取中间语言LLVM IR;对中间语言LLVM IR分别进行规范化和标准化处理。
可先使用LLVM的opt优化工具对中间语言进行O3等级的优化,因为常用的规范化表示遍(pass)包含在里面。
使用反编译器将二进制程序反编译,得到中间语言LLVM IR。参见图3所示,可以观察到同源代码在不同编译器和优化选项下,其反编译代码的表示也存在较大的差别。
作为本发明实施例中的软件相似性度量方法,进一步地,中间语言规范化处理中,参见图4所示,针对LLVM IR的getelementptr指针计算指令,根据数组或结构体的元素索引计算得到字节偏移,并合并内存加载指令,将其表示成基地址加字节偏移的形式;针对LLVMIR的inttoptr存放指针指令,将指针偏移计算和指针类型转换指令转换成字节偏移,并合并内存加载指令,将其表示成基地址加字节偏移的形式;并利用llvm自带的遍处理中间语言的其他规范化表示,该其他规范化表示至少包含死代码消除、表达式重组合、冗余指令合并、变量规范化归纳及跳转线程。
作为本发明实施例中的软件相似性度量方法,进一步地,中间语言标准化处理中,将自定义子函数、局部变量、基本块标签及全局地址均分别依次按顺序编号命名。其中,自定义子函数命名格式可表示为Fun0、Fun1、Fun2;局部变量按顺序编号命名,格式如Var0、Var1、Var2;基本块标签按顺序编号命名,格式如BB0、BB1、BB2;全局地址顺序编号命名,格式如Addr0、Addr1、Addr2;
如图5所示,可以观察到不同编译器和优化等级的代码在规范化、标准化后,已经接近相似。
作为本发明实施例中的软件相似性度量方法,进一步地,统计函数语义特征中,首先提取函数控制流程图,并通过函数语义特征统计将数据基本块进行向量化,得到函数控制流程属性图;再利用图嵌入算法聚合函数控制流程属性图,得到固定维度的图向量;通过计算图向量距离实现粗粒度相似度计算。
可选取目前相似性度量方法常用的7个基本块特征,将基本块B表示成1×7维的向量x,7个基本块特征具体描述如表1所示:
表1:基本块统计特征
近年来,伴随着人工智能的快速发展,机器学习等学习模型开始被应用在软件相似性分析领域。广义上来说,基于学习模型的软件相似性分析也属于静态分析,它通过对大规模软件数据的预训练建立起学习模型,借助模型可以对未知软件进行相似度的预测。孪神经网络:又叫双胞胎神经网络。孪生神经网络有两个输入,分别连接两个神经网络(其网络的权值相同);两个神经网络分别将输入映射到新的空间,形成新的嵌入表示;最后通过损失函数的计算,评价两个输入的相似度。
可选用Structure2Vec算法作为图嵌入算法,使用余弦公式计算向量距离,使用孪神经网络作为学习模型的网络架构;
Structure2Vec算法具体描述如下:
Structure2Vec算法:图嵌入生成
其中N(x)为图g′中与顶点x相邻的顶点集合;t为迭代次数,是我们的学习模型中的超参数;W1为学习模型的权重矩阵,在训练模型时学习获得,矩阵大小设置为d×p;
σ(lx)=P1×ReLU(P2×...ReLU(Pnl)),其中n为嵌入层数,ReLU为激活函数,具体为ReLU=Max(0,x);Pi为p×p的全连接矩阵,在训练模型时学习获得;W2是p×p的全连接矩阵,在训练模型时学习获得。
余弦公式如下:
作为本发明实施例中的软件相似性度量方法,进一步地,约束推导式集表示为C→T,在满足约束式C的情况下,函数按切片路径执行到目的指令T。
对候选集F里的函数f进行后向切片,求出包含了数据依赖性和控制流信息的约束推导式集C→T,其含义是在满足约束式C的情况下,函数可以按切片路径执行到目的指令T。算法的具体描述可设计为如下内容:
后向切片算法:约束推导式集生成
选取返回指令和危险子函数调用指令作为函数的后向切片起始点T,如返回指令的后一指令为选择指令,则需遍历不同的取值分别作为切片起始点,将起始指令的操作数(rValue)存进数据依赖集S中;切片过程中,如果新指令的左值(lValue)已经在数据集S里,则认为此指令与切片的起始指令有数据依赖性,弹出(pop)数据集S里的值(lValue),并将新指令的非常数类型操作数(rValue)存进(push)依赖数据集S;如果指令同时是约束类指令,则先查看约束集里是否有约束推导式对新指令的右值进行约束,如果有则弹出此约束推导式,并依赖此约束推导式求出新的约束推导式,存进新约束推导式到约束集C中,对于有多种约束的情况,则分不同情况进行遍历,最后得到函数所有的约束推导式集C→T。图6为算法提取一个约束推导式的示例。
作为本发明实施例中的软件相似性度量方法,进一步地,通过计算字符串的编辑距离来比较约束推导式集并求得函数相似度得分sim2=dist((C→T)1,(C→T)2)。
进一步地,比较约束推导式集中,首先,将约束推导式集C→T转成字符串TC;然后,对约束推导式tici(ti∈T,ci∈C)按字符串顺序排序,并将排序后的约束推导式拼接,得TC=t0c0t1c1...tjcj;计算字符串编辑距离,得到函数相似度得分。其中,计算字符串编辑距离来求函数相似度度量sim2公式可表示为:
sim2=(1-dist(TC1,TC2)/max(len(TC1),len(TC2)))*w
其中,函数dist(TC1,TC2)为计算字符串TC1、TC2的编辑距离,函数len(TC)为计算字符串TC的长度,系数w=(minnum((C→T)1,(C→T)2)/maxnum(C→T)1,(C→T)2),函数minnum、maxnum的计算公式如下:
minnum=min((|C1|+|T1|),(|C2|+|T2|))
maxnum=max((|C1|+|T1|),(|C2|+|T2|))
更进一步地,本发明实施例还提供一种软件相似性度量装置,参见图7所示,包含:预处理模块、分析筛选模块、约束推导模块和相似度量模块,其中,
预处理模块,用于针对二进制程序,通过反汇编得到中间代码,并对中间代码进行规范化和标准化处理;
分析筛选模块,用于统计函数语义特征,通过粗粒度相似度计算筛选出前M名相似函数,并添加至候选函数集;
约束推导模块,用于对候选函数集中函数,利用数据流依赖和程序控制流进行后向切片,获取用于表示函数关键语义的约束推导式集;
相似度量模块,用于通过比较约束推导式集,获取目标函数与比较函数最终相似度得分;依据相似度得分,选取前N名的函数作为专家验证分析内容,其中,N≤M。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。
基于上述的方法,本发明实施例还提供一种服务器,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述的方法。
基于上述的方法,本发明实施例还提供一种计算机可读介质,其上存储有计算机程序,其中,该程序被处理器执行时实现上述的方法。
本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (9)
1.一种软件相似性度量方法,其特征在于,包含:
针对二进制程序,通过反汇编得到中间代码,并对中间代码进行规范化和标准化处理;
统计函数语义特征,通过粗粒度相似度计算筛选出前M名相似函数,并添加至候选函数集;
对候选函数集中函数,利用数据依赖和程序控制流进行后向切片,获取用于表示函数关键语义的约束推导式集;
通过比较约束推导式集,获取目标函数与比较函数最终相似度得分;依据相似度得分,选取前N名的函数作为专家验证分析内容,其中,N≤M;
统计函数语义特征中,首先提取函数控制流程图,并通过函数语义特征统计将数据基本块进行向量化,得到函数控制流程属性图;再利用图嵌入算法聚合函数控制流程属性图,得到固定维度的图向量;通过计算图向量距离实现粗粒度相似度计算。
2.根据权利要求1所述的软件相似性度量方法,其特征在于,反汇编二进制程序代码,获取中间语言LLVM IR;对中间语言LLVM IR分别进行规范化和标准化处理。
3.根据权利要求2所述的软件相似性度量方法,其特征在于,中间语言规范化处理中,针对LLVM IR的指针计算指令,根据数组或结构体的元素索引计算得到字节偏移,并合并内存加载指令,将其表示成基地址加字节偏移的形式;针对LLVM IR的存放指针指令,将指针偏移计算和指针类型转换指令转换成字节偏移,并合并内存加载指令,将其表示成基地址加字节偏移的形式;并利用LLVM IR自带的遍处理中间语言的其他规范化表示,该其他规范化表示至少包含死代码消除、表达式重组合、冗余指令合并、变量规范化归纳及跳转线程。
4.根据权利要求2或3所述的软件相似性度量方法,其特征在于,中间语言标准化处理中,将自定义子函数、局部变量、基本块标签及全局地址均分别依次按顺序编号命名。
5.根据权利要求1所述的软件相似性度量方法,其特征在于,约束推导式集表示为C→T,在满足约束式C的情况下,函数按切片路径执行到目的指令T。
6.根据权利要求5所述的软件相似性度量方法,其特征在于,后向切片过程中,选取返回指令和危险子函数调用指令作为函数的后向切片起始点T,将起始指令的操作数存进数据依赖集S中;如果新指令的左值已经在数据依赖集S里,则弹出数据依赖集S里的左值,将新指令的非常数类型操作数存进数据依赖集S;如果指令同时是约束类指令,则先查看约束集里是否有约束推导式对新指令的左值进行约束,如果有则弹出此约束推导式,并依赖此约束推导式求出新的约束推导式,将新约束推导式存进约束集C中;对于有多种约束的情况,则分不同情况进行遍历,最后得到函数所有的约束推导式集C→T。
7.根据权利要求1所述的软件相似性度量方法,其特征在于,通过计算字符串的编辑距离来比较约束推导式集并求得函数相似度得分。
8.根据权利要求1或7所述的软件相似性度量方法,其特征在于,比较约束推导式集中,首先,将约束推导式集C→T转成字符串TC;然后,对约束推导式tici按字符串顺序排序,ti∈T,ci∈C,并将排序后的约束推导式拼接,得TC=t0c0t1c1…tjcj;计算字符串编辑距离,得到函数相似度得分。
9.一种软件相似性度量装置,其特征在于,基于权利要求1所述的软件相似性度量方法实现,包含:预处理模块、分析筛选模块、约束推导模块和相似度量模块,其中,
预处理模块,用于针对二进制程序,通过反汇编得到中间代码,并对中间代码进行规范化和标准化处理;
分析筛选模块,用于统计函数语义特征,通过粗粒度相似度计算筛选出前M名相似函数,并添加至候选函数集;
约束推导模块,用于对候选函数集中函数,利用数据依赖和程序控制流进行后向切片,获取用于表示函数关键语义的约束推导式集;
相似度量模块,用于通过比较约束推导式集,获取目标函数与比较函数最终相似度得分;依据相似度得分,选取前N名的函数作为专家验证分析内容,其中,N≤M。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911189881.5A CN110990058B (zh) | 2019-11-28 | 2019-11-28 | 软件相似性度量方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911189881.5A CN110990058B (zh) | 2019-11-28 | 2019-11-28 | 软件相似性度量方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110990058A CN110990058A (zh) | 2020-04-10 |
CN110990058B true CN110990058B (zh) | 2020-08-21 |
Family
ID=70087737
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911189881.5A Active CN110990058B (zh) | 2019-11-28 | 2019-11-28 | 软件相似性度量方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110990058B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112308210B (zh) * | 2020-10-27 | 2023-04-07 | 中国人民解放军战略支援部队信息工程大学 | 基于神经网络的跨架构二进制函数相似性检测方法及系统 |
CN112379922B (zh) * | 2020-11-24 | 2022-07-05 | 中国科学院信息工程研究所 | 一种程序比对方法及系统 |
TWI767582B (zh) * | 2021-02-23 | 2022-06-11 | 財團法人資訊工業策進會 | 檔案弱點檢測系統及其檢測方法 |
CN113240041B (zh) * | 2021-05-28 | 2022-11-08 | 北京理工大学 | 融合影响因子的二进制函数相似性检测方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106295335A (zh) * | 2015-06-11 | 2017-01-04 | 中国科学院信息工程研究所 | 一种面向嵌入式设备的固件漏洞检测方法及系统 |
CN108170467A (zh) * | 2017-12-02 | 2018-06-15 | 西安财经学院 | 约束限定聚类和信息度量软件胎记特征选择方法、计算机 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8443343B2 (en) * | 2009-10-28 | 2013-05-14 | Intel Corporation | Context-sensitive slicing for dynamically parallelizing binary programs |
CN102298681B (zh) * | 2011-06-22 | 2013-07-31 | 西北大学 | 一种基于数据流切片的软件识别方法 |
US20130179863A1 (en) * | 2012-01-11 | 2013-07-11 | Microsoft Corporation | Bug variant detection using program analysis and pattern identification |
KR101583133B1 (ko) * | 2014-03-26 | 2016-01-07 | 단국대학교 산학협력단 | 스택 기반 소프트웨어 유사도 평가 방법 및 장치 |
CN108256325A (zh) * | 2016-12-29 | 2018-07-06 | 中移(苏州)软件技术有限公司 | 一种恶意代码变种的检测的方法和装置 |
US10514909B2 (en) * | 2017-03-29 | 2019-12-24 | Technion Research & Development Foundation Limited | Similarity of binaries |
CN107357566A (zh) * | 2017-06-06 | 2017-11-17 | 上海交通大学 | 多架构二进制相似代码检测系统及方法 |
CN108399321B (zh) * | 2017-11-03 | 2021-05-18 | 西安邮电大学 | 基于动态指令依赖图胎记的软件局部抄袭检测方法 |
-
2019
- 2019-11-28 CN CN201911189881.5A patent/CN110990058B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106295335A (zh) * | 2015-06-11 | 2017-01-04 | 中国科学院信息工程研究所 | 一种面向嵌入式设备的固件漏洞检测方法及系统 |
CN108170467A (zh) * | 2017-12-02 | 2018-06-15 | 西安财经学院 | 约束限定聚类和信息度量软件胎记特征选择方法、计算机 |
Also Published As
Publication number | Publication date |
---|---|
CN110990058A (zh) | 2020-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110990058B (zh) | 软件相似性度量方法及装置 | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN111125716B (zh) | 一种以太坊智能合约漏洞检测方法及装置 | |
CN112733137B (zh) | 一种面向漏洞检测的二进制代码相似性分析方法 | |
CN109063055B (zh) | 同源二进制文件检索方法和装置 | |
CN110287702B (zh) | 一种二进制漏洞克隆检测方法及装置 | |
CN113900923B (zh) | 一种跨指令集架构的二进制函数相似性检查系统及方法 | |
CN113010209A (zh) | 一种抗编译差异的二进制代码相似性比较技术 | |
US20160321039A1 (en) | Technology mapping onto code fragments | |
CN115373737B (zh) | 一种基于特征融合的代码克隆检测方法 | |
Liu et al. | Learning graph-based code representations for source-level functional similarity detection | |
Armengol-Estapé et al. | SLaDe: A Portable Small Language Model Decompiler for Optimized Assembly | |
CN113312058B (zh) | 一种智能合约二进制函数的相似性分析方法 | |
CN115033884A (zh) | 基于危险函数参数依赖的二进制代码漏洞检测方法 | |
Wang et al. | Gvd-net: Graph embedding-based machine learning model for smart contract vulnerability detection | |
CN117056919A (zh) | 一种基于深度学习的软件漏洞检测方法及系统 | |
CN114780103B (zh) | 一种基于图匹配网络的语义类代码克隆检测方法 | |
CN116662991A (zh) | 基于人工智能的智能合约意图检测方法 | |
KR102671575B1 (ko) | 교차 아키텍처 바이너리에 대한 이진 비교 방법 | |
Wang et al. | [Retracted] Hierarchical Attention Graph Embedding Networks for Binary Code Similarity against Compilation Diversity | |
CN116628695A (zh) | 基于多任务学习的漏洞挖掘方法及装置 | |
CN113031952A (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
CN112306502A (zh) | 一种代码生成方法及装置 | |
Pucher et al. | Detecting Obfuscated Function Clones in Binaries using Machine Learning | |
Li et al. | GenTAL: Generative Denoising Skip-gram Transformer for Unsupervised Binary Code Similarity Detection |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |