CN103902909A - 一种基于Opcode回溯的Android恶意代码检测系统及方法 - Google Patents
一种基于Opcode回溯的Android恶意代码检测系统及方法 Download PDFInfo
- Publication number
- CN103902909A CN103902909A CN201310725629.8A CN201310725629A CN103902909A CN 103902909 A CN103902909 A CN 103902909A CN 201310725629 A CN201310725629 A CN 201310725629A CN 103902909 A CN103902909 A CN 103902909A
- Authority
- CN
- China
- Prior art keywords
- opcode
- queue
- matched
- call
- detection
- 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
- 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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Telephonic Communication Services (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于Opcode回溯的Android恶意代码检测系统及方法,首先,建立规则库,所述规则库根据欲检测对象自定义检测策略;将初始调用API作为待匹配名称放入队列;从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,重复以上操作直至队列为空,基于建立的规则库,分析并判断所述调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本,否则安全。本发明可以很好解决现有的恶意代码检测方法的误报和漏报的问题。
Description
技术领域
本发明涉及移动终端恶意代码检测技术领域,尤其涉及一种基于Opcode回溯的Android恶意代码检测系统及方法。
背景技术
随着移动互联网的发展,以及智能移动终端的日益普及,用户的信息安全越来越受到恶意代码的威胁。各种新式恶意代码层出不穷,对现有检测技术带来新的难题。
目前各个安全厂商在移动终端恶意代码检测领域提出很多检测办法,主要有以下几类。
第一类方法是通过对android APK文件的安装文件进行计算,获取特征值,如APK文件的MD5,通过该特征值对恶意代码进行检测。但是该检测方法存在局限,APK文件出现细微变化,特征值就会发生变化,影响检测效果,抗变化能力较差。
第二类方法是对android Apk安装包内部文件进行检测。将APK安装包解压后,获取内部文件,通过这些解压出来的内部文件提取特征值,来进行移动终端恶意代码的检测。此类方法存在抗混淆能力差的缺点。
第三类方法是通过可执行文件dex的Opcode计算特征码来进行检测。此类方法是对可执行文件dex的opcode和data部分进行运算,如计算Hash值,或者data部分的离散的代码片段,来获取特征码。此类方法存在一定的误报和漏报的问题,难以达到较好的检测效果。
发明内容
针对上述技术问题,本发明提供了一种基于Opcode回溯的Android恶意代码检测系统及方法,该发明通过对dex文件进行格式解析,获取Opcode代码并建立以初始调用API为基础的调用关系树,并将所述调用关系树与预设的规则库进行匹配,从而判定是否是恶意代码,所述方法较之现有技术检出率更高,检出效果更好。
本发明采用如下系统来实现:一种基于Opcode回溯的Android恶意代码检测系统,包括:
规则库,用于根据欲检测对象自定义检测策略,包括:初始调用API、检测规则和病毒名;并将所述初始调用API作为待匹配名称放入队列;
dex解析与Opcode反汇编模块,用于解析dex文件,获取函数的Opcode指令,反汇编Opcode指令,如果OP段数据显示为函数调用指令,则通过Index段数据获取所调用函数名;
回溯分析模块,用于判断队列是否为空,若是,则获取调用关系树结束,将所述调用关系树发送至检测模块,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;
将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续重复上述操作直至队列为空;
检测模块,基于建立的规则库,分析并判断从回溯分析模块处获取的调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
进一步地,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
进一步地,当所述回溯分析模块判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
本发明采用如下方法来实现:一种基于Opcode回溯的Android恶意代码检测方法,包括:
步骤1、建立规则库,所述规则库根据欲检测对象自定义检测策略,包括:初始调用API、检测规则和病毒名;
步骤2、将初始调用API作为待匹配名称放入队列;
步骤3、判断队列是否为空,若是,则获取调用关系树结束,继续执行步骤5,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;
步骤4、将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续执行步骤3;
步骤5、基于建立的规则库,分析并判断所述调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
进一步地,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
进一步地,当判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
综上所述,本发明提供了一种基于Opcode回溯的Android恶意代码检测系统及方法,本发明通过设置规则库与三个模块:dex解析与Opcode反汇编模块、回溯分析模块和检测模块来完成恶意代码的检测,通过dex解析与Opcode反汇编模块对可执行文件dex的函数调用关系进行解析,然后通过回溯分析模块,建立以初始调用API为基础建立调用关系树,基于设置的规则库和获取的调用关系树来进行恶意代码检测。因此本方法与背景技术中的第三类方法相比,检测更加灵活,它摆脱了单纯通过Opcode静态数据进行检测的限制,通过分析Opcode获得回溯关系分析结果,进一步获取检测分析结果的方法,来取得更好的检出效果。并进而有效的解决现有Android恶意代码检测技术无法有效检测Android加固应用的现状。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一种基于Opcode回溯的Android恶意代码检测系统结构图;
图2为本发明中利用dex文件获取Opcode示意图;
图3为Opcode指令基本格式示意图;
图4为本发明提供的具体实施例中获取的调用关系树;
图5为本发明提供的一种基于Opcode回溯的Android恶意代码检测方法流程图。
具体实施方式
本发明给出了一种基于Opcode回溯的Android恶意代码检测系统及方法,为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明:
本发明首先提供了一种基于Opcode回溯的Android恶意代码检测系统,如图1所示,包括:
规则库101,用于根据欲检测对象自定义检测策略,包括:初始调用API、检测规则和病毒名;并将所述初始调用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,基于建立的规则库,分析并判断从回溯分析模块处获取的调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
如上述例子,由获取的调用关系树可以知道存在最顶层调用者AAA的类型为Activity,中间没有异步操作,即在Activity打开后,sendmessage函数会被自动调用,符合规则库中的检测规则,因此认为检出恶意样本,恶意样本为Trojan。
优选地,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
优选地,当所述回溯分析模块判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
其中,可以通过类结构体中的superclassidx索引,找到最顶层调用者的父类名称,判断是否为四大组件名称,确定最顶层调用者的类型;其中,所述四大组件为:Activity,Service,BroadcastReceive,Content Provider;比如,程序所有的页面都是系统Activity的子类,都是继承Activity,这样,如果程序发现调用者所属的类的父类是Activity,那么我们一般认为已经查找到最顶层了。
本发明还提供了一种基于Opcode回溯的Android恶意代码检测方法,如图5所示,包括:
S501建立规则库,所述规则库根据欲检测对象自定义检测策略,包括:初始调用API、检测规则和病毒名;
S502将初始调用API作为待匹配名称放入队列;
S503判断队列是否为空,若是,则获取调用关系树结束,继续执行S506,否则执行S504;
S504从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;
S505将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续执行S503;
S506基于建立的规则库,分析并判断所述调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
优选地,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
优选地,当判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
如上所述,本发明给出了一种基于Opcode回溯的Android恶意代码检测方法及系统的具体实施例,其与传统方法的区别在于,传统的基于android系统的恶意代码检测包括基于安装包的检测,基于安装包内部文件的检测,或者是基于dex文件Opcode特征码的检测,都存在抗变能力差,抗混淆能力差等缺点。本发明给出的技术方案利用dex文件格式解析,可以获取Opcode指令所调用函数的信息,从而建立起基于初始调用API的一个调用关系树,从所述调用关系树可以获取最顶层调用者的行为特征信息或者类型,从而与规则库中的检测规则进行匹配,从而确定是否是恶意样本。本发明所提供的技术方案具备更好的检出效果,抗变能力强,并且避免了误报和漏报的问题。
以上实施例用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,均应涵盖在本发明的权利要求范围当中。
Claims (6)
1.一种基于Opcode回溯的Android恶意代码检测系统,其特征在于,包括:
规则库,用于根据欲检测对象自定义检测策略,包括:初始调用API、检测规则和病毒名;并将所述初始调用API作为待匹配名称放入队列;
dex解析与Opcode反汇编模块,用于解析dex文件,获取函数的Opcode指令,反汇编Opcode指令,如果OP段数据显示为函数调用指令,则通过Index段数据获取所调用函数名;
回溯分析模块,用于判断队列是否为空,若是,则获取调用关系树结束,将所述调用关系树发送至检测模块,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;
将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续重复上述操作直至队列为空;
检测模块,基于建立的规则库,分析并判断从回溯分析模块处获取的调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
2.如权利要求1所述的系统,其特征在于,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
3.如权利要求1所述的系统,其特征在于,当所述回溯分析模块判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
4.一种基于Opcode回溯的Android恶意代码检测方法,其特征在于,适用于权利要求1所述系统,包括:
步骤1、建立规则库,所述规则库根据欲检测对象自定义检测策略,包括:初始调用API、检测规则和病毒名;
步骤2、将初始调用API作为待匹配名称放入队列;
步骤3、判断队列是否为空,若是,则获取调用关系树结束,继续执行步骤5,否则从队列中读取待匹配名称,利用dex解析与Opcode反汇编模块获取所有Opcode指令所调用函数名;
步骤4、将所调用函数名与待匹配名称对比,对于匹配成功的Opcode指令所属函数的函数名作为待匹配名称放入队列,并继续执行步骤3;
步骤5、基于建立的规则库,分析并判断所述调用关系树是否符合规则库中定义的检测规则,若是,则为恶意样本并输出病毒名,否则安全。
5.如权利要求4所述的方法,其特征在于,所述检测规则包括:最顶层调用者的类型和最顶层调用者行为特征。
6.如权利要求4所述的方法,其特征在于,当判定队列为空,则通过dex文件类结构体的superclassidx索引,获取所述调用关系树最顶层调用者的类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310725629.8A CN103902909B (zh) | 2013-12-25 | 2013-12-25 | 一种基于Opcode回溯的Android恶意代码检测系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310725629.8A CN103902909B (zh) | 2013-12-25 | 2013-12-25 | 一种基于Opcode回溯的Android恶意代码检测系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902909A true CN103902909A (zh) | 2014-07-02 |
CN103902909B CN103902909B (zh) | 2017-02-08 |
Family
ID=50994222
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310725629.8A Active CN103902909B (zh) | 2013-12-25 | 2013-12-25 | 一种基于Opcode回溯的Android恶意代码检测系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103902909B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016082240A1 (zh) * | 2014-11-25 | 2016-06-02 | 武汉安天信息技术有限责任公司 | Elf文件中的恶意代码检测方法及装置 |
CN106295343A (zh) * | 2016-08-24 | 2017-01-04 | 北京奇虎测腾科技有限公司 | 一种基于序列化中间表示的源代码分布式检测系统及方法 |
CN106709352A (zh) * | 2015-11-12 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 样本处理方法、装置及系统 |
CN108062474A (zh) * | 2016-11-08 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 文件的检测方法及装置 |
CN109558731A (zh) * | 2017-09-26 | 2019-04-02 | 腾讯科技(深圳)有限公司 | 特征码处理方法、装置及存储介质 |
CN109829302A (zh) * | 2018-12-28 | 2019-05-31 | 中国科学院信息工程研究所 | Android恶意应用家族分类方法、装置与电子设备 |
CN110716855A (zh) * | 2019-08-23 | 2020-01-21 | 中国科学院信息工程研究所 | 处理器指令集测试方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102855119B (zh) * | 2012-07-26 | 2014-10-22 | 北京奇虎科技有限公司 | 一种可执行文件处理方法和装置 |
CN103268445B (zh) * | 2012-12-27 | 2016-01-13 | 武汉安天信息技术有限责任公司 | 一种基于OpCode的android恶意代码检测方法及系统 |
CN103440459B (zh) * | 2013-09-25 | 2016-04-06 | 西安交通大学 | 一种基于函数调用的Android恶意代码检测方法 |
-
2013
- 2013-12-25 CN CN201310725629.8A patent/CN103902909B/zh active Active
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016082240A1 (zh) * | 2014-11-25 | 2016-06-02 | 武汉安天信息技术有限责任公司 | Elf文件中的恶意代码检测方法及装置 |
CN106709352A (zh) * | 2015-11-12 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 样本处理方法、装置及系统 |
CN106709352B (zh) * | 2015-11-12 | 2019-09-24 | 阿里巴巴集团控股有限公司 | 样本处理方法、装置及系统 |
CN106295343A (zh) * | 2016-08-24 | 2017-01-04 | 北京奇虎测腾科技有限公司 | 一种基于序列化中间表示的源代码分布式检测系统及方法 |
CN106295343B (zh) * | 2016-08-24 | 2019-03-12 | 北京奇虎测腾安全技术有限公司 | 一种基于序列化中间表示的源代码分布式检测系统及方法 |
CN108062474A (zh) * | 2016-11-08 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 文件的检测方法及装置 |
CN109558731A (zh) * | 2017-09-26 | 2019-04-02 | 腾讯科技(深圳)有限公司 | 特征码处理方法、装置及存储介质 |
CN109558731B (zh) * | 2017-09-26 | 2022-04-08 | 腾讯科技(深圳)有限公司 | 特征码处理方法、装置及存储介质 |
CN109829302A (zh) * | 2018-12-28 | 2019-05-31 | 中国科学院信息工程研究所 | Android恶意应用家族分类方法、装置与电子设备 |
CN109829302B (zh) * | 2018-12-28 | 2021-01-22 | 中国科学院信息工程研究所 | Android恶意应用家族分类方法、装置与电子设备 |
CN110716855A (zh) * | 2019-08-23 | 2020-01-21 | 中国科学院信息工程研究所 | 处理器指令集测试方法及装置 |
CN110716855B (zh) * | 2019-08-23 | 2021-05-14 | 中国科学院信息工程研究所 | 处理器指令集测试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103902909B (zh) | 2017-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103902909A (zh) | 一种基于Opcode回溯的Android恶意代码检测系统及方法 | |
KR101162051B1 (ko) | 문자열 비교 기법을 이용한 악성코드 탐지 및 분류 시스템 및 그 방법 | |
Lin et al. | Identifying android malicious repackaged applications by thread-grained system call sequences | |
US20160142437A1 (en) | Method and system for preventing injection-type attacks in a web based operating system | |
CN103839003A (zh) | 恶意文件检测方法及装置 | |
WO2015056885A1 (ko) | 안드로이드 악성 애플리케이션의 탐지장치 및 탐지방법 | |
Li et al. | Opcode sequence analysis of Android malware by a convolutional neural network | |
Tang et al. | A novel hybrid method to analyze security vulnerabilities in android applications | |
Shen et al. | Detect android malware variants using component based topology graph | |
Dhaya et al. | Detecting software vulnerabilities in android using static analysis | |
CN103714292A (zh) | 一种漏洞利用代码的检测方法 | |
US20170017792A1 (en) | Method and device for constructing apk virus signature database and apk virus detection system | |
CN104866764B (zh) | 一种基于对象引用图的Android手机恶意软件检测方法 | |
CN114500043A (zh) | 基于同源性分析的物联网固件漏洞检测方法及系统 | |
CN103455753B (zh) | 一种样本文件分析方法及装置 | |
CN106709350B (zh) | 一种病毒检测方法及装置 | |
Tang et al. | SQL injection behavior mining based deep learning | |
CN103902906A (zh) | 基于应用图标的移动终端恶意代码检测方法及系统 | |
CN106650447A (zh) | 一种防御PowerShell恶意代码执行的方法及系统 | |
CN109784057A (zh) | 安卓应用加固识别方法、控制器及介质 | |
CN110647747B (zh) | 一种基于多维相似度的虚假移动应用检测方法 | |
Dam et al. | Learning android malware | |
CN108062472A (zh) | 一种安卓平台下勒索应用的检测方法及系统 | |
CN111460448A (zh) | 一种恶意软件家族检测方法及装置 | |
CN103268443A (zh) | 一种基于符号的Android恶意代码检测方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 430000 Hubei Province, East Lake New Technology Development Zone, software park, No. 1 East Road, software industry, B4, building 4-1, room 12, floor, room 01 Applicant after: Wuhan Antian Information Technology Co., Ltd. Address before: 430000 Hubei Development Zone, East Lake, Optics Valley Venture Street, building 6, building 2, building Applicant before: Wuhan Antian Information Technology Co., Ltd. |
|
COR | Change of bibliographic data | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |