可执行文件相似度的检测方法、装置和计算机设备与流程

文档序号:18108522发布日期:2019-07-06 11:50阅读:302来源:国知局
可执行文件相似度的检测方法、装置和计算机设备与流程

本申请涉及信息安全技术领域,尤其涉及一种可执行文件相似度的检测方法、装置和计算机设备。



背景技术:

传统的文件相似性检测技术是基于源代码的,针对源代码难以获取的情况,可执行文件比对技术被提出并受到越来越多的关注,尤其是在软件剽窃检测、侵权检测和病毒检测方面,可执行文件的相似度计算发挥了很重要的作用。

现有相关技术中,对可执行文件相似度的计算方法都是基于可执行文件的原始字节或者字符串,并且使用直接对比或者模糊哈希算法来计算相似度。

但是,一方面,直接使用可执行文件的原始字节或字符串会导致相似度算法的敏感程度过高,只要样本有轻微的变化,就可能判定为不相似,这使得病毒作者或软件剽窃者可以通过对源码或反编译后的代码进行轻微的修改即可达绕过检测的目的。另一方面,模糊哈希函数对信息的压缩程度较大,这会使得相似度算法对于可执行文件差异的敏感程度过低,在实际应用中导致漏报或误报。另外,如果不对数据进行压缩直接对比的话,时间和空间消耗都会非常大。



技术实现要素:

为克服相关技术中存在的问题,本申请提供一种可执行文件相似度的检测方法、装置和计算机设备。

为达到上述目的,本申请的实施例采用如下技术方案:

第一方面,本申请实施例提供一种可执行文件相似度的检测方法,包括:获取第一可执行文件和第二可执行文件;对所述第一可执行文件和所述第二可执行文件进行反汇编处理,分别得到所述第一可执行文件和所述第二可执行文件的反汇编文件;提取所述第一可执行文件和所述第二可执行文件的反汇编文件中的操作码,并对提取的操作码进行编码处理;对编码后的操作码进行过滤处理,得到所述第一可执行文件和所述第二可执行文件对应的位数组;计算所述第一可执行文件与所述第二可执行文件对应的位数组的相似度;如果所述相似度大于预定阈值,则确定所述第一可执行文件与所述第二可执行文件为相似文件。

上述可执行文件相似度的检测方法中,获取第一可执行文件和第二可执行文件之后,对第一可执行文件和第二可执行文件进行反汇编处理,分别得到第一可执行文件和第二可执行文件的反汇编文件,然后提取第一可执行文件和第二可执行文件的反汇编文件中的操作码,并对提取的操作码进行编码处理,对编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的位数组;最后计算第一可执行文件与第二可执行文件对应的位数组的相似度,如果上述相似度大于预定阈值,则确定第一可执行文件与第二可执行文件为相似文件,一方面,上述可执行文件相似度的检测方法考虑到了程序的本质逻辑,可以较好的抵抗病毒作者或软件剽窃者对源码或反编译代码的修改引入的干扰,极大地提高了病毒或剽窃程序逃避检测的难度;另一方面,上述可执行文件相似度的检测方法充分利用了布隆过滤器优异的空间效率,使得在计算性能较高的情况下特征损失较小,漏报或误报得到大幅减少。

第二方面,本申请实施例提供一种可执行文件相似度的检测装置,包括:获取模块,用于获取第一可执行文件和第二可执行文件;反汇编模块,用于对所述第一可执行文件和所述第二可执行文件进行反汇编处理,分别得到所述第一可执行文件和所述第二可执行文件的反汇编文件;提取模块,用于提取所述第一可执行文件和所述第二可执行文件的反汇编文件中的操作码;编码模块,用于对所述提取模块提取的操作码进行编码;获得模块,用于对所述编码模块编码后的操作码进行过滤处理,得到所述第一可执行文件和所述第二可执行文件对应的位数组;计算模块,用于计算所述第一可执行文件与所述第二可执行文件对应的位数组的相似度;确定模块,用于当所述计算模块计算的所述相似度大于预定阈值时,确定所述第一可执行文件与所述第二可执行文件为相似文件。

上述可执行文件相似度的检测装置中,获取模块获取第一可执行文件和第二可执行文件之后,反汇编模块对第一可执行文件和第二可执行文件进行反汇编处理,分别得到第一可执行文件和第二可执行文件的反汇编文件,然后提取模块提取第一可执行文件和第二可执行文件的反汇编文件中的操作码,编码模块对提取的操作码进行编码处理,获得模块对编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的位数组;最后计算模块计算第一可执行文件与第二可执行文件对应的位数组的相似度,如果上述相似度大于预定阈值,则确定模块确定第一可执行文件与第二可执行文件为相似文件,一方面,上述可执行文件相似度的检测装置考虑到了程序的本质逻辑,可以较好的抵抗病毒作者或软件剽窃者对源码或反编译代码的修改引入的干扰,极大地提高了病毒或剽窃程序逃避检测的难度;另一方面,上述可执行文件相似度的检测装置充分利用了布隆过滤器优异的空间效率,使得在计算性能较高的情况下特征损失较小,漏报或误报得到大幅减少。

第三方面,本申请实施例提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上所述的方法。

第四方面,本申请实施例提供一种计算机可读存储介质,所述存储介质存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的方法。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

图1为本申请可执行文件相似度的检测方法一个实施例的流程图;

图2为本申请可执行文件相似度的检测方法中对可执行文件进行反汇编一个实施例的示意图;

图3为本申请可执行文件相似度的检测方法另一个实施例的流程图;

图4为本申请可执行文件相似度的检测方法中初始构建的布隆过滤器一个实施例的示意图;

图5为本申请可执行文件相似度的检测方法中布隆过滤器位数组一个实施例的示意图;

图6为本申请可执行文件相似度的检测方法再一个实施例的流程图;

图7为本申请可执行文件相似度的检测方法再一个实施例的流程图;

图8为本申请可执行文件相似度的检测方法再一个实施例的流程图;

图9为本申请可执行文件相似度的检测装置一个实施例的结构示意图;

图10为本申请可执行文件相似度的检测装置另一个实施例的结构示意图;

图11为本申请计算机设备一个实施例的结构示意图。

通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

图1为本申请可执行文件相似度的检测方法一个实施例的流程图,如图1所示,上述可执行文件相似度的检测方法可以包括:

步骤101,获取第一可执行文件和第二可执行文件。

步骤102,对第一可执行文件和第二可执行文件进行反汇编,分别得到第一可执行文件和第二可执行文件的反汇编文件。

具体地,根据操作系统不同,可执行文件的格式也不同,比如windows操作系统下的可执行文件是exe格式,linux操作系统下的可执行文件是elf格式、android操作系统下的可执行文件是dex格式或elf格式等。可执行文件通常以二进制形式存在,可以使用交互式反汇编器(interactivedisassembler;以下简称:ida)等工具对可执行文件进行反汇编,得到.asm格式的反汇编文件,如图2所示,图2为本申请可执行文件相似度的检测方法中对可执行文件进行反汇编一个实施例的示意图。

步骤103,提取第一可执行文件和第二可执行文件的反汇编文件中的操作码(operationcode;以下简称:opcode),并对提取的操作码进行编码处理。

具体地,典型的汇编指令可以包括操作码(opcode)和/或多个操作数。其中,操作码可以用“mov”、“push”等助记符来表示,操作数则可能是寄存器、常量或内存地址等。从实际情况来看,操作数在重新编译后会出现一定的随机性,根据不同的编译和优化策略,操作数可能会有一定的变化,而操作码是最能代表代码语义的部分,并且也是相对稳定的部分,一般不会发生变化。因此,本实施例提取第一可执行文件的反汇编文件和第二可执行文件的反汇编文件中的操作码作为相似度计算的基础。

然后对提取的操作码进行编码,在具体实现时,编码方法有多种,比如直接使用原始操作码、对操作码计算哈希或模糊哈希等,只要保证两个源码相同或者相似的函数生成的编码一致即可,本实施例对所采用的编码方法不作限定。

步骤104,对编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的位数组。

步骤105,计算第一可执行文件与第二可执行文件对应的位数组的相似度。

按照上述步骤,可以得到要计算相似度的第一可执行文件和第二可执行文件各自的位数组,这样,两个文件相似度的检测就转换成两个位数组的相似度计算,越相似的两个文件在它们的位数组中有更多共同的1。

步骤106,如果上述相似度大于预定阈值,则确定第一可执行文件与第二可执行文件为相似文件。

而如果上述相似度小于或等于预定阈值,则确定第一可执行文件与第二可执行文件不是相似文件。

其中,上述预定阈值可以在具体实现时根据系统性能和/或实现需求等自行设置,本实施例对上述预定阈值的大小不作限定。

上述可执行文件相似度的检测方法中,获取第一可执行文件和第二可执行文件之后,对第一可执行文件和第二可执行文件进行反汇编处理,分别得到第一可执行文件和第二可执行文件的反汇编文件,然后提取第一可执行文件和第二可执行文件的反汇编文件中的操作码,并对提取的操作码进行编码处理,对编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的位数组;最后计算第一可执行文件与第二可执行文件对应的位数组的相似度,如果上述相似度大于预定阈值,则确定第一可执行文件与第二可执行文件为相似文件,一方面,上述可执行文件相似度的检测方法考虑到了程序的本质逻辑,可以较好的抵抗病毒作者或软件剽窃者对源码或反编译代码的修改引入的干扰,极大地提高了病毒或剽窃程序逃避检测的难度;另一方面,上述可执行文件相似度的检测方法充分利用了布隆过滤器优异的空间效率,使得在计算性能较高的情况下特征损失较小,漏报或误报得到大幅减少。

图3为本申请可执行文件相似度的检测方法另一个实施例的流程图,如图3所示,本申请图1所示实施例步骤104之前,还可以包括:

步骤301,构建布隆过滤器。

其中,步骤301与步骤101~步骤103可以并行执行,也可以先后执行,本实施例对步骤301与步骤101~步骤103的执行顺序不作限定,图3中以步骤301在步骤101之后执行为例示出。

布隆过滤器是一种空间效率很高的随机数据结构,可以利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。

布隆过滤器是一个包含m位的位数组。为了表示s={x1,x2,…,xn}这样一个n个元素的集合,布隆过滤器使用k个相互独立的哈希函数,它们分别将集合中的每个元素映射到{1,…,m}的范围中。对任意一个元素x,第i个哈希函数映射的位置hi(x)就会被置为1(1≤i≤k)。注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在判断y是否属于这个集合时,对y应用k次哈希函数,如果所有hi(y)的位置都是1(1≤i≤k),那么确定y是集合中的元素,否则确定y不是集合中的元素。

下面介绍布隆过滤器的误判率分析与参数选择:在布隆过滤器的表示方法中,某一位被置为1的概率为被置为0的概率为散列函数共执行了kn次,所以在运算结束时,某位仍为0的概率为:

所以误判的概率为:

对于给定的n和m,对式(2)两端求导,令可求得当时误判的概率最小,此时:

假定预估的每个可执行文件可能出现的操作码的编码总数为n,并且知道确定的误判率,根据式(3),即可得到布隆过滤器的位数组的位数m,再由m和n,可得到哈希函数的个数k。至此,已经计算出所有的参数,选择好k个哈希函数后,布隆过滤器就建立起来了。最后,将布隆过滤器的位数组的每一位都置为0,也就是说,初始时,布隆过滤器的位数组的每一位的值为0,如图4所示,图4为本申请可执行文件相似度的检测方法中初始构建的布隆过滤器一个实施例的示意图。

这样,步骤104中,对编码后的操作码进行过滤处理可以为:通过预先构建的布隆过滤器对编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的布隆过滤器位数组。

在具体实现时,通过预先构建的布隆过滤器对编码后的操作码进行过滤处理可以为:将编码后的操作码根据布隆过滤器的算法都加入到预先构建的布隆过滤器中去,可以获得编码后的操作码所对应的布隆过滤器位数组,如图5所示,图5为本申请可执行文件相似度的检测方法中布隆过滤器位数组一个实施例的示意图。

图6为本申请可执行文件相似度的检测方法再一个实施例的流程图,如图6所示,本申请图1所示实施例中,步骤103可以包括:

步骤601,对第一可执行文件和第二可执行文件的反汇编文件进行分片。

具体地,对第一可执行文件和第二可执行文件的反汇编文件进行分片可以为:以第一可执行文件和第二可执行文件的反汇编文件的基本逻辑单元为单位,对第一可执行文件和第二可执行文件的反汇编文件进行分片。

最典型的分片方法是按照函数或者基本块为单位,因为函数和基本块是反汇编文件的基本逻辑单元。

对于每个分片,每一行的格式为:code:[地址][操作码][操作数]。

步骤602,提取第一可执行文件和第二可执行文件的反汇编文件的每个分片中的操作码,并对提取的操作码进行编码。

如上所述,可以分别得到第一可执行文件和第二可执行文件的一个操作码编码集合,该集合中的元素是第一可执行文件和第二可执行文件反汇编文件的一个分片的操作码序列的一个编码。

图7为本申请可执行文件相似度的检测方法再一个实施例的流程图,如图7所示,本申请图1所示实施例中,步骤105可以为:

步骤701,计算第一可执行文件与第二可执行文件对应的位数组的汉明(hamming)距离。

本实施例中,上述第一可执行文件与第二可执行文件对应的位数组可以为第一可执行文件和第二可执行文件对应的布隆过滤器位数组。布隆过滤器位数组可以使用汉明距离(hamming_distance)衡量相似度,也可以使用cosine、overlap、dice或jaccard等方法来检测相似度,本实施例对计算布隆过滤器位数组的相似度的方法不作限定,但本实施例以汉明距离为例进行说明。这里,假设第一可执行文件对应的布隆过滤器位数组为位数组a,第二可执行文件对应的布隆过滤器位数组为位数组b,那么位数组a与位数组b的汉明距离就是a异或(xor)b获得的二进制结果中1的个数。

举例如下:

a=100111;

b=101010;

hamming_distance(a,b)=count_1(axorb)=count_1(001101)=3;

也就是说,位数组a与位数组b的汉明距离为3。

上述可执行文件相似度的检测方法,一方面,考虑到了程序的本质逻辑,可以较好的抵抗病毒作者或软件剽窃者对源码或反编译代码的修改引入的干扰,极大地提高了病毒或剽窃程序逃避检测的难度;另一方面,充分利用了布隆过滤器优异的空间效率,使得在计算性能较高的情况下特征损失较小,漏报或误报得到大幅减少。

图8为本申请可执行文件相似度的检测方法再一个实施例的示意图,如图8所示,上述可执行文件相似度的检测方法包括:

步骤801,获取第一可执行文件和第二可执行文件。

步骤802,构建布隆过滤器。

步骤803,对第一可执行文件和第二可执行文件进行反汇编,分别得到第一可执行文件和第二可执行文件的反汇编文件。

步骤804,提取第一可执行文件和第二可执行文件的反汇编文件中的操作码,并对提取的操作码进行编码处理。

步骤805,通过预先构建的布隆过滤器对编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的布隆过滤器位数组。

步骤806,计算第一可执行文件与第二可执行文件对应的位数组的相似度。

步骤807,将上述相似度与预定阈值进行对比,如果上述相似度大于预定阈值,则确定第一可执行文件与第二可执行文件为相似文件;如果上述相似度小于或等于预定阈值,则确定第一可执行文件与第二可执行文件不是相似文件。

图9为本申请可执行文件相似度的检测装置一个实施例的结构示意图,本申请实施例中的可执行文件相似度的检测装置可以作为计算机设备,或者计算机设备的一部分实现本申请实施例提供的可执行文件相似度的检测方法。

其中,上述计算机设备可以为终端设备,也可以为服务器,本实施例对上述计算机设备的形态不作限定,本实施例中,上述终端设备可以为个人计算机(personalcomputer;以下简称:pc)或者笔记本电脑等。

如图9所示,上述可执行文件相似度的检测装置可以包括:获取模块91、反汇编模块92、提取模块93、编码模块94、获得模块95、计算模块96和确定模块97。

其中,获取模块91,用于获取第一可执行文件和第二可执行文件;

反汇编模块92,用于对第一可执行文件和第二可执行文件进行反汇编处理,分别得到第一可执行文件和第二可执行文件的反汇编文件。

具体地,根据操作系统不同,可执行文件的格式也不同,比如windows操作系统下的可执行文件是exe格式,linux操作系统下的可执行文件是elf格式、android操作系统下的可执行文件是dex格式或elf格式等。可执行文件通常以二进制形式存在,可以使用ida等工具对可执行文件进行反汇编,得到.asm格式的反汇编文件,如图2所示。

提取模块93,用于提取第一可执行文件和第二可执行文件的反汇编文件中的操作码;

编码模块94,用于对提取模块93提取的操作码进行编码;

具体地,典型的汇编指令可以包括操作码(opcode)和/或多个操作数。其中,操作码可以用“mov”、“push”等助记符来表示,操作数则可能是寄存器、常量或内存地址等。从实际情况来看,操作数在重新编译后会出现一定的随机性,根据不同的编译和优化策略,操作数可能会有一定的变化,而操作码是最能代表代码语义的部分,并且也是相对稳定的部分,一般不会发生变化。因此,提取模块93提取第一可执行文件的反汇编文件和第二可执行文件的反汇编文件中的操作码作为相似度计算的基础。

然后编码模块94对提取的操作码进行编码,在具体实现时,编码方法有多种,比如直接使用原始操作码、对操作码计算哈希或模糊哈希等,只要保证两个源码相同或者相似的函数生成的编码一致即可,本实施例对编码模块94所采用的编码方法不作限定。

获得模块95,用于对编码模块94编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的位数组;

计算模块96,用于计算第一可执行文件与第二可执行文件对应的位数组的相似度;具体地,得到要计算相似度的第一可执行文件和第二可执行文件各自的位数组之后,两个文件相似度的检测就转换成两个位数组的相似度计算,越相似的两个文件在它们的位数组中有更多共同的1。

确定模块97,用于当计算模块96计算的上述相似度大于预定阈值时,确定第一可执行文件与第二可执行文件为相似文件。

而如果上述相似度小于或等于预定阈值,则确定模块97确定第一可执行文件与第二可执行文件不是相似文件。

其中,上述预定阈值可以在具体实现时根据系统性能和/或实现需求等自行设置,本实施例对上述预定阈值的大小不作限定。

上述可执行文件相似度的检测装置中,获取模块91获取第一可执行文件和第二可执行文件之后,反汇编模块92对第一可执行文件和第二可执行文件进行反汇编处理,分别得到第一可执行文件和第二可执行文件的反汇编文件,然后提取模块93提取第一可执行文件和第二可执行文件的反汇编文件中的操作码,编码模块94对提取的操作码进行编码处理,获得模块95对编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的位数组;最后计算模块96计算第一可执行文件与第二可执行文件对应的位数组的相似度,如果上述相似度大于预定阈值,则确定模块97确定第一可执行文件与第二可执行文件为相似文件,一方面,上述可执行文件相似度的检测装置考虑到了程序的本质逻辑,可以较好的抵抗病毒作者或软件剽窃者对源码或反编译代码的修改引入的干扰,极大地提高了病毒或剽窃程序逃避检测的难度;另一方面,上述可执行文件相似度的检测装置充分利用了布隆过滤器优异的空间效率,使得在计算性能较高的情况下特征损失较小,漏报或误报得到大幅减少。

图10为本申请可执行文件相似度的检测装置另一个实施例的结构示意图,与图9所示的可执行文件相似度的检测装置相比,不同之处在于,图10所示的可执行文件相似度的检测装置中,还可以包括:

构建模块98,用于构建布隆过滤器。

本实施例中,在获得模块95对编码模块94编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的位数组之前,构建模块98需要构建布隆过滤器。布隆过滤器是一种空间效率很高的随机数据结构,利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。

布隆过滤器是一个包含m位的位数组。为了表示s={x1,x2,…,xn}这样一个n个元素的集合,布隆过滤器使用k个相互独立的哈希函数,它们分别将集合中的每个元素映射到{1,…,m}的范围中。对任意一个元素x,第i个哈希函数映射的位置hi(x)就会被置为1(1≤i≤k)。注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在判断y是否属于这个集合时,对y应用k次哈希函数,如果所有hi(y)的位置都是1(1≤i≤k),那么确定y是集合中的元素,否则确定y不是集合中的元素。

下面介绍布隆过滤器的误判率分析与参数选择:在布隆过滤器的表示方法中,某一位被置为1的概率为被置为0的概率为散列函数共执行了kn次,所以在运算结束时,某位仍为0的概率为:

所以误判的概率为:

对于给定的n和m,对式(2)两端求导,令可求得当时误判的概率最小,此时:

假定预估的每个可执行文件可能出现的操作码的编码总数为n,并且知道确定的误判率,根据式(3),即可得到布隆过滤器的位数组的位数m,再由m和n,可得到哈希函数的个数k。至此,已经计算出所有的参数,选择好k个哈希函数后,布隆过滤器就建立起来了。最后,将布隆过滤器的位数组的每一位都置为0,也就是说,初始时,布隆过滤器的位数组的每一位的值为0,如图4所示。

这样,获得模块95,具体用于通过构建模块98预先构建的布隆过滤器对编码后的操作码进行过滤处理,得到第一可执行文件和第二可执行文件对应的布隆过滤器位数组。

在具体实现时,获得模块95可以将编码后的操作码根据布隆过滤器的算法都加入到预先构建的布隆过滤器中去,可以获得编码后的操作码所对应的布隆过滤器位数组,如图5所示。

本实施例中,提取模块93可以包括:分片子模块931和操作码提取子模块932;

分片子模块931,用于对第一可执行文件和第二可执行文件的反汇编文件进行分片;本实施例中,分片子模块931,具体用于以第一可执行文件和第二可执行文件的反汇编文件的基本逻辑单元为单位,对第一可执行文件和第二可执行文件的反汇编文件进行分片。

最典型的分片方法是按照函数或者基本块为单位,因为函数和基本块是反汇编文件的基本逻辑单元。

对于每个分片,每一行的格式为:code:[地址][操作码][操作数]。

操作码提取子模块932,用于提取第一可执行文件和第二可执行文件的反汇编文件的每个分片中的操作码。

如上所述,可以分别得到第一可执行文件和第二可执行文件的一个操作码编码集合,该集合中的元素是第一可执行文件和第二可执行文件反汇编文件的一个分片的操作码序列的一个编码。

本实施例中,计算模块96,具体用于计算第一可执行文件与第二可执行文件对应的位数组的汉明距离。

本实施例中,上述第一可执行文件与第二可执行文件对应的位数组可以为第一可执行文件和第二可执行文件对应的布隆过滤器位数组。布隆过滤器位数组可以使用汉明距离(hamming_distance)衡量相似度,也可以使用cosine、overlap、dice或jaccard等方法来检测相似度,本实施例对计算模块96计算布隆过滤器位数组的相似度的方法不作限定,但本实施例以汉明距离为例进行说明。这里,假设第一可执行文件对应的布隆过滤器位数组为位数组a,第二可执行文件对应的布隆过滤器位数组为位数组b,那么位数组a与位数组b的汉明距离就是a异或(xor)b获得的二进制结果中1的个数。

举例如下:

a=100111;

b=101010;

hamming_distance(a,b)=count_1(axorb)=count_1(001101)=3;

也就是说,位数组a与位数组b的汉明距离为3。

上述可执行文件相似度的检测装置,一方面,考虑到了程序的本质逻辑,可以较好的抵抗病毒作者或软件剽窃者对源码或反编译代码的修改引入的干扰,极大地提高了病毒或剽窃程序逃避检测的难度;另一方面,充分利用了布隆过滤器优异的空间效率,使得在计算性能较高的情况下特征损失较小,漏报或误报得到大幅减少。

图11为本申请计算机设备一个实施例的结构示意图,本实施例中的计算机设备可以包括存储器、处理器及存储在上述存储器上并可在上述处理器上运行的计算机程序,上述处理器执行上述计算机程序时,可以实现本申请实施例提供的可执行文件相似度的检测方法。

其中,上述计算机设备可以为终端设备,也可以为服务器,本实施例对上述计算机设备的形态不作限定,本实施例中,上述终端设备可以为个人计算机(personalcomputer;以下简称:pc)或者笔记本电脑等。

图11示出了适于用来实现本申请实施方式的示例性计算机设备12的框图。图11显示的计算机设备12仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图11所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。

总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(industrystandardarchitecture;以下简称:isa)总线,微通道体系结构(microchannelarchitecture;以下简称:mac)总线,增强型isa总线、视频电子标准协会(videoelectronicsstandardsassociation;以下简称:vesa)局域总线以及外围组件互连(peripheralcomponentinterconnection;以下简称:pci)总线。

计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。

系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(randomaccessmemory;以下简称:ram)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图11未显示,通常称为“硬盘驱动器”)。尽管图11中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(compactdiscreadonlymemory;以下简称:cd-rom)、数字多功能只读光盘(digitalvideodiscreadonlymemory;以下简称:dvd-rom)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。

具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本申请所描述的实施例中的功能和/或方法。

计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(localareanetwork;以下简称:lan),广域网(wideareanetwork;以下简称:wan)和/或公共网络,例如因特网)通信。如图11所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图11中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本申请实施例提供的可执行文件相似度的检测方法。

本申请实施例提供一种计算机可读存储介质,所述存储介质存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现本申请实施例提供的可执行文件相似度的检测方法。

上述非临时性计算机可读存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(readonlymemory;以下简称:rom)、可擦式可编程只读存储器(erasableprogrammablereadonlymemory;以下简称:eprom)或闪存、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(localareanetwork;以下简称:lan)或广域网(wideareanetwork;以下简称:wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。

应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(programmablegatearray;以下简称:pga),现场可编程门阵列(fieldprogrammablegatearray;以下简称:fpga)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1