一种基于Opcode回溯的Android恶意代码检测系统及方法

文档序号:6525540阅读:831来源:国知局
一种基于Opcode回溯的Android恶意代码检测系统及方法
【专利摘要】本发明公开了一种基于Opcode回溯的Android恶意代码检测系统及方法,首先,建立规则库,所述规则库根据欲检测对象自定义检测策略;将初始调用API作为待匹配名称放入队列;从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,重复以上操作直至队列为空,基于建立的规则库,分析并判断所述调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本,否则安全。本发明可以很好解决现有的恶意代码检测方法的误报和漏报的问题。
【专利说明】—种基于Opcode回溯的Andro i d恶意代码检测系统及方法
【技术领域】
[0001]本发明涉及移动终端恶意代码检测【技术领域】,尤其涉及一种基于Opcode回溯的Android恶意代码检测系统及方法。
【背景技术】
[0002]随着移动互联网的发展,以及智能移动终端的日益普及,用户的信息安全越来越受到恶意代码的威胁。各种新式恶意代码层出不穷,对现有检测技术带来新的难题。
[0003]目前各个安全厂商在移动终端恶意代码检测领域提出很多检测办法,主要有以下几类。
[0004]第一类方法是通过对android APK文件的安装文件进行计算,获取特征值,如APK文件的MD5,通过该特征值对恶意代码进行检测。但是该检测方法存在局限,APK文件出现细微变化,特征值就会发生变化,影响检测效果,抗变化能力较差。
[0005]第二类方法是对android Apk安装包内部文件进行检测。将APK安装包解压后,获取内部文件,通过这些解压出来的内部文件提取特征值,来进行移动终端恶意代码的检测。此类方法存在抗混淆能力差的缺点。
[0006]第三类方法是通过可执行文件dex的Opcode计算特征码来进行检测。此类方法是对可执行文件dex的opcode和data部分进行运算,如计算Hash值,或者data部分的离散的代码片段,来获取特征码。此类方法存在一定的误报和漏报的问题,难以达到较好的检测效果。

【发明内容】

[0007]针对上述技术问题,本发明提供了一种基于Opcode回溯的Android恶意代码检测系统及方法,该发明通过对dex文件进行格式解析,获取Opcode代码并建立以初始调用API为基础的调用关系树,并将所述调用关系树与预设的规则库进行匹配,从而判定是否是恶意代码,所述方法较之现有技术检出率更高,检出效果更好。
[0008]本发明采用如下系统来实现:一种基于Opcode回溯的Android恶意代码检测系统,包括:
规则库,用于根据欲检测对象自定义检测策略,包括:初始调用AP1、检测规则和病毒名;并将所述初始调用API作为待匹配名称放入队列;
dex解析与Opcode反汇编模块,用于解析dex文件,获取函数的Opcode指令,反汇编Opcode指令,如果OP段数据显示为函数调用指令,则通过Index段数据获取所调用函数名;
回溯分析模块,用于判断队列是否为空,若是,则获取调用关系树结束,将所述调用关系树发送至检测模块,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;
将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续重复上述操作直至队列为空;
检测模块,基于建立的规则库,分析并判断从回溯分析模块处获取的调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
[0009]进一步地,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
[0010]进一步地,当所述回溯分析模块判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
[0011]本发明采用如下方法来实现:一种基于Opcode回溯的Android恶意代码检测方法,包括:
步骤1、建立规则库,所述规则库根据欲检测对象自定义检测策略,包括:初始调用AP1、检测规则和病毒名;
步骤2、将初始调用API作为待匹配名称放入队列;
步骤3、判断队列是否为空,若是,则获取调用关系树结束,继续执行步骤5,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;
步骤4、将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续执行步骤3 ;
步骤5、基于建立的规则库,分析并判断所述调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
[0012]进一步地,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
[0013]进一步地,当判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
[0014]综上所述,本发明提供了一种基于Opcode回溯的Android恶意代码检测系统及方法,本发明通过设置规则库与三个模块:dex解析与Opcode反汇编模块、回溯分析模块和检测模块来完成恶意代码的检测,通过dex解析与Opcode反汇编模块对可执行文件dex的函数调用关系进行解析,然后通过回溯分析模块,建立以初始调用API为基础建立调用关系树,基于设置的规则库和获取的调用关系树来进行恶意代码检测。因此本方法与【背景技术】中的第三类方法相比,检测更加灵活,它摆脱了单纯通过Opcode静态数据进行检测的限制,通过分析Opcode获得回溯关系分析结果,进一步获取检测分析结果的方法,来取得更好的检出效果。并进而有效的解决现有Android恶意代码检测技术无法有效检测Android加固应用的现状。
【专利附图】

【附图说明】
[0015]为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0016]图1为本发明提供的一种基于Opcode回溯的Android恶意代码检测系统结构图; 图2为本发明中利用dex文件获取Opcode示意图;
图3为Opcode指令基本格式示意图;
图4为本发明提供的具体实施例中获取的调用关系树;图5为本发明提供的一种基于Opcode回溯的Android恶意代码检测方法流程图。【具体实施方式】
[0017]本发明给出了一种基于Opcode回溯的Android恶意代码检测系统及方法,为了使本【技术领域】的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明:
本发明首先提供了一种基于Opcode回溯的Android恶意代码检测系统,如图1所示,包括:
规则库101,用于根据欲检测对象自定义检测策略,包括:初始调用AP1、检测规则和病毒名;并将所述初始调用API作为待匹配名称放入队列;其中,所述规则库可以使用XML或者json等格式;
例如,以XML为例,下述为一个规则库的信息:
〈RuleLib〉
〈Rule〉
<API>SendMessage〈/API>
<Component>Activity</Component)
<Beh>NoAsyn</Beh>
<VirName>Trojan</VirName>
〈/Rule〉
〈/RuleLib〉
其中,Rule表示一条检测规则;〈API>内容为调用关系树的初始调用API,这里为SendMessage,即发送短信API !〈Component〉内容为最顶层调用者的类型;〈Beh>内容为行为特征,NoAsyn表示中间没有异步操作;〈VirName>内容为病毒名称;该规则库的检测策略为:当存在自动发送短信的操作,则认为检出Trojan ;
dex解析与Opcode反汇编模块102,用于解析dex文件,获取函数的Opcode指令,反汇编Opcode指令,如果OP段数据显示为函数调用指令,则通过Index段数据获取所调用函数名;
其中,利用dex文件解析获取Opcode指令的过程,见图2所示;dex文件对应dex文件结构体,本模块首先解析dex文件结构体,获得所有类结构体,解析类结构体,获得对应类数据结构体的偏移,通过偏移找到类数据结构体,通过类数据结构体中的指针找到类函数结构体,在类函数结构体中保存有本函数的Opcode指令,这样就找到了函数的Opcode指令;
其中,Opcode指令基本格式如图3所示:
A为配置部分,OP段数据为当前指令的类型,如加减乘除等,Index段数据为调用函数的索引或者当前指令所引用的静态数据的索引,Arg为寄存器相关指令。在反汇编Opcode时,会首先判断Op的类型,如果Op类型为函数调用指令,则直接通过Index段数据,查找到所述调用函数的函数名;
回溯分析模块103,用于判断队列是否为空,若是,则获取调用关系树结束,将所述调用关系树发送至检测模块104,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块102获取所有Opcode指令所调用函数名;
将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续重复上述操作直至队列为空;
如上述例子,由回溯分析模块最终获取的基于<API>SendMessage的调用关系树如图4所示;
检测模块104,基于建立的规则库,分析并判断从回溯分析模块处获取的调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
[0018]如上述例子,由获取的调用关系树可以知道存在最顶层调用者AAA的类型为Activity,中间没有异步操作,即在Activity打开后,sendmessage函数会被自动调用,符合规则库中的检测规则,因此认为检出恶意样本,恶意样本为Trojan。
[0019]优选地,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
[0020]优选地,当所述回溯分析模块判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
[0021]其中,可以通过类结构体中的superclassidx索弓丨,找到最顶层调用者的父类名称,判断是否为四大组件名称,确定最顶层调用者的类型;其中,所述四大组件为:Activity, Service, BroadcastReceive, Content Provider ;比如,程序所有的页面都是系统Activity的子类,都是继承Activity,这样,如果程序发现调用者所属的类的父类是Activity,那么我们一般认为已经查找到最顶层了。
[0022]本发明还提供了一种基于Opcode回溯的Android恶意代码检测方法,如图5所示,包括:
S501建立规则库,所述规则库根据欲检测对象自定义检测策略,包括:初始调用AP1、检测规则和病毒名;
S502将初始调用API作为待匹配名称放入队列;
S503判断队列是否为空,若是,则获取调用关系树结束,继续执行S506,否则执行S504 ;
S504从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;
S505将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续执行S503 ;
S506基于建立的规则库,分析并判断所述调用关系树是否符合规则库中定义的检测规贝U,若是,则为恶意样本并输出病毒名,否则安全。
[0023]优选地,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
[0024]优选地,当判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
[0025]如上所述,本发明给出了一种基于Opcode回溯的Android恶意代码检测方法及系统的具体实施例,其与传统方法的区别在于,传统的基于android系统的恶意代码检测包括基于安装包的检测,基于安装包内部文件的检测,或者是基于dex文件Opcode特征码的检测,都存在抗变能力差,抗混淆能力差等缺点。本发明给出的技术方案利用dex文件格式解析,可以获取Opcode指令所调用函数的信息,从而建立起基于初始调用API的一个调用关系树,从所述调用关系树可以获取最顶层调用者的行为特征信息或者类型,从而与规则库中的检测规则进行匹配,从而确定是否是恶意样本。本发明所提供的技术方案具备更好的检出效果,抗变能力强,并且避免了误报和漏报的问题。
[0026]以上实施例用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,均应涵盖在本发明的权利要求范围当中。
【权利要求】
1.一种基于Opcode回溯的Android恶意代码检测系统,其特征在于,包括: 规则库,用于根据欲检测对象自定义检测策略,包括:初始调用AP1、检测规则和病毒名;并将所述初始调用API作为待匹配名称放入队列; dex解析与Opcode反汇编模块,用于解析dex文件,获取函数的Opcode指令,反汇编Opcode指令,如果OP段数据显示为函数调用指令,则通过Index段数据获取所调用函数名; 回溯分析模块,用于判断队列是否为空,若是,则获取调用关系树结束,将所述调用关系树发送至检测模块,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名; 将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续重复上述操作直至队列为空; 检测模块,基于建立的规则库,分析并判断从回溯分析模块处获取的调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
2.如权利要求1所述的系统,其特征在于,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
3.如权利要求1所述的系统,其特征在于,当所述回溯分析模块判定队列为空,则通过dex文件类结构体的 superclassidx索引,获取所述调用关系树最顶层调用者的类型。
4.一种基于Opcode回溯的Android恶意代码检测方法,其特征在于,适用于权利要求1所述系统,包括: 步骤1、建立规则库,所述规则库根据欲检测对象自定义检测策略,包括:初始调用AP1、检测规则和病毒名; 步骤2、将初始调用API作为待匹配名称放入队列; 步骤3、判断队列是否为空,若是,则获取调用关系树结束,继续执行步骤5,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名; 步骤4、将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续执行步骤3 ; 步骤5、基于建立的规则库,分析并判断所述调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
5.如权利要求4所述的方法,其特征在于,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
6.如权利要求4所述的方法,其特征在于,当判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
【文档编号】G06F21/56GK103902909SQ201310725629
【公开日】2014年7月2日 申请日期:2013年12月25日 优先权日:2013年12月25日
【发明者】袁海涛, 潘宣辰, 肖新光 申请人:武汉安天信息技术有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1