CN114610606A - 基于到达-定值分析的二进制模块相似性匹配方法及装置 - Google Patents
基于到达-定值分析的二进制模块相似性匹配方法及装置 Download PDFInfo
- Publication number
- CN114610606A CN114610606A CN202210180454.6A CN202210180454A CN114610606A CN 114610606 A CN114610606 A CN 114610606A CN 202210180454 A CN202210180454 A CN 202210180454A CN 114610606 A CN114610606 A CN 114610606A
- Authority
- CN
- China
- Prior art keywords
- function
- anchor
- functions
- suc
- basic block
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供一种基于到达‑定值分析的二进制模块相似性匹配方法及装置,所述方法包括:获取两个待匹配的二进制模块A、B;构建初始锚函数;选择锚函数集合Sa、Sb存在对应关系的函数fa、fb;选择与fa、fb具有调用关系的函数得到集合Ca、Cb;基于到达‑定值分析,得到fa、fb与Ca、Cb中函数之间的数据依赖关系,结合统计特征生成Ca和Cb的特征矩阵;对两个特征矩阵进行EMD计算,确定Ca和Cb中存在对应关系的函数对<a1,b1>…<at,bt>,得到新的锚函数添加到Sa和Sb;选择Sa和Sb中未分析的锚函数重复上述过程,进一步扩大模块相似性比较的匹配范围。根据本发明的方案,可以为模块级二进制代码相似性分析提供信息支持,能够应用于二进制恶意代码检测与二进制漏洞检测中。
Description
技术领域
本发明涉及软件分析和漏洞挖掘领域,尤其涉及一种基于到达-定值分析的二进制模块相似性匹配方法及装置。
背景技术
二进制代码比较的方法是二进制代码分析的一个重要的研究分支,它通过比较两个二进制文件中的函数的相似程度,确定其中函数之间的对应关系。二进制代码比较的方法可以广泛应用于代码剽窃检测、恶意代码检测和漏洞检测等领域。二进制代码比较难度要大于源代码的比较,这是因为源码中包含了大量的代码语义特征信息,而二进制文件中多因为符号表剥离的问题,导致函数名称发生变化,无法直接通过函数名分析对应函数,同时,二进制文件编译过程中由于编译优化导致的函数内联、指令重排序、指令转换、冗余消除等问题,导致二进制文件分析时的代码特征信息远少于源码文件。
当前物联网技术得到了广泛使用,物联网中固件的部分功能基于的是已有开源库中的代码实现,这就导致了开源库中的漏洞传播到了多为mips或者arm架构的固件中,因此,跨架构的漏洞检测或者是函数功能检测十分重要和必要。将二进制文件比较的方法应用于跨架构的文件分析中,特别是跨架构的漏洞检测中,可以有效检测出由于代码复用而导致的跨架构漏洞传播,如检测X86或者X64系统中的漏洞是否存于mips或者arm架构的固件中。
近年来,已经有些研究人员开始着手解决跨体系的二进制代码相似性检测的问题。Pewny等人最早提出使用漏洞签名来搜索二进制代码中不同体系结构的已知漏洞。Genius和Gemini是关于跨体系结构漏洞搜索的两个最具代表性的工具。它们分别利用传统的机器学习和深度学习,将函数的CFG转化为向量进行相似性比较。这些方法都是基于函数级别进行的跨架构二进制相似性比较。还有一些相对较为成熟的工具,例如Diaphora,BinDiff和TurboDiff。这些方案进行了程序级别的比较,得到两个二进制文件之间所有函数的最可能的对应关系,在进行比较时,使用了最小素数方法进行基本块的匹配,Diaphora使用关键字,如伪代码、地址、函数哈希等作为匹配的基础,TruboDiff采用函数调用图、基本块签名等内容来获取函数的对应关系。但是这些工具使用的特征过于严格,在跨平台和跨优化选项等对二进制代码特征有较大影响的因素上的检测精确度较差。
现有进行程序级别二进制文件匹配的方法如图1所示,首先给定两个二进制文件或者模块,对其进行反汇编,得到其使用的所有函数,之后分别对两个文件中的函数进行特征提取,如函数基本块的指纹,函数的哈希等。最后对两个文件中的所有函数进行相似性匹配,获取最可能的函数匹配结果。该方法可以快速生成函数的特征,效率较高,但是这种方法生成的特征受架构和优化选项的影响大,对跨架构的二进制文件的检测效率低。此外,现有的二进制文件匹配的方法需要对文件中的所有函数进行匹配,这种方法需要的时间长,且由于部分函数的特征过粗,因此,即使在同架构的二进制文件函数匹配时,依然存在准确率不高的问题。
因此,本申请着眼于解决跨平台和优化选项条件下二进制文件中函数的对应关系获取。
发明内容
为解决上述技术问题,本发明提出了一种基于到达-定值分析的二进制模块相似性匹配方法及装置,用以解决现有技术中程序级别的二进制文件函数匹配的问题,主要解决跨架构代码复用后得到的功能模块或者库中的函数匹配问题,提出了一种基于到达-定值分析的二进制模块匹配方法。为了对二进制模块中的所有函数进行匹配,本发明定义了锚函数,基于锚函数和函数调用关系得到规模小的多个待选函数集合,对待选函数集合中的函数进行数据流分析,使用到达-定值分析的方法来获取函数的数据流的向量表示,最后使用搬土距离EMD(Earth Mover’s Distance)来得到待选函数集合中的函数对应关系,这种方法能够处理跨架构、跨编译优化选项和跨版本的二进制模块匹配,且结果要比当前的成熟工具BinDiff,TurboDiff和Gemini更加准确。
根据本发明的第一方面,提供一种基于到达-定值分析的二进制模块相似性匹配方法,所述方法包括以下步骤:
步骤S1:获取两个待匹配的二进制模块A、B;使用常量字符串、函数参数个数和函数内部常量最大频数值三个指标,确定A和B中存在对应关系的函数,将A和B中使用所述三个指标确定的存在对应关系的函数作为初始锚函数;所述锚函数为二进制模块A、B中存在对应关系的函数,是获取其他函数之间对应关系的基准函数;对于两个待匹配的二进制模块A、B,将确定的初始锚函数加入两个模块各自的锚函数集合Sa和Sb中;
步骤S2:判断锚函数集合Sa和Sb中是否存在未进行调用分析的锚函数,如果不存在,迭代完成,方法结束;若存在,则选择锚函数集合Sa、Sb中未进行调用分析、但存在对应关系的一对锚函数fa、fb,满足fa∈Sa,fb∈Sb,进入步骤S3;
步骤S3:分别获取所述待匹配的二进制文件的锚函数fa、fb,对其进行调用关系分析;在所述待匹配的二进制模块A、B中,分别获取与锚函数fa、fb具有调用关系的函数,基于所述与锚函数fa、fb具有调用关系的函数,分别构建属于模块A和B的函数集Ca、Cb,并将函数集Ca、Cb作为候选函数集;
步骤S4:对锚函数fa及候选函数集Ca中的函数、锚函数fb及候选函数集Cb中的函数均执行以下操作:基于到达-定值分析,对锚函数及其对应的候选函数集中的每一个函数之间的指令数据依赖关系进行分析,获得锚函数fa和Ca中的每一个函数的到达-定值数据流向量、以及锚函数fb和Cb中的每一个函数的到达-定值数据流向量,将分属于候选函数集Ca和Cb每一个函数与锚函数之间的到达-定值数据流向量作为该函数特征向量的一部分;同时,分析得到Ca和Cb函数集中的每一个函数的出度、入度、跳转指令个数、函数的参数个数、立即数的频数,并对Ca和Cb中的所述每一个函数,将其立即数的频数数量按从高到底的顺序排序,获取所述每一个函数的排序在前3位的立即数的频数数值;这样对于Ca和Cb中的每一个函数,将该函数的到达-定值数据流向量、该函数的出度、入度、跳转指令个数、排序在前3位的立即数的频数数值、以及该函数的参数个数合并得到一个新的向量,作为该函数的特征向量;
步骤S5:将函数集Ca中所有的函数的特征向量构建一个特征矩阵,函数集Cb中所有函数的特征向量也构建特征矩阵,对两个特征矩阵进行EMD计算,基于EMD计算结果,确定分别属于两个函数集,且存在对应关系的多个函数对<a1,b1><a2,b2>…<at,bt>,其中,{a1,a2,…at}∈Ca,{b1,b2,…bt}∈Cb,将这些函数作为新的锚函数,分别添加到锚函数集合Sa、Sb,进入步骤S2。
根据本发明第二方面,提供一种基于到达-定值分析的二进制模块相似性匹配装置,所述装置包括:
数据获取模块:配置为获取两个待匹配的二进制模块A、B;使用常量字符串、函数参数个数和函数内部常量最大频数值三个指标,确定A和B中存在对应关系的函数,将A和B中使用所述三个指标确定的存在对应关系的函数作为初始锚函数;所述锚函数为二进制模块A、B中存在对应关系的函数,是获取其他函数之间对应关系的基准函数;对于两个待匹配的二进制模块A、B,将确定的初始锚函数加入两个模块各自的锚函数集合Sa和Sb中;
判断模块:配置为判断锚函数集合Sa和Sb中是否存在未进行调用分析的锚函数,如果不存在,迭代完成,方法结束;若存在,则选择锚函数集合Sa、Sb中未进行调用分析、但存在对应关系的一对锚函数fa、fb,满足fa∈Sa,fb∈Sb,触发候选函数获取模块;
候选函数获取模块:配置为分别获取所述待匹配的二进制文件的锚函数fa、fb,对其进行调用关系分析;在所述待匹配的二进制模块A、B中,分别获取与锚函数fa、fb具有调用关系的函数,基于所述与锚函数fa、fb具有调用关系的函数,分别构建属于模块A和B的函数集Ca、Cb,并将函数集Ca、Cb作为候选函数集;
向量获取模块:配置为对锚函数fa及候选函数集Ca中的函数、锚函数fb及候选函数集Cb中的函数均执行以下操作:基于到达-定值分析,对锚函数及其对应的候选函数集中的每一个函数之间的指令数据依赖关系进行分析,获得锚函数fa和Ca中的每一个函数的到达-定值数据流向量、以及锚函数fb和Cb中的每一个函数的到达-定值数据流向量,将分属于候选函数集Ca和Cb每一个函数与锚函数之间的到达-定值数据流向量作为该函数特征向量的一部分;同时,分析得到Ca和Cb函数集中的每一个函数的出度、入度、跳转指令个数、函数的参数个数、立即数的频数,并对Ca和Cb中的所述每一个函数,将其立即数的频数数量按从高到底的顺序排序,获取所述每一个函数的排序在前3位的立即数的频数数值;这样对于Ca和Cb中的每一个函数,将该函数的到达-定值数据流向量、该函数的出度、入度、跳转指令个数、排序在前3位的立即数的频数数值、以及该函数的参数个数合并得到一个新的向量,作为该函数的特征向量;
距离计算模块:配置为将函数集Ca中所有的函数的特征向量构建一个特征矩阵,函数集Cb中所有函数的特征向量也构建特征矩阵,对两个特征矩阵进行EMD计算,基于EMD计算结果,确定分别属于两个函数集,且存在对应关系的多个函数对<a1,b1><a2,b2>…<at,bt>,其中,{a1,a2,…at}∈Ca,{b1,b2,…bt}∈Cb,将这些函数作为新的锚函数,分别添加到锚函数集合Sa、Sb,触发判断模块。
根据本发明第三方面,提供一种基于到达-定值分析的二进制模块相似性匹配系统,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如前所述基于到达-定值分析的二进制模块相似性匹配方法。
根据本发明第四方面,提供一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如前所述基于到达-定值分析的二进制模块相似性匹配方法。
根据本发明的上述方案,该方法公开了基于到达-定值分析的二进制模块相似性匹配方法,这种方法能够克服二进制代码缺失调试信息、编译优化和不同架构下的实现差异,使用简单特征提取与深度特征提取的方法来对两个二进制文件或者功能模块进行函数匹配。实现的匹配方法具有更高的效率和较高的精确度,该技术可以为二进制文件分析提供信息支持,能够应用于二进制恶意代码检测与二进制漏洞检测技术中,此外,该二进制相似性分析技术还可以应用于软件供应链安全分析过程中。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明提供如下附图进行说明。在附图中:
图1为现有技术程序级别二进制文件匹配的方法流程图;
图2为本发明一个实施方式的基于到达-定值分析的二进制模块相似性匹配方法流程图;
图3为本发明一个实施方式的基于到达-定值分析的二进制模块相似性匹配整体架构图;
图4为本发明一个实施方式的锚函数多次迭代覆盖的函数图形化示意图;
图5为本发明一个实施方式的DIR655与OpenSSL在多次迭代的函数匹配结果。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
术语解释:
漏洞:漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。
EMD(earth mover distance)距离:在计算机科学与技术中,地球移动距离(EMD)是一种在D区域两个概率分布距离的度量,就是被熟知的Wasserstein度量标准。
基本块:二进制文件中的基本块是指程序中顺序执行的最大连续执行的指令序列,满足:1)控制流只能从基本块的第一个指令进入该块,即单入口;2)除了基本块的最后一个指令,控制流在离开基本块之前不会跳转,即单出口。
前驱基本块和后继基本块:在将二进制程序按照基本块进行划分后,控制流图的构造基于控制依赖关系。根据基本块的特征描述,如果两个基本块BB和CC之间存在控制依赖关系,则需要满足两个条件之一:有一个从BB最后一条指令跳转到CC的起始指令的跳转语句;或者是在指令序列中,基本块CC的第一条指令紧跟在BB的最后一条指令之后,且在BB的结尾不存在无条件跳转语句。基于基本块BB和CC的控制依赖关系,将BB称为CC的前驱基本块,将CC称为BB的后继基本块。
到达-定值分析:在二进制程序分析中,定值是指在程序的某一个位置(基本块或者指令)对变量x进行的任何赋值;而变量x的定值能够到达某个程序点,则说明存在有一条从x的这个定值到该程序点的路径且中间没有对x重新定值。到达-定值分析是基于数据流分析进行的。
函数调用图:程序调用图是一个有向图,它能够反映程序中的函数之间的调用关系。其中,函数调用图中的每一个节点表示一个函数,而每一条边,如(f,g)表示函数f和g之间的函数调用关系。
首先结合图2说明为本发明一个实施方式的基于到达-定值分析的二进制模块相似性匹配方法流程图。对于要进行匹配的两个模块F和G,首先使用定义1对模块中的锚函数进行定义,
定义1:给定两个待匹配模块F和G,其中F包含函数集合{f1,f2,...,fh},G包含函数集合{g1,g2,...,gl},将函数f和g定义为锚函数,如果f和g存在对应关系,即两个函数确定相似,且满足f∈{f1,f2,...,fh},g∈{g1,g2,...,gl}。
基于到达-定值分析的二进制模块相似性匹配方法如图2-3所示,所述方法包括以下步骤:
步骤S1:获取两个待匹配的二进制模块A、B;使用常量字符串、函数参数个数和函数内部常量最大频数值三个指标,确定A和B中存在对应关系的函数,将A和B中使用所述三个指标确定的存在对应关系的函数作为初始锚函数;所述锚函数为二进制模块A、B中存在对应关系的函数,是获取其他函数之间对应关系的基准函数;对于两个待匹配的二进制模块A、B,将确定的初始锚函数加入两个模块各自的锚函数集合Sa和Sb中;
步骤S2:判断锚函数集合Sa和Sb中是否存在未进行调用分析的锚函数,如果不存在,迭代完成,方法结束;若存在,则选择锚函数集合Sa、Sb中未进行调用分析、但存在对应关系的一对锚函数fa、fb,满足fa∈Sa,fb∈Sb,进入步骤S3;
步骤S3:分别获取所述待匹配的二进制文件的锚函数fa、fb,对其进行调用关系分析;在所述待匹配的二进制模块A、B中,分别获取与锚函数fa、fb具有调用关系的函数,基于所述与锚函数fa、fb具有调用关系的函数,分别构建属于模块A和B的函数集Ca、Cb,并将函数集Ca、Cb作为候选函数集;
步骤S4:对锚函数fa及候选函数集Ca中的函数、锚函数fb及候选函数集Cb中的函数均执行以下操作:基于到达-定值分析,对锚函数及其对应的候选函数集中的每一个函数之间的指令数据依赖关系进行分析,获得锚函数fa和Ca中的每一个函数的到达-定值数据流向量、以及锚函数fb和Cb中的每一个函数的到达-定值数据流向量,将分属于候选函数集Ca和Cb每一个函数与锚函数之间的到达-定值数据流向量作为该函数特征向量的一部分;同时,分析得到Ca和Cb函数集中的每一个函数的出度、入度、跳转指令个数、函数的参数个数、立即数的频数,并对Ca和Cb中的所述每一个函数,将其立即数的频数数量按从高到底的顺序排序,获取所述每一个函数的排序在前3位的立即数的频数数值;这样对于Ca和Cb中的每一个函数,将该函数的到达-定值数据流向量、该函数的出度、入度、跳转指令个数、排序在前3位的立即数的频数数值、以及该函数的参数个数合并得到一个新的向量,作为该函数的特征向量;
步骤S5:将函数集Ca中所有的函数的特征向量构建一个特征矩阵,函数集Cb中所有函数的特征向量也构建特征矩阵,对两个特征矩阵进行EMD计算,基于EMD计算结果,确定分别属于两个函数集,且存在对应关系的多个函数对<a1,b1><a2,b2>…<at,bt>,其中,{a1,a2,…at}∈Ca,{b1,b2,…bt}∈Cb,将这些函数作为新的锚函数,分别添加到锚函数集合Sa、Sb,进入步骤S2。
本发明将两个二进制文件作为输入,首先进行初始锚函数的确定,初始锚函数主要基于函数中引用的常量字符串、函数参数个数以及常量整数的最大频次来进行选择;之后选择锚函数,对两个文件中的对应锚函数fa和fb根据其调用关系收集所有调用fa和fb的函数集合以及被fa和fb调用的函数集合,生成候选函数集,使用特征提取方法记录候选函数集合中函数的数据流特征,结构特征和语义特征,将候选函数的特征使用EMD距离计算后,可以得到每一个候选函数集合中的函数对应关系,将确定对应关系的函数作为新的锚函数放入锚函数集合中,迭代上述过程,在所有的锚函数分析完毕后,结束匹配过程。
本实施例中,锚函数有两种,一种是初始锚函数,一种是在迭代过程中确定的锚函数。该锚函数为二进制文件的锚函数,是指两个二进制文件中,可以确定存在对应关系的函数对中的函数,这些函数是获取其他函数之间对应关系的基准。
所述步骤S1,确定初始锚函数的方法为:将二进制文件中引用了唯一的常量字符串的函数,或者引用的常量字符串不唯一,但是函数参数个数、函数内部常量的最大频数值与其他函数不同的函数作为初始锚函数。
本实施例中,首先选择有引用常量字符串的函数,如果引用的常量字符串与其他函数不同,则将该函数作为初始锚函数;如果应用的常量字符串与某些函数相同,但是函数参数个数和函数内部常量的最大频数值不同,也将该函数作为初始锚函数。这样常量字符串、函数参数个数和函数内部常量最大频数值这三个特征是进行初始锚函数选择采用的特征,且这三个特征在进行跨架构和优化选项时能够保证相对稳定。因此,选择的初始锚函数可以作为跨架构和优化选项的比较基准函数。
所述步骤S2,将锚函数集合中未进行调用关系分析的,但是存在对应关系的两个函数fa和fb作为待匹配的二进制文件的锚函数,锚函数的来源有两个,一是初始锚函数,二是迭代过程中,根据调用关系和数据流分析特征确定的新的锚函数。
所述步骤S3,在所述待匹配的二进制模块A、B中,分别获取与锚函数fa、fb具有调用关系的函数,基于所述与锚函数fa、fb具有调用关系的函数,分别构建属于模块A和B的函数集Ca、Cb,并将函数集Ca、Cb作为候选函数集,包括:
为所述待匹配的二进制模块A和B分别生成函数调用图G1、G2,从函数调用图G1、G2中分别得到与锚函数fa、fb具有边连接的所有函数,并分别构建函数集合Ca、Cb。
本实施例中,所述步骤S4,对fa和Ca中的任一函数fai之间的指令数据依赖关系进行分析,使用到达-定值分析得到fa和fai之间到达-定值特征向量,并将该到达-定值向量与函数的出度、入度、跳转指令个数、立即数的频数中排名前3的数量、函数的参数个数进行向量拼接,作为函数fai的特征向量V(fai),将Ca中的每一个函数都进行分析得到其特征向量;同样的方法对fb和与其有调用关系的Cb中函数fbj进行数据依赖关系分析,得到Cb中的每一个函数的特征向量V(fbj)。
所述步骤S4,基于到达-定值分析,对锚函数及其对应的候选函数集中的每一个函数之间的指令数据依赖关系进行分析,获得锚函数fa和Ca中的每一个函数的到达-定值数据流向量,包括:
对锚函数fa及与其有调用关系的函数集Ca中的每一个函数fai,执行以下操作:
锚函数fa与fai有调用关系,则fa中包含调用fai的函数的指令,因此,在基本块粒度上存在由fa的入口基本块entry(fa)到调用fai的基本块BB的执行路径;基于该执行路径,得到基本块序列,在该基本块序列中选择锚函数fa入口开始的num1个基本块和到达BB前的num2个基本块,并分别将这些基本块记为{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2};
对于{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2}中的每一个基本块,确定到达该基本块末尾定值集合对应的位向量;
在得到的到达{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2}中每一个基本块末尾的定值集合的位向量后,将这num1+num2个位向量拼接为锚函数fa和函数fai的到达-定值数据流向量。
对锚函数fb及与其有调用关系的函数集Cb中的每一个函数fbj,执行以下操作:
锚函数fb与fbj有调用关系,则fb中包含调用fbj的函数的指令,因此,在基本块粒度上存在由fb的入口基本块entry(fb)到调用fbj的基本块BB1的执行路径;基于该执行路径,得到基本块序列,在该基本块序列中选择锚函数fb入口开始的num1b个基本块和到达BB1前的num2b个基本块,并分别将这些基本块记为{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b};
对于{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b}中的每一个基本块,确定到达该基本块末尾的位向量;
在得到的到达{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b}中每一个基本块末尾的定值集合的位向量后,将num1b+num2b个位向量拼接为锚函数fb和函数fbj的到达-定值数据流向量。
所述确定到达该基本块末尾的位向量,包括:
使用位向量表示一个定值,1表示能够到达给定点,0表示不能到达给定点;用v表示该基本块,则定义一个位向量集PRSV(v),表示基本块v保留的定值,并定义一个定值集合GEN(v),表示基本块v中有过赋值且随后未在基本块中被杀死的定值集合。定义基本块v入口的定值集合为RCHin(v),而到达v末尾的定值集合对应的位向量为RCHout(v);利用数据流方程,计算基本块v的入口位向量和到达v末尾的位向量。
本实施例中,采用如下方式计算基本块v的入口位向量和到达v末尾的位向量:
RCHout(v)=GEN(v)∪(RCHin(v)∩PRSV(v)) (2)
其中,pred(v)表示基本块v的前驱基本块。式(1)表示对于基本块v来说,其入口的定值集合值与其前驱基本块的出口定值集合的并集相同。式(2)则表示到达基本块v末尾的定值集合与其入口定值集合RCHin(v)与保留定值集合PRSV(v)取交集后,再与基本块v的赋值且未被杀死的集合GEN(v)取并集。
所述步骤S4,将该函数的到达-定值数据流向量、该函数的出度、入度、跳转指令个数、排序在前3位的立即数的频数数值、以及该函数的参数个数合并得到一个新的向量,作为该函数的特征向量,包括:
对存在函数调用关系的两个函数在调用执行路径上收集的基本块序列{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2},计算{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2}中到达每一个基本块末尾的位向量,拼接为向量con(RCHout(pre1),RCHout(pre2),…RCHout(prenum1),RCHout(suc1),..RCHout(sucnum2)),在向量末尾添加函数的出度、入度、跳转指令个数、排序在前3位的立即数的频数值以及该函数的参数个数,拼接后的向量作为被调用函数的特征向量。例如,对于与fa有调用关系的函数fai,得到到达-定值向量后(记为reach_def(fai)),与该函数的出度outdegree(fai)、入度indegree(fai)、跳转指令个数inst_num(fai)、排序在前3位的立即数的频数数值freq(fai)以及该函数的参数个数para_num(fai)进行向量拼接后,使用式(3)计算得到的fai的特征向量V(fai)。
V(fai)=concatenate(reach_def(fai),outdegree(fai),indegree(fai),inst_num(fai),freq(fai),para_num(fai)) (3)
所述步骤S5,包括:
步骤S51:计算两个候选函数集中的函数距离计算,包括:根据得到的特征向量,计算函数集Ca中的每一个函数和Cb中每一个函数的距离;定义函数集Ca中的函数fai和函数集Cb中的函数fbj距离为两个函数特征向量的余弦距离的倒数,记为dij,计算为
其中V(fai)为fai的特征向量,V(fbj)为fbj的特征向量,||V(fai)||为向量V(fai)的长度,||V(fbj)||为向量V(fbj)的长度。
步骤S52:进行矩阵流求解,包括:根据候选函数集中的函数特征向量构建函数特征矩阵,为了得到锚函数fa和fb对应的候选函数集Ca、Cb中函数的对应关系,需要计算Ca中第p个函数和Cb中第q个函数的距离dpq,并根据损失函数公式,计算能够使损失函数的值最小时对应的fpq值,fpq值构成一个矩阵F=[fpq],即为矩阵流F的解。损失函数使用下面公式得到:
其中,其中,m为Ca中函数的个数,n为Cb中函数的个数,fpq为使LOSS得到最小值,求解出来的矩阵F中对应的第p行第q列的值;。
步骤S53:选择矩阵流F中每一列中的最大值对应的函数对,这样的函数对中的函数分别属于候选函数集Ca和Cb,且矩阵流的最大值保证这两个函数存在对应关系,因此将这两个函数作为新的锚函数,分别放入锚函数集合Sa、Sb。
本实施例中,得到候选函数对应关系后,将新的确定对应关系的函数对放入锚函数集合中,再次迭代上述过程,逐步扩大锚函数范围。
进一步地,基于锚函数的函数比较会忽略掉部分与其他函数不存在调用关系的函数节点,这些函数节点在整个函数调用图中一般与其他节点没有调用边,将这些函数称为孤儿函数。在基于锚函数的搜索多次迭代后,例如,迭代次数达到预定阈值后,将所有的孤儿函数放入待比较函数集合中,提取孤儿函数特征并使用EMD距离计算,得到两个比较文件中的孤儿函数之间的对应关系,得到更多的匹配函数。这种新锚函数的选择基于函数的调用图,在分析函数调用图的属性发现,其具有无标度的特征,也就是说,函数调用图中的节点具有不均等性,只有少数节点与其他节点的连接多,也就是度数高,大部分节点的连接数少,也就是度数少,这种不均等性,保证在初始锚函数具有一定数量的前提下,在有限的迭代次数内能够覆盖大多数函数。
下面以固件文件DIR655基于锚函数的多次迭代说明本发明的匹配方法。
首先选择固件文件DIR655的锚函数,标记节点,之后基于函数调用图找到与锚函数有调用关系的节点,不同迭代次数得到的节点使用不同方式标记表示,对与已找到的函数无调用关系的函数也进行标记。可以看出,图4中的大部分节点与锚节点存在距离小于4的调用路径。而通过分析发现,图4中与已确定调用关系节点无任何边连接的函数节点,在整个函数调用图中与其他节点都无调用关系,也说明了在迭代次数较少的情况下,这种覆盖方法可以覆盖到所有与其他节点有调用关系的节点。
下面说明固件文件DIR655和标准库OpenSSL的二进制文件比较结果,固件文件DIR655中包含了OpenSSL三方库libssl.so,将该文件与标准库OpenSSL在不同架构下编译的二进制文件函数进行匹配,多次迭代,得到的正确匹配的函数对的数目如图5所示,可以看出,在前几次的迭代过程中,得到新的锚函数数目逐步下降,这是因为在迭代过程中会出现得到的函数对已经在锚函数对中,第六次比较时,将使用锚函数扩展时未覆盖的孤儿节点进行比较,从而得到更多的匹配函数。
本发明一个实施方式的基于到达-定值分析的二进制模块相似性匹配装置的结构示意图,所述装置包括:
数据获取模块:配置为获取两个待匹配的二进制模块A、B;使用常量字符串、函数参数个数和函数内部常量最大频数值三个指标,确定A和B中存在对应关系的函数,将A和B中使用所述三个指标确定的存在对应关系的函数作为初始锚函数;所述锚函数为二进制模块A、B中存在对应关系的函数,是获取其他函数之间对应关系的基准函数;对于两个待匹配的二进制模块A、B,将确定的初始锚函数加入两个模块各自的锚函数集合Sa和Sb中;
判断模块:配置为判断锚函数集合Sa和Sb中是否存在未进行调用分析的锚函数,如果不存在,迭代完成,方法结束;若存在,则选择锚函数集合Sa、Sb中未进行调用分析、但存在对应关系的一对锚函数fa、fb,满足fa∈Sa,fb∈Sb,触发候选函数获取模块;
候选函数获取模块:配置为分别获取所述待匹配的二进制文件的锚函数fa、fb,对其进行调用关系分析;在所述待匹配的二进制模块A、B中,分别获取与锚函数fa、fb具有调用关系的函数,基于所述与锚函数fa、fb具有调用关系的函数,分别构建属于模块A和B的函数集Ca、Cb,并将函数集Ca、Cb作为候选函数集;
向量获取模块:配置为对锚函数fa及候选函数集Ca中的函数、锚函数fb及候选函数集Cb中的函数均执行以下操作:基于到达-定值分析,对锚函数及其对应的候选函数集中的每一个函数之间的指令数据依赖关系进行分析,获得锚函数fa和Ca中的每一个函数的到达-定值数据流向量、以及锚函数fb和Cb中的每一个函数的到达-定值数据流向量,将分属于候选函数集Ca和Cb每一个函数与锚函数之间的到达-定值数据流向量作为该函数特征向量的一部分;同时,分析得到Ca和Cb函数集中的每一个函数的出度、入度、跳转指令个数、函数的参数个数、立即数的频数,并对Ca和Cb中的所述每一个函数,将其立即数的频数数量按从高到底的顺序排序,获取所述每一个函数的排序在前3位的立即数的频数数值;这样对于Ca和Cb中的每一个函数,将该函数的到达-定值数据流向量、该函数的出度、入度、跳转指令个数、排序在前3位的立即数的频数数值、以及该函数的参数个数合并得到一个新的向量,作为该函数的特征向量;
距离计算模块:配置为将函数集Ca中所有的函数的特征向量构建一个特征矩阵,函数集Cb中所有函数的特征向量也构建特征矩阵,对两个特征矩阵进行EMD计算,基于EMD计算结果,确定分别属于两个函数集,且存在对应关系的多个函数对<a1,b1><a2,b2>…<at,bt>,其中,{a1,a2,…at}∈Ca,{b1,b2,…bt}∈Cb,将这些函数作为新的锚函数,分别添加到锚函数集合Sa、Sb,触发判断模块。
本发明实施例进一步给出一种基于到达-定值分析的二进制模块相似性匹配系统,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如前所述基于到达-定值分析的二进制模块相似性匹配方法。
本发明实施例进一步给出一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如前所述基于到达-定值分析的二进制模块相似性匹配方法。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,实体机服务器,或者网络云服务器等,需安装Windows或者Windows Server操作系统)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (10)
1.一种基于到达-定值分析的二进制模块相似性匹配方法,其特征在于,所述方法包括以下步骤:
步骤S1:获取两个待匹配的二进制模块A、B;使用常量字符串、函数参数个数和函数内部常量最大频数值三个指标,确定A和B中存在对应关系的函数,将A和B中使用所述三个指标确定的存在对应关系的函数作为初始锚函数;所述锚函数为二进制模块A、B中存在对应关系的函数,是获取其他函数之间对应关系的基准函数;对于两个待匹配的二进制模块A、B,将确定的初始锚函数加入两个模块各自的锚函数集合Sa和Sb中;
步骤S2:判断锚函数集合Sa和Sb中是否存在未进行调用分析的锚函数,如果不存在,迭代完成,方法结束;若存在,则选择锚函数集合Sa、Sb中未进行调用分析、但存在对应关系的一对锚函数fa、fb,满足fa∈Sa,fb∈Sb,进入步骤S3;
步骤S3:分别获取所述待匹配的二进制文件的锚函数fa、fb,对其进行调用关系分析;在所述待匹配的二进制模块A、B中,分别获取与锚函数fa、fb具有调用关系的函数,基于所述与锚函数fa、fb具有调用关系的函数,分别构建属于模块A和B的函数集Ca、Cb,并将函数集Ca、Cb作为候选函数集;
步骤S4:对锚函数fa及候选函数集Ca中的函数、锚函数fb及候选函数集Cb中的函数均执行以下操作:基于到达-定值分析,对锚函数及其对应的候选函数集中的每一个函数之间的指令数据依赖关系进行分析,获得锚函数fa和Ca中的每一个函数的到达-定值数据流向量、以及锚函数fb和Cb中的每一个函数的到达-定值数据流向量,将分属于候选函数集Ca和Cb每一个函数与锚函数之间的到达-定值数据流向量作为该函数特征向量的一部分;同时,分析得到Ca和Cb函数集中的每一个函数的出度、入度、跳转指令个数、函数的参数个数、立即数的频数,并对Ca和Cb中的所述每一个函数,将其立即数的频数数量按从高到底的顺序排序,获取所述每一个函数的排序在前3位的立即数的频数数值;这样对于Ca和Cb中的每一个函数,将该函数的到达-定值数据流向量、该函数的出度、入度、跳转指令个数、排序在前3位的立即数的频数数值、以及该函数的参数个数合并得到一个新的向量,作为该函数的特征向量;
步骤S5:将函数集Ca中所有的函数的特征向量构建一个特征矩阵,函数集Cb中所有函数的特征向量也构建特征矩阵,对两个特征矩阵进行EMD计算,基于EMD计算结果,确定分别属于两个函数集,且存在对应关系的多个函数对<a1,b1><a2,b2>…<at,bt>,其中,{a1,a2,…at}∈Ca,{b1,b2,…bt}∈Cb,将这些函数作为新的锚函数,分别添加到锚函数集合Sa、Sb,进入步骤S2。
2.如权利要求1所述的方法,其特征在于,所述步骤S4,基于到达-定值分析,对锚函数及其对应的候选函数集中的每一个函数之间的指令数据依赖关系进行分析,获得锚函数fa和Ca中的每一个函数的到达-定值数据流向量、以及锚函数fb和Cb中的每一个函数的到达-定值数据流向量,包括:对锚函数fa及与其有调用关系的函数集Ca中的每一个函数fai,执行以下操作:
锚函数fa与fai有调用关系,则fa中包含调用fai的函数的指令,因此,在基本块粒度上存在由fa的入口基本块entry(fa)到调用fai的基本块BB的执行路径;基于该执行路径,得到基本块序列,在该基本块序列中选择锚函数fa入口开始的num1个基本块和到达BB前的num2个基本块,并分别将这些基本块记为{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2};
对于{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2}中的每一个基本块,确定到达该基本块末尾的位向量;
在得到的到达{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2}中每一个基本块末尾的定值集合的位向量后,将num1+num2个位向量拼接为锚函数fa和函数fai的到达-定值数据流向量;
对锚函数fb及与其有调用关系的函数集Cb中的每一个函数fbj,执行以下操作:
锚函数fb与fbj有调用关系,则fb中包含调用fbj的函数的指令,因此,在基本块粒度上存在由fb的入口基本块entry(fb)到调用fbj的基本块BB1的执行路径;基于该执行路径,得到基本块序列,在该基本块序列中选择锚函数fb入口开始的num1b个基本块和到达BB1前的num2b个基本块,并分别将这些基本块记为{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b};
对于{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b}中的每一个基本块,确定到达该基本块末尾的位向量;
在得到的到达{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b}中每一个基本块末尾的定值集合的位向量后,将num1b+num2b个位向量拼接为锚函数fb和函数fbj的到达-定值数据流向量。
3.如权利要求2所述的方法,其特征在于,所述确定该基本块的入口位向量和到达该基本块末尾的位向量,包括:
使用位向量表示一个定值,1表示能够到达给定点,0表示不能到达给定点;用v表示该基本块,则定义一个位向量集PRSV(v),表示基本块v保留的定值,并定义一个定值集合GEN(v),表示基本块v中有过赋值且随后未在基本块中被杀死的定值集合;定义基本块v入口的定值集合为RCHin(v),而到达v末尾的定值集合对应的位向量为RCHout(v);利用数据流方程,计算到达基本块v末尾的位向量RCHout(v)。
4.如权利要求3所述的方法,其特征在于,所述步骤S5,包括:
步骤S51:计算两个候选函数集中的函数距离计算,包括:根据得到的特征向量,计算函数集Ca中的每一个函数和Cb中每一个函数的距离;定义函数集Ca中的函数fai和函数集Cb中的函数fbj距离为两个函数特征向量的余弦距离的倒数,记为dij,计算为
其中V(fai)为fai的特征向量,V(fbj)为fbj的特征向量,||V(fai)||为向量V(fai)的长度,||V(fbj)||为向量V(fbj)的长度;
步骤S52:进行矩阵流求解,包括:根据候选函数集中的函数特征向量构建函数特征矩阵,为了得到锚函数fa和fb对应的候选函数集Ca、Cb中函数的对应关系,需要计算Ca中第p个函数和Cb中第q个函数的距离dpq,并根据损失函数公式,计算能够使损失函数LOSS的值最小时对应的fpq值,fpq值构成一个矩阵F=[fpq],即为矩阵流F的解;损失函数使用下面公式得到:
其中,m为Ca中函数的个数,n为Cb中函数的个数,fpq为使LOSS得到最小值而求解出来的矩阵F中对应的第p行第q列的值;
步骤S53:选择矩阵流F中每一列中的最大值对应的函数对,这样的函数对中的函数分别属于候选函数集Ca和Cb,且矩阵流的最大值保证这两个函数存在对应关系,因此将这两个函数作为新的锚函数,分别放入锚函数集合Sa、Sb。
5.一种基于到达-定值分析的二进制模块相似性匹配装置,其特征在于,所述装置包括:
数据获取模块:配置为获取两个待匹配的二进制模块A、B;使用常量字符串、函数参数个数和函数内部常量最大频数值三个指标,确定A和B中存在对应关系的函数,将A和B中使用所述三个指标确定的存在对应关系的函数作为初始锚函数;所述锚函数为二进制模块A、B中存在对应关系的函数,是获取其他函数之间对应关系的基准函数;对于两个待匹配的二进制模块A、B,将确定的初始锚函数加入两个模块各自的锚函数集合Sa和Sb中;
判断模块:配置为判断锚函数集合Sa和Sb中是否存在未进行调用分析的锚函数,如果不存在,迭代完成,方法结束;若存在,则选择锚函数集合Sa、Sb中未进行调用分析、但存在对应关系的一对锚函数fa、fb,满足fa∈Sa,fb∈Sb,触发候选函数获取模块;
候选函数获取模块:配置为分别获取所述待匹配的二进制文件的锚函数fa、fb,对其进行调用关系分析;在所述待匹配的二进制模块A、B中,分别获取与锚函数fa、fb具有调用关系的函数,基于所述与锚函数fa、fb具有调用关系的函数,分别构建属于模块A和B的函数集Ca、Cb,并将函数集Ca、Cb作为候选函数集;
向量获取模块:配置为对锚函数fa及候选函数集Ca中的函数、锚函数fb及候选函数集Cb中的函数均执行以下操作:基于到达-定值分析,对锚函数及其对应的候选函数集中的每一个函数之间的指令数据依赖关系进行分析,获得锚函数fa和Ca中的每一个函数的到达-定值数据流向量、以及锚函数fb和Cb中的每一个函数的到达-定值数据流向量,将分属于候选函数集Ca和Cb每一个函数与锚函数之间的到达-定值数据流向量作为该函数特征向量的一部分;同时,分析得到Ca和Cb函数集中的每一个函数的出度、入度、跳转指令个数、函数的参数个数、立即数的频数,并对Ca和Cb中的所述每一个函数,将其立即数的频数数量按从高到底的顺序排序,获取所述每一个函数的排序在前3位的立即数的频数数值;这样对于Ca和Cb中的每一个函数,将该函数的到达-定值数据流向量、该函数的出度、入度、跳转指令个数、排序在前3位的立即数的频数数值、以及该函数的参数个数合并得到一个新的向量,作为该函数的特征向量;
距离计算模块:配置为将函数集Ca中所有的函数的特征向量构建一个特征矩阵,函数集Cb中所有函数的特征向量也构建特征矩阵,对两个特征矩阵进行EMD计算,基于EMD计算结果,确定分别属于两个函数集,且存在对应关系的多个函数对<a1,b1><a2,b2>…<at,bt>,其中,{a1,a2,…at}∈Ca,{b1,b2,…bt}∈Cb,将这些函数作为新的锚函数,分别添加到锚函数集合Sa、Sb,触发判断模块。
6.如权利要求5所述的装置,其特征在于,所述向量获取模块,其中:
对锚函数fa及与其有调用关系的函数集Ca中的每一个函数fai,执行以下操作:
锚函数fa与fai有调用关系,则fa中包含调用fai的函数的指令,因此,在基本块粒度上存在由fa的入口基本块entry(fa)到调用fai的基本块BB的执行路径;基于该执行路径,得到基本块序列,在该基本块序列中选择锚函数fa入口开始的num1个基本块和到达BB前的num2个基本块,并分别将这些基本块记为{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2};
对于{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2}中的每一个基本块,确定到达该基本块末尾的位向量;
在得到的到达{pre1,pre2,…prenum1}和{suc1,suc2,…sucnum2}中每一个基本块末尾的定值集合的位向量后,将num1+num2个位向量拼接为锚函数fa和函数fai的到达-定值数据流向量;
对锚函数fb及与其有调用关系的函数集Cb中的每一个函数fbj,执行以下操作:
锚函数fb与fbj有调用关系,则fb中包含调用fbj的函数的指令,因此,在基本块粒度上存在由fb的入口基本块entry(fb)到调用fbj的基本块BB1的执行路径;基于该执行路径,得到基本块序列,在该基本块序列中选择锚函数fb入口开始的num1b个基本块和到达BB1前的num2b个基本块,并分别将这些基本块记为{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b};
对于{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b}中的每一个基本块,确定到达该基本块末尾的位向量;
在得到的到达{pre1,pre2,…prenum1b}和{suc1,suc2,…sucnum2b}中每一个基本块末尾的定值集合的位向量后,将num1b+num2b个位向量拼接为锚函数fb和函数fbj的到达-定值数据流向量。
7.如权利要求6所述的装置,其特征在于,所述确定该基本块的入口位向量和到达该基本块末尾的位向量,包括:
使用位向量表示一个定值,1表示能够到达给定点,0表示不能到达给定点;用v表示该基本块,则定义一个位向量集PRSV(v),表示基本块v保留的定值,并定义一个定值集合GEN(v),表示基本块v中有过赋值且随后未在基本块中被杀死的定值集合;定义基本块v入口的定值集合为RCHin(v),而到达v末尾的定值集合对应的位向量为RCHout(v);利用数据流方程,计算到达基本块v末尾的位向量RCHout(v)。
8.如权利要求7所述的装置,其特征在于,所述距离计算模块,包括:
第一计算子模块:配置为计算两个候选函数集中的函数距离计算,包括:根据得到的特征向量,计算函数集Ca中的每一个函数和Cb中每一个函数的距离;定义函数集Ca中的函数fai和函数集Cb中的函数fbj距离为两个函数特征向量的余弦距离的倒数,记为dij,计算为
其中V(fai)为fai的特征向量,V(fbj)为fbj的特征向量,||V(fai)||为向量V(fai)的长度,||V(fbj)||为向量V(fbj)的长度;
第二计算子模块:配置为进行矩阵流求解,包括:根据候选函数集中的函数特征向量构建函数特征矩阵,为了得到锚函数fa和fb对应的候选函数集Ca、Cb中函数的对应关系,需要计算Ca中第p个函数和Cb中第q个函数的距离dpq,并根据损失函数公式,计算能够使损失函数LOSS的值最小时对应的fpq值,fpq值构成一个矩阵F=[fpq],即为矩阵流F的解;损失函数使用下面公式得到:
其中,m为Ca中函数的个数,n为Cb中函数的个数,fpq为使LOSS得到最小值而求解出来的矩阵F中对应的第p行第q列的值;
第三计算子模块:配置为选择矩阵流F中每一列中的最大值对应的函数对,这样的函数对中的函数分别属于候选函数集Ca和Cb,且矩阵流的最大值保证这两个函数存在对应关系,因此将这两个函数作为新的锚函数,分别放入锚函数集合Sa、Sb。
9.一种基于到达-定值分析的二进制模块相似性匹配系统,其特征在于,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如权利要求1-4之任一项所述方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如权利要求1-4之任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210180454.6A CN114610606B (zh) | 2022-02-25 | 2022-02-25 | 基于到达-定值分析的二进制模块相似性匹配方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210180454.6A CN114610606B (zh) | 2022-02-25 | 2022-02-25 | 基于到达-定值分析的二进制模块相似性匹配方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114610606A true CN114610606A (zh) | 2022-06-10 |
CN114610606B CN114610606B (zh) | 2023-03-03 |
Family
ID=81859051
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210180454.6A Active CN114610606B (zh) | 2022-02-25 | 2022-02-25 | 基于到达-定值分析的二进制模块相似性匹配方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114610606B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080320056A1 (en) * | 2007-06-22 | 2008-12-25 | Microsoft Corporation | Function matching in binaries |
CN107229563A (zh) * | 2016-03-25 | 2017-10-03 | 中国科学院信息工程研究所 | 一种跨架构的二进制程序漏洞函数关联方法 |
CN110287702A (zh) * | 2019-05-29 | 2019-09-27 | 清华大学 | 一种二进制漏洞克隆检测方法及装置 |
US20190394039A1 (en) * | 2016-12-15 | 2019-12-26 | Nec Corporation | Matching system, method, apparatus, and program |
CN111177733A (zh) * | 2019-12-30 | 2020-05-19 | 北京航空航天大学 | 一种基于数据流分析的软件补丁检测方法及装置 |
CN112163226A (zh) * | 2020-11-30 | 2021-01-01 | 中国人民解放军国防科技大学 | 基于图自动编码器的二进制相似性检测方法 |
CN112308210A (zh) * | 2020-10-27 | 2021-02-02 | 中国人民解放军战略支援部队信息工程大学 | 基于神经网络的跨架构二进制函数相似性检测方法及系统 |
US20210264029A1 (en) * | 2020-02-25 | 2021-08-26 | Agency For Defense Development | Method and apparatus for analyzing malicious code |
CN113900923A (zh) * | 2021-08-16 | 2022-01-07 | 中国人民解放军战略支援部队信息工程大学 | 一种跨指令集架构的二进制函数相似性检查系统及方法 |
-
2022
- 2022-02-25 CN CN202210180454.6A patent/CN114610606B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080320056A1 (en) * | 2007-06-22 | 2008-12-25 | Microsoft Corporation | Function matching in binaries |
CN107229563A (zh) * | 2016-03-25 | 2017-10-03 | 中国科学院信息工程研究所 | 一种跨架构的二进制程序漏洞函数关联方法 |
US20190394039A1 (en) * | 2016-12-15 | 2019-12-26 | Nec Corporation | Matching system, method, apparatus, and program |
CN110287702A (zh) * | 2019-05-29 | 2019-09-27 | 清华大学 | 一种二进制漏洞克隆检测方法及装置 |
CN111177733A (zh) * | 2019-12-30 | 2020-05-19 | 北京航空航天大学 | 一种基于数据流分析的软件补丁检测方法及装置 |
US20210264029A1 (en) * | 2020-02-25 | 2021-08-26 | Agency For Defense Development | Method and apparatus for analyzing malicious code |
CN112308210A (zh) * | 2020-10-27 | 2021-02-02 | 中国人民解放军战略支援部队信息工程大学 | 基于神经网络的跨架构二进制函数相似性检测方法及系统 |
CN112163226A (zh) * | 2020-11-30 | 2021-01-01 | 中国人民解放军国防科技大学 | 基于图自动编码器的二进制相似性检测方法 |
CN113900923A (zh) * | 2021-08-16 | 2022-01-07 | 中国人民解放军战略支援部队信息工程大学 | 一种跨指令集架构的二进制函数相似性检查系统及方法 |
Non-Patent Citations (6)
Title |
---|
ALEKSANDAR S.DIMOVSKI: ""A binary decision diagram lifted domain for analyzing program families"", 《JOURNAL OF COMPUTER LANGUAGES》 * |
EMILIENROYER等: ""COnfusion REduction (CORE) algorithm for local descriptors, floating-point and binary cases"", 《COMPUTER VISION AND IMAGE UNDERSTANDING》 * |
LU YU等: ""BEDetector: A Two-Channel Encoding Method to Detect Vulnerabilities Based on Binary Similarity"", 《IEEE ACCESS》 * |
徐威扬: ""跨指令集架构二进制漏洞搜索技术研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
朱凯龙 等: ""基于混合分析的二进制程序控制流图构建方法"", 《浙江大学学报(工学版)》 * |
杨鑫: ""基于语义学习的二进制漏洞代码克隆检测"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114610606B (zh) | 2023-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Duan et al. | Deepbindiff: Learning program-wide code representations for binary diffing | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
Eschweiler et al. | Discovre: Efficient cross-architecture identification of bugs in binary code. | |
CN108717470B (zh) | 一种具有高准确度的代码片段推荐方法 | |
CN106295335B (zh) | 一种面向嵌入式设备的固件漏洞检测方法及系统 | |
US20190108003A1 (en) | Defect detection method, device, system and computer readable medium | |
US8935677B2 (en) | Automatic reverse engineering of input formats | |
CN107229563A (zh) | 一种跨架构的二进制程序漏洞函数关联方法 | |
CN109542783B (zh) | 一种基于变量分割的扩展有限状态机测试数据生成方法 | |
CN111767547B (zh) | 一种基于复杂网络社团的软件漏洞检测方法 | |
WO2021167483A1 (ru) | Способ и система выявления вредоносных файлов в неизолированной среде | |
US9552284B2 (en) | Determining valid inputs for an unknown binary program | |
Aydin et al. | Automated test generation from vulnerability signatures | |
CN113536308B (zh) | 软件基因视角下多粒度信息融合的二进制代码溯源方法 | |
CN114610606B (zh) | 基于到达-定值分析的二进制模块相似性匹配方法及装置 | |
US9619362B2 (en) | Event sequence construction of event-driven software by combinational computations | |
CN112148392B (zh) | 一种函数调用链获取方法、装置及存储介质 | |
US11307962B2 (en) | Method for semantic preserving transform mutation discovery and vetting | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
CN108304467B (zh) | 用于文本间匹配的方法 | |
Xiao et al. | Embedding code contexts for cryptographic api suggestion: New methodologies and comparisons | |
US20230244745A1 (en) | Device and method to generate instructions for a computing device for executing a computational algorithm | |
De Lille et al. | Automatically combining static malware detection techniques | |
CN113076089A (zh) | 一种基于对象类型的api补全方法 | |
Bugerya et al. | Recovery of high-level intermediate representations of algorithms from binary code |
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 |