安卓系统下的恶意代码检测方法、系统及一种移动终端与流程

文档序号:12612391阅读:280来源:国知局
安卓系统下的恶意代码检测方法、系统及一种移动终端与流程

本申请要求武汉安天信息技术有限责任公司于2015年12月08日提交的、发明名称为“安卓系统下基于虚拟技术的恶意代码检测方法及系统”的、中国专利申请号“201510889821.X”的优先权。

技术领域

本发明涉及恶意代码监测技术领域,尤其涉及一种安卓系统下的恶意代码检测方法及系统。



背景技术:

当前安卓系统下的恶意代码呈现出更加复杂的发展趋势,其采用了更加复杂的混淆、加密手段,并且加密算法通常采用自定义算法,给恶意代码的静态检测带来很大挑战,恶意代码将敏感字符串、执行代码、执行模块文件进行加密,使得现有的静态检测方案不能有效的对其进行智能检测。

安卓系统目前支持多种可执行文件格式,例如APK、DEX、ELF等,并且在Android4.4之后添加了一种新的运行时环境ART,该运行时环境下的可执行文件格式为OAT,Android5.0以后,便将原来的Dalvik运行时环境完全替代为ART运行时环境,并且安卓系统在运行的CPU架构上,除了ARM,还增加了对X86、MIPS以及ARM64位的支持,由于安卓系统可执行文件和指令架构的多样化,恶意代码也以多种形态存在,所以安卓系统下对恶意代码的静态检测方案也必须支持多种格式和指令架构。



技术实现要素:

针对现有安卓系统下恶意代码静态检测技术中存在的不足,本发明提出了一种安卓系统下的恶意代码检测方法及系统,首先对安卓系统下的可执行文件进行识别和解析,拆分出各可执行文件的机器指令,利用虚拟技术模拟执行机器指令,并模拟指令运行时所需物理环境,监测并记录敏感执行信息,以及敏感调用信息,最终通过规则库匹配,判断是否存在含有恶意代码的可执行文件。

具体发明内容包括:

安卓系统下的恶意代码检测方法,包括:

对安卓系统下的可执行文件进行格式识别和解析,并确定各可执行文件的代码块在内存中的分布位置,该过程支持多种可执行文件的格式识别和解析,包括APK、DEX、ELF、OAT等格式的可执行文件;

解析代码块中的代码指令,并将解析的代码指令拆分为由操作码、操作数两部分组成的机器指令,该过程支持多种架构下的代码指令的识别和解析,包括Dalvik、ARM、Thumb、ARM64、X86、MIPS等架构下的代码指令,并将解析的各代码指令拆分为相应架构下的机器指令;

解析并模拟执行各可执行文件的机器指令,对在运行架构下的可执行文件的机器指令时的模拟执行行为进行监测,同时记录敏感行为信息,并监测系统下的调用行为,该过程支持对不同架构下的机器指令进行解析和模拟执行;

将监测的模拟执行状态以及调用行为与检测规则库中的特征进行匹配,判断相应的可执行文件中是否包含恶意代码,所述检测规则库中的特征包括:恶意代码字符串、恶意代码序列、恶意代码释放的代码模块名称、恶意API签名、恶意文件路径、恶意API调用序列。

进一步地,所述模拟执行各可执行文件的机器指令,包括模拟实现每条机器指令、模拟不同架构的寄存器、模拟内存分配,所述寄存器包括通用寄存器、状态寄存器。

进一步地,所述模拟执行行为包括:模拟对寄存器的操作、模拟对内存的操作、模拟对栈的操作,具体为:根据所要模拟执行的机器指令在执行过程中所占的内存,模拟分配一定的内存空间,实现模拟对内存的操作,并将模拟分配的内存空间中的一部分模拟为栈空间,利用模拟对寄存器的操作来模拟使用所述栈空间,从而实现对各可执行文件的机器指令进行模拟执行。

进一步地,所述监测系统下的调用行为,包括:对模拟执行机器指令过程中的系统调用以及API调用进行模拟,并监测模拟的调用行为,对敏感调用行为进行记录,所述敏感调用行为包括文件系统写入、网络连接、通信、文件创建、文件删除、修改参数、修改返回值以及发送短信、拨打电话等移动端特有的行为等。

进一步地,还包括对可执行文件的代码块进行加密、解密入口识别,模拟执行加密、解密代码,获取加密代码块的明文信息,对所述明文信息中的敏感信息进行记录,并将记录的敏感信息与检测规则库中的特征进行匹配,判断相应的可执行文件中是否包含恶意代码,所述敏感信息包括敏感字符串、敏感代码、敏感执行信息等。

安卓系统下的恶意代码检测系统,包括:

可执行文件解析模块,用于对安卓系统下的可执行文件进行格式识别和解析,并确定各可执行文件的代码块在内存中的分布位置,该过程支持多种可执行文件的格式识别和解析,包括APK、DEX、ELF、OAT等格式的可执行文件;

指令架构解析模块,用于解析代码块中的代码指令,并将解析的代码指令拆分为由操作码、操作数两部分组成的机器指令,该过程支持多种架构下的代码指令的识别和解析,包括Dalvik、ARM、Thumb、ARM64、X86、MIPS等架构下的代码指令,并将解析的各代码指令拆分为相应架构下的机器指令;

虚拟执行模块,用于解析并模拟执行各可执行文件的机器指令,对模拟执行行为进行监测,同时记录敏感行为信息,并监测系统下的调用行为,该过程支持对不同架构下的机器指令进行解析和模拟执行;

规则库匹配模块,用于将监测的模拟执行状态以及调用行为与检测规则库中的特征进行匹配,判断相应的可执行文件中是否包含恶意代码,所述检测规则库中的特征包括:恶意代码字符串、恶意代码序列、恶意代码释放的代码模块名称、恶意API签名、恶意文件路径、恶意API调用序列。

进一步地,所述模拟执行各可执行文件的机器指令,包括模拟实现每条机器指令、模拟不同架构的寄存器、模拟内存分配,所述寄存器包括通用寄存器、状态寄存器。

进一步地,所述模拟执行行为包括:模拟对寄存器的操作、模拟对内存的操作、模拟对栈的操作,具体为:根据所要模拟执行的机器指令在执行过程中所占的内存,模拟分配一定的内存空间,实现模拟对内存的操作,并将模拟分配的内存空间中的一部分模拟为栈空间,利用模拟对寄存器的操作来模拟使用所述栈空间,从而实现对各可执行文件的机器指令进行模拟执行。

进一步地,所述监测系统下的调用行为,包括:对模拟执行机器指令过程中的系统调用以及API调用进行模拟,并监测模拟的调用行为,对敏感调用行为进行记录,所述敏感调用行为包括文件系统写入、网络连接、通信、文件创建、文件删除、修改参数、修改返回值等。

进一步地,还包括对可执行文件的代码块进行加密、解密入口识别,模拟执行加密、解密代码,获取加密代码块的明文信息,对所述明文信息中的敏感信息进行记录,并将记录的敏感信息与检测规则库中的特征进行匹配,判断相应的可执行文件中是否包含恶意代码,所述敏感信息包括敏感字符串、敏感代码、敏感执行信息等。

本发明还提出了一种移动终端,包括:一个或者多个处理器;存储器;一个或多个程序,所述一个或者多个程序存储在所述存储器中,当被所述一个或者多个处理器执行时进行如下操作:

对安卓系统下的可执行文件进行格式识别和解析,并确定可执行文件的代码块在内存中的分布位置;

确定所述安卓系统下的运行架构的所属类型,并基于所述分布位置,根据所述所属类型解析代码块中的代码指令,并对解析的代码指令进行拆分以生成所述运行架构下的机器指令,其中,所述机器指令由操作码和操作数两部分组成;

根据所述运行架构的所属类型确定对应的处理规则,并根据所述处理规则解析并模拟执行在所述运行架构下的可执行文件的机器指令,并对模拟执行行为进行监测,同时记录敏感行为信息,并监测系统下的调用行为;

将监测的模拟执行状态以及调用行为与检测规则库中的特征进行匹配,判断所述可执行文件中是否包含恶意代码。

本发明还提出了一种存储介质,用于存储应用程序,所述应用程序用于执行本发明所述的安卓系统下的恶意代码检测方法。

本发明的有益效果是:

本发明适用于现有安卓系统的多运行环境、多格式可执行文件以及多指令架构;

本发明将可执行文件解析为含有操作码和操作数的机器指令,并对机器指令进行模拟执行,而不是直接将解析的指令代码进行模拟执行,有效的减少了执行指令过程中所占用的内存;

本发明采用虚拟执行技术,在不安装或者运行可执行文件的前提下,对恶意代码进行静态检测,并且由于本发明实现的方法及系统具有占用内存小,运行时消耗资源少的优势,本发明可以直接实现在移动终端上;

本发明在模拟实现机器指令的同时,模拟了指令运行过程中所需环境,包括模拟寄存器、模拟内存分配、模拟栈操作,使得模拟执行结果更真实更精确,并且本发明还对指令执行过程中可能调用的系统指令以及API进行模拟操作,使得检测范围更全面,有效提高检测精度;

本发明只对指令执行过程中可能出现的系统调用以及API调用进行监测,而不是对全部系统指令以及API进行监测,使得在保障检测结果的同时,有效提高了检测速度,减少了在模拟执行和监测过程中的资源消耗;

进一步地,本发明还实现了对加密代码块的监测,首先识别代码块的加密、解密入口,其次通过模拟执行加密、解密代码来获取加密代码块的明文信息,并对明文信息中的敏感信息进行记录,实现了安卓系统下对恶意代码的深度检测,有效避免了通过加密手段进行隐藏的恶意代码所造成的威胁。

附图说明

为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明安卓系统下的恶意代码检测的方法流程图;

图2为本发明安卓系统下的恶意代码检测的系统结构图。

具体实施方式

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明。

本发明给出了安卓系统下的恶意代码检测的方法实施例,如图1所示,包括:

S101:对安卓系统下的可执行文件进行格式识别和解析,并确定各可执行文件的代码块在内存中的分布位置,该过程支持多种可执行文件的格式识别和解析,包括APK、DEX、ELF、OAT等格式的可执行文件;

可以理解,可对安卓系统下的可执行文件进行格式识别和解析,以确定该系统中各个可执行文件的代码块在内存中的分布位置,即对各个可执行文件的代码块进行定位,通过该定位结果便于后续对该代码块进行解析分析和模拟执行操作。

S102:确定安卓系统下的运行架构的所属类型,并基于分布位置,根据所属类型解析代码块中的代码指令,并对解析的代码指令进行拆分以生成运行架构下的机器指令,其中,机器指令由操作码和操作数两部分组成,该过程支持多种架构下的代码指令的识别和解析,包括Dalvik、ARM、Thumb、ARM64、X86、MIPS等架构下的代码指令,并将解析的各代码指令拆分为相应架构下的机器指令;

具体地,在确定可执行文件的代码块在内存中的分布位置,即定位到该可执行文件的代码块时,可确定该安卓系统下的运行架构的所属类型,该运行架构的所属类型可为如Dalvik、ARM、Thumb、ARM64、X86、MIPS等架构,并基于该代码块在内存中的分布位置,根据该所属类型解析该代码块中的代码指令,并对解析的代码指令进行拆分,以生成该运行架构下的机器指令。可以理解,由于各运行架构下均有对应的指令集,通过该指令集可以将代码块中的代码指令翻译成机器指令。

S103:根据运行架构的所属类型确定对应的处理规则,并根据处理规则解析并模拟执行在运行架构下的可执行文件的机器指令,并对模拟执行行为进行监测,同时记录敏感行为信息,并监测系统下的调用行为,该过程支持对不同架构下的机器指令进行解析和模拟执行;

具体地,根据上述运行架构的所属类型确定对应的处理规则,并基于代码块在内存中的分布位置,根据该处理规则解析并模拟执行在该运行架构下的可执行文件的机器指令,并对该模拟执行行为进行监测,同时记录在该模拟执行过程中的敏感行为信息,并监测系统下的调用行为。

作为一种示例,模拟执行各可执行文件的机器指令包括模拟实现每条机器指令、模拟不同架构的寄存器、模拟内存分配,所述寄存器包括通用寄存器、状态寄存器。更具体地,可根据该处理规则读取该机器指令、并对该机器指令进行译码和模拟执行,其中,该模拟执行的过程可如下:自动从生成的机器指令中取出第一条指令操作码部分,根据该操作码类型和寻址方式以确定下条指令长度,然后在相应的模拟函数中进行模拟执行行为,其中,该模拟执行行为可包括:模拟对寄存器的操作、模拟对内存的操作、模拟对栈的操作,具体为:根据所要模拟执行的机器指令在执行过程中所占的内存,模拟分配一定的内存空间,实现模拟对内存的操作,并将模拟分配的内存空间中的一部分模拟为栈空间,利用模拟对寄存器的操作来模拟使用所述栈空间,从而实现对各可执行文件的机器指令进行模拟执行,并根据执行后的结果确定下条指令的位置,如此循环直到完成该机器码块的模拟执行。

在模拟执行各可执行文件的机器指令的过程中,可对该模拟执行行为进行监测,若该模拟执行行为中有敏感行为信息,则记录该敏感行为信息。其中,该敏感行为信息可包括但不限于窃取隐私、发送短信、篡改文件、敏感权限申请等。可以理解,在记录该敏感行为信息的同时,还可对执行该敏感行为信息的指令进行标记,并将该标记的指令作为待匹配指令,以便后续步骤S104中将该匹配指令与检测规则库中的特征进行匹配。

S104:将监测的模拟执行状态以及调用行为与检测规则库中的特征进行匹配,判断相应的可执行文件中是否包含恶意代码,所述检测规则库中的特征包括:恶意代码字符串、恶意代码序列、恶意代码释放的代码模块名称、恶意API签名、恶意文件路径、恶意API调用序列。

具体地,将监测到的模拟执行状态(如模拟执行行为中的敏感行为信息等)以及调用行为,与检测规则中的特征进行匹配,若匹配成功,则判定被模拟的可执行文件中包含了恶意代码,否则判定被模拟的可执行文件中未包含恶意代码。进一步地,监测系统下的调用行为包括:对模拟执行机器指令过程中的系统调用以及API调用进行模拟,并监测模拟的调用行为,对敏感调用行为进行记录,该过程可以由以下两种方法实现:

方法一:根据具体的可执行文件的机器指令,针对模拟执行机器指令过程中可能的系统调用以及API调用,编写简易代码,模拟实现所述系统调用以及API调用,并利用Hook技术拦截调用过程中的函数入口和出口,实现对调用行为的监测,并对敏感调用行为进行记录;

方法二:根据具体的可执行文件的机器指令,针对模拟执行机器指令过程中可能的系统调用以及API调用,记录调用值以及调用参数,并根据人工操作,返回虚拟调用执行结果,监测执行过程,并对敏感调用行为进行记录;

所述敏感调用行为包括文件系统写入、网络连接、通信、文件创建、文件删除、修改参数、修改返回值等。

进一步地,该恶意代码检测方法还可包括:对可执行文件的代码块进行加密、解密入口识别,模拟执行加密、解密代码,获取加密代码块的明文信息,对所述明文信息中的敏感信息进行记录,并将记录的敏感信息与检测规则库中的特征进行匹配,判断相应的可执行文件中是否包含恶意代码,所述敏感信息包括敏感字符串、敏感代码、敏感执行信息等。

具体地,还可对可执行文件的代码块进行加密、解密入口识别以确定该代码块中的加密代码和解密代码,并模拟执行加密代码、解密代码以获取该加密代码中的明文信息,其中,该明文信息可为加密后的数据和解密后的数据,之后,可记录下该明文信息中的敏感信息,并将记录的敏感信息与检测规则库中的特征进行匹配,以判断该可执行文件中是否包含恶意代码。

与上述几种实施例提供的安卓系统下的恶意代码检测的方法相对应,本发明的一种实施例还提供一种安卓系统下的恶意代码检测的系统,由于本发明实施例提供的安卓系统下的恶意代码检测的系统与上述几种实施例提供的安卓系统下的恶意代码检测的方法相对应,因此在前述安卓系统下的恶意代码检测的方法的实施方式也适用于本实施例提供的安卓系统下的恶意代码检测的系统,在本实施例中不再详细描述。如图2所示,包括:

可执行文件解析模块201,用于对安卓系统下的可执行文件进行格式识别和解析,并确定各可执行文件的代码块在内存中的分布位置,该过程支持多种可执行文件的格式识别和解析,包括APK、DEX、ELF、OAT等格式的可执行文件;可以理解,可执行文件解析模块201可对安卓系统下的可执行文件进行格式识别和解析,以确定该系统中各个可执行文件的代码块在内存中的分布位置,即对各个可执行文件的代码块进行定位,通过该定位结果便于后续对该代码块进行接卸分析和模拟执行操作。

第一确定模块205,用于确定安卓系统下的运行架构的所属类型;具体地,在可执行文件解析模块201确定可执行文件的代码块在内存中的分布位置,即定位到该可执行文件的代码块在时,第一确定模块205可确定该安卓系统下的运行架构的所属类型,该运行架构的所属类型可为如Dalvik、ARM、Thumb、ARM64、X86、MIPS等架构。

指令架构解析模块202,用于基于分布位置,根据上述所属类型解析代码块中的代码指令,并将解析的代码指令拆分为由操作码、操作数两部分组成的机器指令,该过程支持多种架构下的代码指令的识别和解析,包括Dalvik、ARM、Thumb、ARM64、X86、MIPS等架构下的代码指令,并将解析的各代码指令拆分为相应架构下的机器指令;具体地,指令架构解析模块202基于该代码块的在内存中的分布位置,根据该所属类型解析该代码块中的代码指令,并对解析的代码指令进行拆分,以生成该运行架构下的机器指令。

第二确定模块206,用于根据该运行架构的所属类型确定对应的处理规则;

虚拟执行模块203,用于根据该处理规则解析并模拟执行在运行架构下的各可执行文件的机器指令,并对模拟执行行为进行监测,同时记录敏感行为信息,并监测系统下的调用行为,该过程支持对不同架构下的机器指令进行解析和模拟执行;具体地,虚拟执行模块203基于代码块在内存中的分布位置,根据该处理规则解析并模拟执行在该运行架构下的可执行文件的机器指令,并对该模拟执行行为进行监测,同时记录在该模拟执行过程中的敏感行为信息,并监测系统下的调用行为。

规则库匹配模块204,用于将监测的模拟执行状态以及调用行为与检测规则库中的特征进行匹配,判断相应的可执行文件中是否包含恶意代码,所述检测规则库中的特征包括:恶意代码字符串、恶意代码序列、恶意代码释放的代码模块名称、恶意API签名、恶意文件路径、恶意API调用序列。

进一步地,所述模拟执行各可执行文件的机器指令,包括模拟实现每条机器指令、模拟不同架构的寄存器、模拟内存分配,所述寄存器包括通用寄存器、状态寄存器。

进一步地,所述模拟执行行为包括:模拟对寄存器的操作、模拟对内存的操作、模拟对栈的操作,具体为:根据所要模拟执行的机器指令在执行过程中所占的内存,模拟分配一定的内存空间,实现模拟对内存的操作,并将模拟分配的内存空间中的一部分模拟为栈空间,利用模拟对寄存器的操作来模拟使用所述栈空间,从而实现对各可执行文件的机器指令进行模拟执行。

进一步地,所述监测系统下的调用行为,包括:对模拟执行机器指令过程中的系统调用以及API调用进行模拟,并监测模拟的调用行为,对敏感调用行为进行记录,所述敏感调用行为包括文件系统写入、网络连接、通信、文件创建、文件删除、修改参数、修改返回值等。

进一步地,所述恶意代码检测系统还包括加密代码监测模块,用于对可执行文件的代码块进行加密、解密入口识别,模拟执行加密、解密代码,获取加密代码块的明文信息,对所述明文信息中的敏感信息进行记录,并将记录的敏感信息与检测规则库中的特征进行匹配,判断相应的可执行文件中是否包含恶意代码,所述敏感信息包括敏感字符串、敏感代码、敏感执行信息等。

具体地,还可对可执行文件的代码块进行加密、解密入口识别以确定该代码块中的加密代码和解密代码,并模拟执行加密代码、解密代码以获取该加密代码中的明文信息,其中,该明文信息可为加密后的数据和解密后的数据,之后,可记录下该明文信息中的敏感信息,并将记录的敏感信息与检测规则库中的特征进行匹配,以判断该可执行文件中是否包含恶意代码。

为了实现上述实施例,本发明还提出了一种移动终端,包括:一个或者多个处理器;存储器;一个或多个程序,一个或者多个程序存储在存储器中,当被一个或者多个处理器执行时进行如下操作:

S101’,对安卓系统下的可执行文件进行格式识别和解析,并确定可执行文件的代码块在内存中的分布位置。

S102’,确定安卓系统下的运行架构的所属类型,并根据所属类型解析代码块中的代码指令,并对解析的代码指令进行拆分以生成运行架构下的机器指令,其中,机器指令由操作码和操作数两部分组成。

S103’,根据运行架构的所属类型确定对应的处理规则,并根据处理规则解析并模拟执行在运行架构下的可执行文件的机器指令,并对模拟执行行为进行监测,同时记录敏感行为信息,并监测系统下的调用行为。

S104’,将监测的模拟执行状态以及调用行为与检测规则库中的特征进行匹配,判断可执行文件中是否包含恶意代码。

为了实现上述实施例,本发明还提出了一种存储介质,用于存储应用程序,该应用程序用于执行本发明上述实施例所述的安卓系统下的恶意代码检测方法。

本说明书中方法的实施例采用递进的方式描述,对于系统的实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。针对现有安卓系统下恶意代码静态检测技术存在的不足,本发明提出了安卓系统下的恶意代码检测方法及系统,并且适用于现有安卓系统的多运行环境、多格式可执行文件以及多指令架构;本发明将可执行文件解析为含有操作码和操作数的机器指令,并对机器指令进行模拟执行,而不是直接将解析的指令代码进行模拟执行,有效的减少了执行指令过程中所占用的内存;本发明采用虚拟执行技术,在不安装或者运行可执行文件的前提下,对恶意代码进行静态检测,并且由于本发明实现的方法及系统具有占用内存小,运行时消耗资源少的优势,本发明可以直接实现在移动终端上;本发明在模拟实现机器指令的同时,模拟了指令运行过程中所需环境,包括模拟寄存器、模拟内存分配、模拟栈操作,使得模拟执行结果更真实更精确,并且本发明还对指令执行过程中可能调用的系统指令以及API进行模拟操作,使得检测范围更全面,有效提高检测精度;本发明只对指令执行过程中可能出现的系统调用以及API调用进行监测,而不是对全部系统指令以及API进行监测,使得在保障检测结果的同时,有效提高了检测速度,减少了在模拟执行和监测过程中的资源消耗;进一步地,本发明还实现了对加密代码块的监测,首先识别代码块的加密、解密入口,其次通过模拟执行加密、解密代码来获取加密代码块的明文信息,并对明文信息中的敏感信息进行记录,实现了安卓系统下对恶意代码的深度检测,有效避免了通过加密手段进行隐藏的恶意代码所造成的威胁。

虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。

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