一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种可移植的执行体文件的检测方法和装置与流程

2022-11-30 07:31:42 来源:中国专利 TAG:


1.本技术涉及通信技术领域,特别涉及一种可移植的执行体文件的检测方法和装置。


背景技术:

2.现有技术检测pe文件(可移植的执行体文件)的方法包括两种方法,即静态分析方法和动态分析方法。静态分析方法不需要运行pe文件(可移植的执行体文件),只需从pe文件中提取特征信息,比如pe文件头部的节信息或是导入表中的api(application programming interface,应用程序接口)信息,再比如从pe文件的反汇编指令序列中提取操作码的n-gram元组,然后训练一个分类模型,根据这些特征信息区分恶意软件和良性软件,由于这些特征中包含了很多能描述pe文件行为的信息,所以训练出的模型一般都具有出色的性能。静态分析方法的缺点是容易受到各种混淆技术、变态和多态的影响。
3.现有技术的动态分析方法需要运行pe文件,然后监视并分析,动态分析方法不容易受到混淆技术、变态和多态的影响,但是,动态分析方法也有一些问题。首先,在分析时,需要将pe文件放入安全的虚拟环境中运行并监视其行为,一方面,这个监视过程非常消耗时间,另一方面,虚拟环境的安全性一定要有所保障,防止恶意软件对宿主环境造成感染。然后,由于安全环境和真实环境可能存在很大的差别,恶意软件在两种环境下的表现可能截然不同,记录的行为信息可能无法体现出恶意软件的恶意行为。最后,恶意软件的恶意行为可能需要在特殊条件下才会触发,比如需要到某个特殊的日期才触发,或者监视到用户的某种操作,而在一般状态下,恶意软件并不表现出恶意行为,从此时记录的行为信息分析,恶意软件的行为可能与良性软件无异。
4.综上所述,现有技术的方案较为单一,且使用了一种较为简单的顺序方法来提取n-gram元组,这种方法会遗漏了很多信息,比如某些较小的函数以及因控制流转移产生的信息。


技术实现要素:

5.本技术实施例提供一种可移植的执行体文件的检测方法和装置,以解决针对现有技术提取n-gram元组的实现方式较为单一,导致不能检测较小的函数以及因控制流转移产生的信息的问题。
6.为了解决上述技术问题,本技术采用如下技术方案:
7.本技术实施例提供一种可移植的执行体文件的检测方法,包括:
8.获取目标可移植的执行体文件pe文件,并对所述目标pe文件反汇编,得到第一指令序列,所述第一指令序列中包括多个指令;
9.根据所述第一指令序列,确定提取元组时所采用的提取方式,所述提取方式包括:顺序方式或控制流图方式;
10.根据所述提取方式,获取所述目标pe文件对应的多个元组;
11.根据所述多个元组,确定目标pe文件的文件类型。
12.可选的,所述根据所述第一指令序列,确定提取元组时所采用的提取方式,包括:
13.若所述第一指令序列中存在程序控制指令,则确定提取元组时所采用的提取方式为控制流图方式;或者,
14.若所述第一指令序列中不存在程序控制指令,则确定提取元组时所采用的提取方式为顺序方式。
15.可选的,在所述提取方式为顺序方式的情况下,所述获取所述目标pe文件对应的多个元组,包括:
16.依次提取所述第一指令序列中每个指令的操作符,生成第一操作符序列;
17.获取元组所包含的操作符的第一数量;
18.根据所述第一数量和所述第一操作符序列,生成至少一个元组。
19.可选的,所述生成至少一个元组,包括:
20.按照第一操作符序列中的操作符的排序获取第一位置的操作符,获取至少一个第一元组;
21.获取至少一个第二元组,所述第二元组中包含所述第一操作符序列中第二位置的目标操作符以及预设字符,所述目标操作符的个数与预设字符的个数之和等于所述第一数量。
22.可选的,在所述提取方式为控制流图方式的情况下,所述获取所述目标pe文件对应的多个元组,包括:
23.根据所述程序控制指令中每一个程序控制指令生成对应一个控制流图;
24.根据所述控制流图,确定执行所述控制流图的控制信息;
25.根据所述控制信息,确定所述程序控制指令对应的多个元组。
26.可选的,根据所述控制信息,确定所述程序控制指令对应的多个元组,包括:
27.根据执行每个程序控制指令后均生成对应每个所述控制信息,确定每个程序控制指令对应的操作符;
28.根据每个程序控制指令对应的操作符,确定所述程序控制指令对应的多个元组。
29.可选的,所述程序控制指令包括无条件转移指令、条件转移指令、循环控制指令、中断指令以及子程序指令至少一种。
30.可选的,在所述程序控制指令包括子程序指令的情况下,根据所述控制信息,所述确定所述程序控制指令对应的多个元组,包括:
31.若所述控制信息包括应用程序接口api信息时,将所述api信息的目标名称替换执行所述子程序指令后确定的对应操作符;
32.根据替换后的对应操作符,确定所述程序控制指令对应的多个元组。
33.可选的,所述方法还包括:
34.当满足预设条件时,放弃生成对应的控制流图;
35.其中,所述预设条件包括:
36.若所述程序控制指令中的一个目标程序控制指令包括调用所述目标程序控制指令的自身函数时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图;或者,
37.若所述程序控制指令中的一个目标程序控制指令包括只有一条无条件转移指令时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图;或者,
38.若所述程序控制指令中的一个目标程序控制指令包括调用非所述第一指令序列对应的指令函数时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图。
39.可选的,所述根据所述多个元组,确定目标pe文件的文件类型,包括:
40.确定每一个元组的词频-逆文本频率算法tf-idf值;
41.根据每一个元组的所述tf-idf值排序,选取预设个数的目标元组生成特征向量;
42.根据所述特征向量,构建目标元组模型;
43.根据所述目标元组模型,确定目标pe文件的文件类型。
44.本技术实施例还提供一种可移植的执行体文件的检测装置,包括:
45.处理模块,用于获取目标可移植的执行体文件pe文件,并对所述目标pe文件反汇编,得到第一指令序列,所述第一指令序列中包括多个指令;
46.第一确定模块,用于根据所述第一指令序列,确定提取元组时所采用的提取方式,所述提取方式包括:顺序方式或控制流图方式;
47.获取模块,用于根据所述提取方式,获取所述目标pe文件对应的多个元组;
48.第二确定模块,用于根据所述多个元组,确定目标pe文件的文件类型。
49.本技术实施例还提供一种可读存储介质,其上存储有程序,该程序被处理器执行时实现如上所述的可移植的执行体文件的检测方法中的步骤。
50.本技术的有益效果是:
51.上述技术方案中,所述方法通过获取目标可移植的执行体文件pe文件,并对所述目标pe文件反汇编,得到第一指令序列,所述第一指令序列中包括多个指令;根据所述第一指令序列,确定提取元组时所采用的提取方式,所述提取方式包括:顺序方式或控制流图方式;根据所述提取方式,获取所述目标pe文件对应的多个元组;根据所述多个元组,确定目标pe文件的文件类型。本技术的技术方案通过提取顺序方式或控制流图方式,获取所述目标pe文件对应的多个元组(n-gram元组),并根据所述多个元组确定目标pe文件的文件类型,这里提取出的n-gram元组包含了更多能描述程序行为的信息,很好的解决了现有技术中因使用顺序方法来提取n-gram元组,导致遗漏很多信息,比如某些较小的函数以及因控制流转移产生的信息的弊端。
附图说明
52.图1表示本技术实施例提供的可移植的执行体文件的检测方法的流程示意图;
53.图2表示本技术根据控制流图方式构造n-gram元组的实例;
54.图3表示本技术实施例提供的可移植的执行体文件的检测装置的模块示意图。
具体实施方式
55.为使本技术要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。在下面的描述中,提供诸如具体的配置和组件的特定细节仅仅是
为了帮助全面理解本技术的实施例。因此,本领域技术人员应该清楚,可以对这里描述的实施例进行各种改变和修改而不脱离本技术的范围和精神。另外,为了清楚和简洁,省略了对已知功能和构造的描述。
56.应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本技术的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
57.在本技术的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
58.本技术针对现有技术提取n-gram元组的实现方式较为单一,导致不能检测较小的函数以及因控制流转移产生的信息的问题,提供一种可移植的执行体文件的检测方法和装置。
59.如图1所示,本技术的可选实施例提供一种可移植的执行体文件的检测方法,包括:
60.步骤100,获取目标可移植的执行体文件pe文件,并对所述目标pe文件反汇编,得到第一指令序列,所述第一指令序列中包括多个指令;
61.需要说明的是,所述第一指令序列还包括多个操作符以及操作数。反汇编是一种翻译过程,其目的是将文件代码按照特定的反汇编模式翻译成人类可读的指令,该指令为汇编指令。在具体实施过程中,可以采用一些现有反汇编工具软件实现反汇编,例如debug、id、ida pro、c32等等。反汇编模式通常有32位和64位。一条指令由两部分组成:操作符与操作数。其中,操作符表示指令,操作数为指令的对象。操作符是唯一的,而操作数可能有多个。
62.例如,假设选择出的目标pe文件的代码为16进制,假设使用32位反汇编模式对该代码进行反汇编,可以得到如表1的指令,表1如下所示:
[0063][0064]
表1:第一序列示意图;
[0065]
其中,举例说明几个操作符的含义,如push的含义是将数据压入堆栈;mov的含义是将a赋值为b,等等。
[0066]
步骤200,根据所述第一指令序列,确定提取元组时所采用的提取方式,所述提取方式包括:顺序方式或控制流图方式;
[0067]
该实施例中,通过确认提取元组时所采用的提取方式可以保证数据提取的准确性。这里,顺序方式提取速度快,控制流图方式提取不容易丢失针对程序控制指令的生成信息,在不同的第一指令序列下采取相应的提取方式,可以提升提取数据的效率。
[0068]
步骤300,根据所述提取方式,获取所述目标pe文件对应的多个元组(n-gram元组);
[0069]
步骤400,根据所述多个元组,确定目标pe文件的文件类型。
[0070]
该实施例中,通过提取顺序方式或控制流图方式,获取所述目标pe文件对应的多个元组(n-gram元组),并根据所述多个元组确定目标pe文件的文件类型,这里提取出的n-gram元组包含了更多能描述程序行为的信息,很好的解决了现有技术中因使用顺序方法来提取n-gram元组,导致遗漏很多信息,比如某些较小的函数以及因控制流转移产生的信息的弊端。
[0071]
可选的,所述步骤200,包括:
[0072]
若所述第一指令序列中存在程序控制指令,则确定提取元组时所采用的提取方式为控制流图方式;或者,
[0073]
若所述第一指令序列中不存在程序控制指令,则确定提取元组时所采用的提取方式为顺序方式。
[0074]
该实施例中,控制流图方式可以保证数据的准确性,比如控制流转移产生的信息,以及“call api”时的应用程序接口(api)信息。顺序方式可以提取速度快。通过判断所述第一指令序列中是否存在程序控制指令,从而确定对应的提取方法,实现了提取方式的多样性,提高了提取元组(n-gram元组)的准确性和效率。
[0075]
可选的,在所述提取方式为顺序方式的情况下,所述步骤300,包括:
[0076]
依次提取所述第一指令序列中每个指令的操作符,生成第一操作符序列;
[0077]
该实施例中,依次提取所述第一指令序列中每个指令的操作符,例如,通过上述表1所示,这里生成的第一操作符序列可以为“mov、test、je、push、call、test、pop、je、push、pop、ret、xor、ret”。
[0078]
获取元组所包含的操作符的第一数量(n);
[0079]
这里的元组可以通过n-gram元组形式表示,n-gram是一种基于统计语言模型的算法,它的基本思想是将数据里面的内容按照单元进行大小为n的窗口滑动窗口操作,形成长度是n的单元片段序列,每个单元片段称为gram。
[0080]
根据所述第一数量(n)和所述第一操作符序列,生成至少一个元组。
[0081]
该实施例中,元组(n-gram)是第一操作符序列中连续出现的n个操作符,通过确定第一数量n,以及根据第一操作符序列,可以确定用以区分pe文件特征的至少一个元组(n-gram)。
[0082]
可选的,所述生成至少一个元组,包括:
[0083]
按照第一操作符序列中的操作符的排序获取第一位置的操作符,获取至少一个第一元组;
[0084]
该实施例中,若第一操作符序列中若不考虑头尾的操作符,且第一操作符序列中的操作符为“mov、test、je”,则至少获取的1-gram第一元组为“test”。若以上述表1为例,假设n为3,那么根据第一操作符序列“mov、test、je、push、call、test、pop、je、push、pop、ret、xor、ret”,会生成多个3-gram的特征,即(mov、test、je),(test、je、push),(je、push、call),(push、call、test),(call、test、pop),(test、pop、je),(pop、je、push),je、push、pop),(push、pop、ret),(pop、ret、xor),(ret、xor、ret)。
[0085]
获取至少一个第二元组,所述第二元组中包含所述第一操作符序列中第二位置的目标操作符以及预设字符,所述目标操作符的个数与预设字符的个数之和等于所述第一数量。
[0086]
这里,所述预设字符可以通过“*”表示,该实施例中,若第一操作符序列中若考虑头尾的操作符,同样以上述表1为例,假设n为3,那么根据第一操作符序列“mov、test、je、push、call、test、pop、je、push、pop、ret、xor、ret”,会生成多个3-gram的特征,除了上述的3-gram特征,还会生成的3-gram特征,即第二元组(*、*、mov),(*、mov,test),(xor、ret、*),(ret、*、*);以“(*、*、mov)”为例,所述目标操作符的个数(“mov”的个数)与预设字符(*)的个数之和等于所述第一数量(3-gram的n)。
[0087]
这里,获取至少一个第二元组具体方式为,使用当前位置的操作码和其后两个操作码一起组成3-gram元组,最后,还要加上一些特殊的元组,对于第一个位置上的操作码,使用两个“*”和它组成3-gram元组,如(*,*,mov),对于前两个位置上的操作码,使用一个“*”,如(*,mov,test),对于序列中最后一个、两个操作码做类似的处理。
[0088]
本技术的顺序方式提取元组可以对每一个函数提取元组(n-gram元组),都可以提取包含函数头部或尾部信息的n-gram元组,避免了较短的函数其长度甚至不及n-gram元组的n值,导致这种函数就略过,还避免了可能函数的前n-1个操作码或者最后n-1个操作码足以作为用于区分pe文件类别的元组,导致忽略的问题,提高了提取元组的准确性,该顺序方式提取元组的优点是速度快。
[0089]
在另一具体实施例中,在所述提取方式为控制流图方式的情况下,所述步骤300,包括:
[0090]
步骤310,根据所述程序控制指令中每一个程序控制指令生成对应一个控制流图;
[0091]
步骤320,根据所述控制流图,确定执行所述控制流图的控制信息;
[0092]
需要说明的是,执行每个控制流图后均会生成一个对应的控制信息,例:当出现“je”指令时,在执行“je”指令的控制流图时,会出现两个判断分支,即je判断为true时控制流转到一分支,je判断为false时控制流转到另一分支,每一分支会生成不同的信息,故描述控制流转移时产生的信息,可以确定不同的元组。
[0093]
步骤330,根据所述控制信息,确定所述程序控制指令对应的多个元组。
[0094]
该实施例中,通过执行控制流图生成所述控制信息,确定所述程序控制指令对应的多个元组,能够利用操作码的n-gram元组的方法在检测性能上更加出色,能多检测出目标pe软件,就能减少一点遭受损失的风险。
[0095]
可选的,所述步骤330,包括:
[0096]
根据执行每个程序控制指令后均生成对应每个所述控制信息,确定每个程序控制指令对应的操作符;
[0097]
根据每个程序控制指令对应的操作符,确定所述程序控制指令对应的多个元组。
[0098]
该实施例中,根据执行每个程序控制指令后均生成对应每个所述控制信息,可以确定每个程序控制指令对应的操作符,根据每个操作符,去提取指定函数的前几个和后几个操作码组成的元组(n-gram)。当然,针对多种程序控制指令会有多种不同的情况发生,这里简单说明一种例子,即当n值较大时,虽然要获取的是n-1个操作码组成的元组,但是也可能获取到更短的元组,比如函数很短,立刻就遇到ret指令,这时长度不够的元组依旧可以用于加长待构造元组,可以理解为被调用函数的结尾就和调用位置连接起来了,但是如果不是因为ret指令导致长度不够,就应该舍弃该元组,此时无法和调用位置连接起来。
[0099]
具体地,根据控制流的方法中,主要确定所述程序控制指令对应的多个元组的部分,以图2为例,大括号中的内容表示待构造的n-gram元组。每遇到一个能作为n-gram元组中元素的操作码,或是“call eax”和“call api”,就更新大括号里的待构造元组,给每一个不足n个元素的n-gram元组增加一个元素,并且新增一个单元素的待构造元组,因为这个位置的操作码、“call”和“api”也可以作为n-gram元组的第一位元素。当遇到“call fcn.00401230”时,要获取其前n-1个操作码组成的元组和最后n-1、n-2、
……
、1个操作码组成的元组,如图2中“虚线框”的大括号内容,使用前n-1个操作码组的元组给待构造的n-gram元组增加元素,将最后n-1个操作码组成的元组直接加入到待构造元组中去;将构造完毕的n-gram元组作为返回结果,将长度不够的元组舍弃。
[0100]
可选的,所述程序控制指令包括无条件转移指令、条件转移指令、循环控制指令、中断指令以及子程序指令至少一种。
[0101]
需要说明的是,无条件转移指令包括但不限于:(长转移)jmp-无条件转移指令;call-过程调用指令;ret/retf-过程返回指令。条件转移指令包括但不限于:(短转移,-128到 127的距离内;当且仅当(sf、xor、of)=1时,op1《op2);ja/jnbe:大于转移;jae/jnb-大于或等于转移;jb/jnae-小于转移;jbe/jna-小于或等于转移,以上四条,测试无符号整数运算的结果(标志c和z);jg/jnle-大于转移;jge/jnl-大于或等于转移;jl/jnge-小于转移;jle/jng-小于或等于转移,以上四条,测试带符号整数运算的结果(标志s,o和z);je/jz-等于转移;jne/jnz-不等于时转移;jc-有进位时转移;jnc-无进位时转移;jno-不溢出时转移;jnp/jpo-奇偶性为奇数时转移;jns-符号位为"0"时转移;jo-溢出转移;jp/jpe-奇偶性为偶数时转移;js-符号位为"1"时转移。循环控制指令包括但不限于:(短转移)loop:cx不为零时循环;loope/loopz:cx不为零且标志z=1时循环;loopne/loopnz:cx不为零且标志z=0时循环;jcxz:cx为零时转移;jecxz:ecx为零时转移。中断指令包括但不限于:int:中断指令;into:溢出中断;iret:中断返回。这里,仅仅列举了多种可能出现的指令,当然并不包括实际应用中的所有指令。这里,子程序指令包括但不限于调用其他函数的“call”指令。
[0102]
每一不同的程序指令均对应生成不同的信息,在一具体实施例中,应用上述表1提取到的第一操作符序列“mov、test、je、push、call、test、pop、je、push、pop、ret、xor、ret”说明,第一个“ret”指令产生了一个问题元组(pop,ret,xor),实际上指令执行到“ret”就会根据返回地址改变下一条指令的地址了,并不会继续执行其后的“xor”指令,这条路径并不会出现在程序的实际执行过程中,所以将这个元组放入到n-gram元组序列中会增加错误的信息。另,有两个“je”指令,根据这两个指令,应当加入四个元组,描述通过je跳转到最后两行,即(test,je,xor),(je,xor,ret),(pop,je,xor),(je,xor,ret),这四个元组是包含在程序的实际执行路径中的,将这些元组加入到n-gram元组序列中,则会增加一些能描述程序行为的信息。
[0103]
故,针对不同的程序控制指令,确定每个程序控制指令对应的操作符;根据每个程序控制指令对应的操作符,确定所述程序控制指令对应的多个元组。
[0104]
可选的,在所述程序控制指令包括子程序指令的情况下,根据所述控制信息,所述确定所述程序控制指令对应的多个元组,包括:
[0105]
若所述控制信息包括应用程序接口api信息时,将所述api信息的目标名称替换执行所述子程序指令后确定的对应操作符;
[0106]
根据替换后的对应操作符,确定所述程序控制指令对应的多个元组。
[0107]
该实施例中,子程序指令(“call”指令)也会影响控制流。对于“call”的参数,通过反汇编工具分析之后,可能是一个系统调用名称,根据使用的反汇编工具可能有所不同,也可能是另一个函数的地址,即调用自身的另一个函数,也有可能是其他的,比如一个寄存器。若所述控制信息包括应用程序接口api信息时,api调用名称加入到n-gram元组中。“call”指令的参数中,如果是一个系统调用名称,那么可以将该名称加入到n-gram元组中。如果是其他函数的地址,那么将被调用函数开头和结尾的操作码和“call”指令之前和之后的操作码结合起来,组成n-gram元组,即将调用位置和被调用函数的开头与结尾连接起来。如果“call”指令的参数是其他内容,则使用“call”本身来构造n-gram元组。另,当出现“call eax”这种指令,由于无法进一步跟踪调用信息,所以只能直接使用“call”来直接构
造n-gram元组。这里,根据替换后的对应操作符,确定所述程序控制指令对应的多个元组,例如:对于api调用,使用api名称替代“call”来构造n-gram元组,生成类似的控制指令,即形成(push,push,api-name),(push,api-name,push)之类的元组。
[0108]
当然,“call”指令并不仅仅是子程序指令,当“call”指令为过程调用指令时,即现“call fcn.004012ec”为例,要构造3-gram元组,先获取“fcn.004012ec”函数的前两个操作码和后两个操作码,假设分别是“push”、“push”和“xor”、“pop”,那么需要构造四个元组,分别是(mov,push,push)、(push,push,push)和(xor,pop,mov)、(pop,mov,mov),前两个元组结合了“call”指令前两个操作符和被调用函数中前两个操作符,后两个元组结合了“call”指令后两个操作符和被调用函数忽略“ret”指令后的最后两个操作符。
[0109]
可选的,所述方法还包括:
[0110]
当满足预设条件时,放弃生成对应的控制流图;
[0111]
其中,所述预设条件包括:
[0112]
若所述程序控制指令中的一个目标程序控制指令包括调用所述目标程序控制指令的自身函数时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图;或者,
[0113]
该实施例中,若所述程序控制指令中的一个目标程序控制指令对应的函数的第一行就是调用程序中的函数,被调用函数可能是调用函数自身,于是提取该函数前几个元组时会不断地深入查看被调用函数前几个操作码,从而陷入死循环,也有可能通过几个函数连续第一行调用彼此来完成这种陷阱;函数的最后一个指令(已经忽略了ret指令)是调用自身,或者通过几个最后会调用彼此的函数,也能产生相同的效果,故,若所述程序控制指令中的一个目标程序控制指令包括调用所述目标程序控制指令的自身函数时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图。
[0114]
若所述程序控制指令中的一个目标程序控制指令包括只有一条无条件转移指令时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图;或者,
[0115]
举例说明,根据反汇编器的结果,有的基本块只有一条“ret”指令(无条件转移指令),反汇编器产生的控制流图中,该基本块的后继基本块或者前继基本块是该基本块自身,由于在这个方法中“ret”指令是被忽略掉的,所以当从该基本块中并没有成功获取到所需数目的操作码时,会考虑后继基本块或者前继基本块的信息,于是会不停的查看下一个基本块,陷入死循环。故,若所述程序控制指令中的一个目标程序控制指令包括只有一条无条件转移指令时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图。
[0116]
若所述程序控制指令中的一个目标程序控制指令包括调用非所述第一指令序列对应的指令函数时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图。
[0117]
例如:当使用“call”指令调用的自身函数并不存在,即使反汇编器的函数列表中有这个名字,此时若不加判断则进一步的处理将出现崩溃。故,若所述程序控制指令中的一个目标程序控制指令包括调用非所述第一指令序列对应的指令函数时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图。
[0118]
该实施例中,当出现上述三种条件出现时,放弃生成对应的控制流图,使得针对控制流图方式提取多个元组的方法更加完整,使得提取元组的信息更加准确。
[0119]
应当知道的是,在通过步骤400前会计算多个pe文件作为样本数据,构建模型,从而确定目标pe文件的文件类型时。
[0120]
具体地,所述步骤400,包括:
[0121]
步骤410,确定每一个元组(n-gram元组)的词频-逆文本频率算法tf-idf值;
[0122]
需要说明的是,需要为每一个元组分别计算该类样本中的tf-idf值,每一个元组的tf-idf值描述了在当前pe文件中该元组出现频率的高低以及该元组在多个pe文件样本中出现的罕见程度,tf-idf值高则表示该元组集中出现在当前pe文件样本中,在其他pe文件样本中很少见。
[0123]
具体地,确定每一个元组(n-gram元组)的词频-逆文本频率算法tf-idf值;可以采用下列公式计算tf-idf值,即:
[0124][0125][0126]
tf-idf(i,jf)=tf(i,jf)
×
idf(i)
ꢀꢀꢀꢀ
公式三;
[0127]
公式一中,tf即词频,描述某个词在文本中出现的频率。用在本技术中就是n-gram元组i在n-gram元组的序列j中出现的频率,n(i,j)表示n-gram元组序列j中,n-gram元组i出现的次数,∑kn(i,j)表示n-gram元组序列j中的n-gram元组的总数;
[0128]
公式二中,idf即逆文档频率,描述某个词的罕见程度,即是否只出现在少数文档中。在本技术中,就是某个n-gram元组是否只出现在少数n-gram元组序列中。d表示序列的集合,|d|表示集合中序列的数目,|{j:i∈j,j∈d}|表示n-gram元组i在多少序列中出现;
[0129]
公式三中,jf表示将一目标pe文件中所有从pe文件提取出的n-gram元组序列合并在一起组成的序列,tf(i,jf)表示n-gram元组i在jf中出现的频率,idf(i)依旧是描述元组i的罕见程度。tf-idf(i,jf)的值较大时,则说明元组i在较少数的pe文件中出现,并且在jf这一目标pe文件中出现的频率很高,即元组i只在jf这一目标pe文件中大量出现,而在其他pe文件中较少出现或者不出现。
[0130]
这里要注意的是对于idf值,只需要计算一遍,不用在每一pe文件中都计算一遍idf值,会浪费很多时间,而tf值则需针对各类pe文件分别进行计算。
[0131]
步骤420,根据每一个元组的所述tf-idf值排序,选取预设个数的目标元组生成特征向量;
[0132]
该实施例中,由于从pe文件中提取出的不同的元组很多,不便于直接用作特征,所以需要根据tf-idf值降序排序,选择排名靠前的一些元组,作为一pe文件样本的目标元组,即特征n-gram元组,需要分别为每一pe文件选择特征n-gram元组,然后将这些元组放在一起构成特征向量的模式。
[0133]
需要说明的是,对每一目标pe文件的序列,找出有哪些不同的n-gram元组,计算各个元组的tf-idf值,然后排序。从每一目标pe文件序列中选出排名考前的几个元组,共同构成特征向量的模式,从pe文件中提取关于这些元组的信息构建特征向量,据此可以对pe文
件所属类型有较好的判断。
[0134]
步骤430,根据所述特征向量,构建目标元组模型;
[0135]
该实施例中,根据特征向量的模式构造特征向量,向量的每一位代表在pe文件的所有n-gram元组中,这一位对应的n-gram元组出现的频率。由于选择出的n-gram元组都是更倾向于出现在特定pe文件样本中,所以不同pe文件样本的特征向量在该向量空间中应当处于不同分布。
[0136]
需要说明的是,每一pe文件的排名靠前的n-gram元组可能有重复,所以实现了类似外排序的方法,从每一pe文件选出t个n-gram元组,每次选择都从当前各pe文件排名第一的n-gram元组中选tf-idf值最大的一个,并将其从所属pe文件的排名序列中去除,如果选出的n-gram元组之前已经选过,则将其从所属pe文件的排名序列中去除并重新选择。由于查阅的大多数文献都在随机森林算法上取得了最好的分类结果,所以本技术采用随机森林算法训练分类模型。
[0137]
步骤440,根据所述目标元组模型,确定目标pe文件的文件类型。
[0138]
这里,所述文件类型是指所属类别为正常pe文件或恶意pe文件尚未确定的pe文件,所述正常pe文件是指不包括恶意代码的pe文件,所述恶意pe文件是指包括恶意代码的pe文件。
[0139]
该实施例中,根据所述目标元组模型,可以得到目标pe文件是否为恶意pe文件的检测结果。而在这个过程中,不管目标pe文件的代码的形态是否被攻击者改变,只要目标pe文件为恶意pe文件,它就无法与正常pe文件聚为一类,从而能够准确的识别出目标pe文件的类别,提高恶意pe文件的检测准确率,以及降低漏检率。
[0140]
综上所述,本技术的技术方案通过提取顺序方式或控制流图方式,获取所述目标pe文件对应的多个元组(n-gram元组),并根据所述多个元组确定目标pe文件的文件类型,这里提取出的n-gram元组包含了更多能描述程序行为的信息,很好的解决了现有技术中因使用顺序方法来提取n-gram元组,导致遗漏很多信息,比如某些较小的函数以及因控制流转移产生的信息的弊端。
[0141]
如图3所示,本技术实施例还提供一种可移植的执行体文件的检测装置,包括:
[0142]
处理模块10,用于获取目标可移植的执行体文件pe文件,并对所述目标pe文件反汇编,得到第一指令序列,所述第一指令序列中包括多个指令;
[0143]
第一确定模块20,用于根据所述第一指令序列,确定提取元组时所采用的提取方式,所述提取方式包括:顺序方式或控制流图方式;
[0144]
获取模块30,用于根据所述提取方式,获取所述目标pe文件对应的多个元组;
[0145]
第二确定模块40,用于根据所述多个元组,确定目标pe文件的文件类型。
[0146]
可选的,所述第一确定模块20,包括:
[0147]
第一确定单元,用于若所述第一指令序列中存在程序控制指令,则确定提取元组时所采用的提取方式为控制流图方式;或者,
[0148]
第二确定单元,用于若所述第一指令序列中不存在程序控制指令,则确定提取元组时所采用的提取方式为顺序方式。
[0149]
可选的,所述获取模块30,包括:
[0150]
第一生成单元,用于依次提取所述第一指令序列中每个指令的操作符,生成第一
操作符序列;
[0151]
第一获取单元,用于获取元组所包含的操作符的第一数量;
[0152]
第二生成单元,用于根据所述第一数量和所述第一操作符序列,生成至少一个元组。
[0153]
可选的,所述第二生成单元,包括:
[0154]
第一获取子单元,用于按照第一操作符序列中的操作符的排序获取第一位置的操作符,获取至少一个第一元组;
[0155]
第二获取子单元,用于获取至少一个第二元组,所述第二元组中包含所述第一操作符序列中第二位置的目标操作符以及预设字符,所述目标操作符的个数与预设字符的个数之和等于所述第一数量。
[0156]
可选的,所述获取模块30,还包括:
[0157]
第三生成单元,用于根据所述程序控制指令中每一个程序控制指令生成对应一个控制流图;
[0158]
第三确定单元,用于根据所述控制流图,确定执行所述控制流图的控制信息;
[0159]
第四确定单元,用于根据所述控制信息,确定所述程序控制指令对应的多个元组。
[0160]
可选的,所述第四确定单元,包括:
[0161]
第一确定子单元,用于根据执行每个程序控制指令后均生成对应每个所述控制信息,确定每个程序控制指令对应的操作符;
[0162]
第二确定子单元,用于根据每个程序控制指令对应的操作符,确定所述程序控制指令对应的多个元组。
[0163]
需要说明的是,所述程序控制指令包括无条件转移指令、条件转移指令、循环控制指令、中断指令以及子程序指令至少一种。
[0164]
可选的,所述第四确定单元,还包括:
[0165]
替换子单元,用于若所述控制信息包括应用程序接口api信息时,将所述api信息的目标名称替换执行所述子程序指令后确定的对应操作符;
[0166]
第三确定子单元,用于根据替换后的对应操作符,确定所述程序控制指令对应的多个元组。
[0167]
可选的,所述装置还包括:
[0168]
判断模块,用于当满足预设条件时,放弃生成对应的控制流图;
[0169]
其中,所述预设条件包括:
[0170]
若所述程序控制指令中的一个目标程序控制指令包括调用所述目标程序控制指令的自身函数时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图;或者,
[0171]
若所述程序控制指令中的一个目标程序控制指令包括只有一条无条件转移指令时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图;或者,
[0172]
若所述程序控制指令中的一个目标程序控制指令包括调用非所述第一指令序列对应的指令函数时,跳出所述目标程序控制指令,并放弃生成所述目标程序控制指令对应的控制流图。
[0173]
可选的,所述第二确定模块40,包括:
[0174]
第五确定单元,用于确定每一个元组的词频-逆文本频率算法tf-idf值;
[0175]
选取单元,用于根据每一个元组的所述tf-idf值排序,选取预设个数的目标元组生成特征向量;
[0176]
构建单元,用于根据所述特征向量,构建目标元组模型;
[0177]
第六确定单元,用于根据所述目标元组模型,确定目标pe文件的文件类型。
[0178]
本技术实施例还提供一种可读存储介质,该可读存储介质上存储有程序,该程序被处理器执行时实现如上所述的可移植的执行体文件的检测方法的实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,该可读存储介质,如只读存储器(read-only memory,简称rom)、随机存取存储器(random access memory,简称ram)、磁碟或者光盘等。
[0179]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0180]
以上所述的是本技术的优选实施方式,应当指出对于本技术领域的普通人员来说,在不脱离本技术所述的原理前提下还可以作出若干改进和润饰,这些改进和润饰也在本技术的保护范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献