CN102938040B - Android恶意应用程序检测方法、系统及设备 - Google Patents

Android恶意应用程序检测方法、系统及设备 Download PDF

Info

Publication number
CN102938040B
CN102938040B CN201210376003.6A CN201210376003A CN102938040B CN 102938040 B CN102938040 B CN 102938040B CN 201210376003 A CN201210376003 A CN 201210376003A CN 102938040 B CN102938040 B CN 102938040B
Authority
CN
China
Prior art keywords
function
malicious act
sensitive
program
server
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.)
Expired - Fee Related
Application number
CN201210376003.6A
Other languages
English (en)
Other versions
CN102938040A (zh
Inventor
程绍银
巫妍
吴俊昌
蒋凡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Science and Technology of China USTC
ZTE Corp
Original Assignee
University of Science and Technology of China USTC
ZTE Corp
Filing date
Publication date
Application filed by University of Science and Technology of China USTC, ZTE Corp filed Critical University of Science and Technology of China USTC
Priority to CN201210376003.6A priority Critical patent/CN102938040B/zh
Publication of CN102938040A publication Critical patent/CN102938040A/zh
Priority to PCT/CN2013/082152 priority patent/WO2014048194A1/zh
Application granted granted Critical
Publication of CN102938040B publication Critical patent/CN102938040B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种Android恶意应用程序检测方法、系统及设备,其中检测方法包括:服务器模拟执行Android应用程序,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;将含有敏感数据的函数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。采用本发明的技术方案,在不依赖人工分析特征码的前提下实现Android恶意应用程序的检测,减少了技术人员的工作量。

Description

Android恶意应用程序检测方法、系统及设备
技术领域
本发明涉及恶意应用程序检测技术,具体涉及一种安卓(Android)恶意应用程序检测方法、系统及设备。
背景技术
Android系统作为一种开源的智能手机操作系统,吸引了大量应用程序开发者。由于智能手机中存有大量的用户隐私信息,因此吸引了大量的恶意应用程序涌入应用程序市场,窃取用户的隐私信息;加之各个应用程序市场的监督管理制度和检测方法尚不完善,无法对应用程序的恶意性进行甄别,因此使用户隐私信息大量外泄,给应用程序的使用者蒙受很大损失。
Android恶意应用程序是指在未明确提示用户或未经用户许可的情况下,在用户计算机或其他终端上安装运行,侵犯用户合法权益的软件。主要恶意行为包括:恶意扣费、隐私窃取、远程控制、恶意传播、资费消耗、系统破坏、诱骗欺诈、流氓行为等。
目前针对恶意应用程序的检测方法主要有两种:动态检测方法与静态检测方法。动态检测方法主要通过修改Android模拟器内核对安装的应用程序进行实时检测或者使用符号执行的方法使应用程序按照指定的路径运行,从而得到应用程序的恶意行为。静态分析方法主要是通过分析安卓安装包(AndroidPackage,APK)中的有关文件,比如AndroidManifest.xml、Dalvik字节码文件等,从中抽取部分信息作为关键特征,采用特征匹配的方式完成检测。
动态检测方法依赖于特定的触发条件,无法在短时间内检测完成所有的执行路径;基于特征匹配的方式依赖于特征码数据库,而特征码的获取基本上是靠人工分析的方式,工作量巨大。
发明内容
有鉴于此,本发明的主要目的在于提供一种Android恶意应用程序检测方法、系统及设备,可在不依赖人工分析特征码的前提下实现Android恶意应用程序的检测,大大减少了技术人员的工作量。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种Android恶意应用程序检测方法,该方法包括:
服务器模拟执行Android应用程序,将应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;
将含有敏感数据的函数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
上述方案中,该方法还包括:
待服务器模拟Android应用程序的执行结束后,根据与恶意行为检测规则库匹配的结果生成危险行为的详细说明,输出检测报告,并向客户端报告检测结果。
上述方案中,所述服务器模拟Android应用程序的执行之前,该方法还包括:
客户端将待测的Android应用程序的APK文件发送给服务器,服务器解压APK文件,提取出Dalvik字节码文件和AndroidManifest.xml配置文件。
上述方案中,该方法还包括:
服务器反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,包括:指令结构、基本结构、函数结构、类结构、函数调用图、控制流图;
服务器解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构,作为模拟执行的入口函数。
上述方案中,所述服务器模拟执行Android应用程序的包括:
服务器从入口函数开始,根据构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,并按指令的执行顺序,按顺序模拟每条指令的执行。
上述方案中,该方法还包括:
在模拟指令的执行过程中,服务器收集函数变量的程序状态信息,并利用收集到的变量的程序状态信息,判断动态机制函数实际的调用对象,根据当前对象查找相关响应函数。
本发明还提供了一种Android恶意应用程序检测系统,该系统包括客户端和服务器;其中:
所述客户端,用于将待测的Android应用程序的APK文件发送给服务器;
所述服务器,用于根据客户端发来的APK文件模拟Android应用程序的执行,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;同时将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
上述方案中,所述客户端包括第一通讯模块,用于将待测的Android应用程序的APK文件发送给服务器。
上述方案中,所述服务器包括第二通讯模块、流敏感分析引擎、敏感数据引入规则库和恶意行为检测规则库;其中:
所述第二通讯模块,用于接收客户端发来的APK文件,并将APK文件发送给流敏感分析引擎;
所述流敏感分析引擎,用于根据收到的APK文件模拟Android应用程序的执行,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;还用于将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为的检测规则进行匹配,将匹配成功的函数参数标记为恶意行为;
所述敏感数据引入规则库,用于存储敏感特征信息;
所述恶意行为检测规则库,用于存储恶意行为特征信息。
上述方案中,所述流敏感分析引擎包括匹配模块和恶意行为检测器;其中:
所述匹配模块,用于将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据,将匹配后的数据送入恶意行为检测器进行恶意行为检测;
所述恶意行为检测器,用于将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
上述方案中,所述服务器还包括危险行为报告器,用于模拟Android应用程序的执行结束后,根据与恶意行为检测规则库匹配的结果生成危险行为的详细说明,输出检测报告,同时将检测报告经第二通讯模块发送给客户端。
上述方案中,所述服务器还包括程序结构构建器和入口函数解析器;其中:
所述程序结构构建器,用于反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,并将构建好的程序结构发送给流敏感分析引擎;
所述入口函数解析器,用于解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构作为开始分析的入口函数,并将获得的入口函数发送给流敏感分析引擎。
上述方案中,所述流敏感分析引擎还包括指令模拟器,用于根据程序结构构建器构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,从入口函数解析器获得的入口函数开始,按顺序模拟每条指令的执行。
上述方案中,所述流敏感分析引擎还包括程序状态收集器和动态机制连接器;其中:
所述程序状态收集器,用于在指令的模拟执行过程中,收集函数变量的程序状态信息,并将收集到的函数变量的程序状态信息发送给动态机制连接器;
所述动态机制连接器,用于根据程序状态收集器收集到的函数变量的程序状态信息,判断动态机制函数实际的调用对象,根据当前对象查找相关响应函数。
本发明还提供了一种服务器,该服务器包括通讯模块、流敏感分析引擎、敏感数据引入规则库和恶意行为检测规则库;其中:
所述通讯模块,用于接收客户端发来的APK文件,并将APK文件发送给流敏感分析引擎;
所述流敏感分析引擎,用于根据收到的APK文件模拟Android应用程序的执行,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;还用于将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为的检测规则进行匹配,将匹配成功的函数参数标记为恶意行为;
所述敏感数据引入规则库,用于存储敏感特征信息;
所述恶意行为检测规则库,用于存储恶意行为特征信息。
上述方案中,所述流敏感分析引擎包括匹配模块和恶意行为检测器;其中:
所述匹配模块,用于将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据,将匹配后的数据送入恶意行为检测器进行恶意行为检测;
所述恶意行为检测器,用于将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
上述方案中,该服务器还包括危险行为报告器,用于模拟Android应用程序的执行结束后,根据与恶意行为检测规则库匹配的结果生成危险行为的详细说明,输出检测报告,同时将检测报告经通讯模块发送给客户端。
上述方案中,该服务器还包括程序结构构建器和入口函数解析器;其中:
所述程序结构构建器,用于反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,并将构建好的程序结构发送给流敏感分析引擎;
所述入口函数解析器,用于解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构作为开始分析的入口函数,并将获得的入口函数发送给流敏感分析引擎。
上述方案中,所述流敏感分析引擎还包括指令模拟器,用于根据程序结构构建器构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,从入口函数解析器获得的入口函数开始,按顺序模拟每条指令的执行。
上述方案中,所述流敏感分析引擎还包括程序状态收集器和动态机制连接器;其中:
所述程序状态收集器,用于在指令的模拟执行过程中,收集函数变量的程序状态信息,并将收集到的函数变量的程序状态信息发送给动态机制连接器;
所述动态机制连接器,用于根据程序状态收集器收集到的函数变量的程序状态信息,判断动态机制函数实际的调用对象,根据当前对象查找相关响应函数。
本发明提供的技术方案,通过模拟执行应用程序,将应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;将含有敏感数据的函数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。本发明的技术方案不依赖于人工分析获得的特征码数据库,大大减少了技术人员的工作量;不依赖于特定的触发条件,在短时间内便可检测完成所有的执行路径,可准确及时的对应用程序进行恶意行为检测。
附图说明
图1为本发明Android恶意应用程序检测方法流程示意图;
图2为本发明Android恶意应用程序检测系统组成示意图;
图3为本发明实施例提供的Android恶意应用程序检测方法流程示意图;
图4为本发明实施例提供的与敏感数据引入规则库信息匹配的部分代码段示意图;
图5为本发明实施例提供的敏感数据引入规则库中的getDeviceId规则示意图;
图6为本发明实施例提供的与恶意行为检测规则库匹配的发送用户隐私数据部分代码段示意图;
图7为本发明实施例提供的恶意行为检测规则库中的openConnection规则示意图。
具体实施方式
本发明的基本思想是:服务器模拟执行Android应用程序,将应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;将含有敏感数据的函数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
下面结合附图及具体实施例对本发明再作进一步的详细说明。
图1为本发明Android恶意应用程序检测方法流程示意图,如图1所示,包括以下步骤:
步骤11:服务器根据客户端发来的Android应用程序的APK文件模拟Android应用程序的执行;
这里,客户端将待测的Android应用程序的APK文件发送给服务器,服务器收到APK文件后,可以通过如WinRAR、APKTOOL.jar等软件解压APK文件,提取出文件内部的Dalvik字节码文件和AndroidManifest.xml配置文件;
这里,所述服务器根据客户端发来的Android应用程序的APK文件模拟Android应用程序的执行包括:
服务器反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,包括:指令结构、基本结构、函数结构、类结构、函数调用图、控制流图等等;
服务器解析AndroidManifest.xml配置文件获取入口函数名,如提取activity、service、receiver、provider等标签中的“android:name”字段的值作为入口函数名,并从构建的程序结构中找出对应的函数结构,作为模拟执行的入口函数;
服务器从入口函数开始,根据构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,并按指令的执行顺序,依次模拟每条指令的执行;
其中,对于过程内分析阶段,所述函数内指令的执行顺序根据控制流图生成,采用图的遍历算法,保证每个基本块至少被执行一次;对于分支,保证每个分支都会执行;对于循环,保证循环体部分的指令至少执行一次;对于过程间分析阶段,所述函数的调用序列根据函数调用图生成,并根据函数调用点的参数类型,计算实际应该被调用的函数;
其中,所述函数的调用序列可利用函数参数的语义信息进行具体分析,如根据函数调用指令,依据函数的使用频率从高到低排列,首先判断函数是否为虚函数或接口调用函数,如果判断的结果为是,则根据this参数的类型查找实际调用的函数;若判断的结果为否,则继续判断是否为用户实现的函数,如果是则进入被调函数内部执行,使用指令模拟器计算出被调函数的指令执行序列;若判断的结果为否,则继续判断是否为动态机制函数,如果是则进入动态机制连接器查找对应的函数,并依次进入执行,否则分析结束。
在模拟指令的执行过程中,服务器收集函数变量的程序状态信息,并利用收集到的变量的程序状态信息,判断动态机制函数实际的调用对象,根据当前对象查找相关响应函数;
这里,所述收集函数变量的程序状态信息包括收集每个变量的类型信息和值信息;对于一些动态机制有关的函数,如接口调用函数、虚函数等等,利用收集到的变量的程序状态信息,判断实际的调用对象,根据实际调用对象查找相关响应函数。
步骤12:在应用程序模拟执行的过程中,服务器将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;
这里,所述敏感数据引入规则库主要记录了敏感数据的匹配规则,所述敏感数据是指涉及用户隐私或系统安全的一些数据,例如用户的通讯录、地理位置、移动设备号等信息;敏感数据引入规则库中记录着将敏感数据引入到程序的库函数信息,包括函数名、函数所在类名、函数的参数个数、敏感数据引入类型、该函数是否为静态函数、形参列表中的各个参数的污染状态等信息。
发明人发现,待检测应用程序中的恶意行为,包括:发送固定内容的短信给固定号码,在用户不知情的情况下订购SP(Service Provider,服务器提供商)服务,以消耗用户资费;打开固定的URL(Universal Resource Locator,统一资源定位符),以消耗用户资费;执行固定的系统命令,以修改或删除用户文件。其中,所述固定内容的短信、固定号码、固定URL和固定系统命令在待检测应用程序代码中以固定字符串或立即数的敏感数据形式引入危险函数的参数。如此,在模拟执行待检测应用程序时,若待检测应用程序调用函数的敏感特征信息与敏感数据引入规则库中存储的某个危险函数的敏感特征信息匹配,则标识该函数调用为敏感数据,以进行进一步检测,确定该函数调用是否为恶意行为。
步骤13:服务器将含有敏感数据的函数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为;
这里,所述恶意行为检测规则库主要记录了对恶意行为的检测规则。恶意行为的触发一般是由一些和程序外部通信的系统函数引起的,比如连接网络、发送短信等。如果在这些函数的调用点发现其参数中含有敏感数据时,则意味着发现了恶意行为;恶意行为检测规则库中主要包括恶意行为名称、恶意行为类型、敏感数据类型列表、危险函数类型列表等信息;
步骤12中,若待检测应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息匹配,则确定所述系统函数调用符合恶意行为的初步特征,即:发送固定内容的短信给固定号码、打开固定的URL或执行固定的系统命令,且所述固定内容的短信、固定号码、固定URL和固定系统命令以敏感数据的形式引入危险函数参数,来实施敏感行为。
本步骤中,服务器将待检测应用程序所述敏感行为中被调用系统函数的恶意特征信息与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,以进一步确定所述敏感行为是否为恶意行为,即:发送固定内容的短信给固定号码,是否为向SP订购服务,以消耗用户资费;打开固定的URL,是否为打开网络IP(Internet Protocol,网际互连协议)地址,以造成用户资费的消耗;执行固定的系统命令,是否对用户的文件造成损失。若是,则标识该函数调用为恶意行为,确定待检测应用程序为恶意应用程序。
这里,服务器模拟Android应用程序的执行结束后,生成恶意行为检测报告,详细描述当前恶意行为的触发流程、操作的敏感数据和带来的危害,根据检测到的危险行为按照危险行为类别进行分类,并计算出危险程度及其可能带来的危害,输出该危险行为的调用路径等程序信息,并向客户端发送该检测报告;其中,所述报告可以图形化、可扩展标记语言(Extensible Markup Language,XML)等多种形式表示。
基于上述方法,本发明Android恶意应用程序检测系统如图2所示,系统包括客户端11和服务器12;其中:
所述客户端11,用于将待测的Android应用程序的APK文件发送给服务器12;
所述服务器12,用于根据客户端11发来的APK文件模拟Android应用程序的执行,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;同时将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
所述服务器12,还用于模拟执行结束后,将检测报告发送给客户端11;
所述客户端11,还用于接收服务器12发来的检测报告,向用户报告检测结果。
进一步的,所述客户端11包括第一通讯模块111,用于将待测的Android应用程序的APK文件发送给服务器12;进一步用于接收服务器12发来的检测报告,向用户报告检测结果。
进一步的,所述服务器12包括第二通讯模块121、流敏感分析引擎123、敏感数据引入规则库124和恶意行为检测规则库125;其中:
所述第二通讯模块121,用于接收第一通讯模块111发来的APK文件,并将APK文件发送给流敏感分析引擎123;
所述流敏感分析引擎123,用于根据收到的APK文件模拟Android应用程序的执行,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库124中存储的敏感特征信息进行匹配;还用于将含有敏感数据的函数参数与恶意行为检测规则库125中存储的恶意行为的检测规则进行匹配,将匹配结果发送给危险行为报告器122;
所述敏感数据引入规则库124,用于存储敏感特征信息;
所述恶意行为检测规则库125,用于存储恶意行为特征信息。
所述第二通讯模块121,进一步用于在模拟执行结束后,将检测报告发送给客户端11。
进一步的,所述流敏感分析引擎123包括匹配模块1231和恶意行为检测器1232;其中:
所述匹配模块1231,用于将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库124中的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据,将匹配后的数据送入恶意行为检测器1232进行恶意行为检测;
所述恶意行为检测器1232,用于将含有敏感数据的函数参数与恶意行为检测规则库125中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为,将匹配结果发送给危险行为报告器122。
进一步的,所述服务器12还包括危险行为报告器122,用于待流敏感分析引擎123模拟Android应用程序的执行结束后,根据与恶意行为检测规则库125匹配的结果生成危险行为的详细说明,输出检测报告,同时将检测报告经第二通讯模块121发送给客户端11;
进一步的,所述服务器12还包括程序结构构建器126和入口函数解析器127;其中:
所述程序结构构建器126,用于反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,并将构建好的程序结构发送给流敏感分析引擎123;
所述入口函数解析器127,用于解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构作为开始分析的入口函数,并将获得的入口函数发送给流敏感分析引擎123。
进一步的,所述流敏感分析引擎123还包括指令模拟器1235,用于根据程序结构构建器126构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,从入口函数解析器127获得的入口函数开始,按顺序模拟每条指令的执行。
进一步的,所述流敏感分析引擎123还包括程序状态收集器1234和动态机制连接器1233;其中:
所述程序状态收集器1234,用于在指令的模拟执行过程中,收集函数变量的程序状态信息,并将收集到的函数变量的程序状态信息发送给动态机制连接器1233;
所述动态机制连接器1233,用于根据程序状态收集器1234收集到的变量的程序状态信息,判断动态机制函数实际的调用对象,根据当前对象查找相关相应函数。
下面以com.aijiaoyou.android.sipphone应用程序为例对本发明进行详细的说明。
图3为本发明实施例提供的Android恶意应用程序检测方法流程示意图,如图3所示,包括以下步骤:
步骤301:客户端将待测的Android应用程序的APK文件发送给服务器,服务器解压APK文件,提取出Dalvik字节码文件和AndroidManifest.xml配置文件;
这里,所述服务器解压APK文件可采用如WinRAR等解压缩软件、APKTOOL.jar工具;所述AndroidManifest.xml配置文件为加密文件,可以采用AXMLPrinter2.jar、APKTOOL.jar等工具进行解密。
步骤302:服务器反汇编Dalvik字节码文件,并根据反汇编后的Dalvik字节码文件信息构建程序结构;
这里,对提取出的Dalvik字节码文件可以采用smali、IDApro等反汇编工具进行反汇编;所述根据反汇编后的Dalvik字节码文件信息构建程序结构包括指令结构、基本结构、函数结构、类结构、函数调用图、控制流图等等。
步骤303:服务器解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构,作为模拟执行的入口函数;
这里,所述AndroidManifest.xml配置文件记录着和应用程序运行有关的详细信息,通过解析AndroidManifest.xml配置文件,提取activity、service、receiver、provider等标签中的“android:name”字段的值作为入口函数名,从构建的程序结构中找出对应的函数结构,作为模拟执行的入口函数,以InitOnlineActivity为例,相应的入口函数为:
InitOnlineActivity.onCreate@VL;
InitOnlineActivity.onStart@V;
InitOnlineActivity.onKeyDown@ZIL等。
步骤304:服务器从入口函数开始,根据构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,并按指令的执行顺序,按顺序模拟每条指令的执行;
这里,对于过程内分析阶段,所述函数内指令的执行顺序根据控制流图生成,采用图的遍历算法,保证每个基本块至少被执行一次;对于分支,保证每个分支都会执行;对于循环,保证循环体部分的指令至少执行一次;对于过程间分析阶段,所述函数的调用序列根据函数调用图生成,并根据函数调用点的参数类型,计算实际应该被调用的函数;
其中,所述函数的调用序列可利用函数参数的语义信息进行具体分析,如根据函数调用指令,首先判断函数是否为虚函数或接口调用函数,如果判断的结果为是,则根据this参数的类型查找实际调用的函数;若判断的结果为否,则继续判断是否为用户实现的函数,如果是则进入被调函数内部执行,使用指令模拟器计算出被调函数的指令执行序列;若判断的结果为否,则继续判断是否是动态机制函数,如果是则进入动态机制连接器查找对应的函数,并依次进入执行,否则分析结束。
步骤305:在模拟指令的执行过程中,服务器收集函数变量的程序状态信息,并利用收集到的变量的程序状态信息,判断动态机制函数实际的调用对象,根据实际调用对象查找相关响应函数;
这里,所述在模拟指令的执行过程中,服务器收集函数变量的程序状态信息包括收集每个变量的类型信息和值信息;对于一些动态机制有关的函数,如接口调用函数、虚函数等等,利用收集到的变量的程序状态信息,判断实际的调用对象,根据实际调用对象查找相关响应函数。
步骤306:服务器在模拟Android应用程序执行过程中,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;
图4为与敏感数据引入规则库信息匹配的部分代码段示意图。这里,在模拟执行过程中,当执行到图4代码段时,其中执行完1~3行代码得到一个TelephonyManager的系统对象,将得到的TelephonyManager的系统对象保存在v0变量中;当执行到第4行代码时,TelephonyManager.getDeviceId()函数读取用户设备的设备号信息,在敏感数据引入规则库当中记录着与读取用户隐私相关的所有库函数信息,图5为敏感数据引入规则库中的getDeviceId规则示意图,如图5所示,其中定义了函数名为getDeviceId,函数类名为TelephonyManager,因此当执行到第4行代码时,发现当前函数满足敏感数据引入规则库当中的某条规则,根据该规则的描述,需将当前函数的返回值标记为敏感数据,因此在执行到第5行时,变量v1中包含有敏感数据,将其标记为敏感数据。
步骤307:服务器将含有敏感数据的函数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为;
这里,所述恶意行为检测规则库中存储着恶意行为的检测规则,若满足其中某条规则,则将检测的函数参数标记为恶意行为。图6为与恶意行为检测规则库匹配的发送用户隐私数据的部分代码段示意图,在模拟执行应用程序过程中,执行到如图6代码段时,执行完第1行后生成URL系统对象,将其存入v9变量中,该对象可以和网络服务器进行网络通信;执行到第2行时,发现v15变量中包含敏感数据的信息,然后将v15变量中包含的信息存入v9中,该信息是上面示例中的设备号信息;执行到第3行时检测到当前函数满足恶意行为检测规则库中的一条规则,图7为恶意行为检测规则库中的openConnection规则示意图,如图7所示,其中定义了函数名为openConnection,函数类名为URL,根据该规则的描述,如果当前函数的第一个参数中含有敏感数据则是一条窃取用户隐私的恶意行为,由于v9中含有敏感数据,故触发了恶意行为,该恶意行为是将设备号信息通过网络发送到远程服务器,需要将当前函数的返回值标记为恶意行为,因此在执行到第4行时,变量v6中包含有恶意行为,将其标记为恶意行为。
步骤309:服务器模拟Android应用程序的执行结束后,根据匹配结果输出检测报告,并向客户端发送该检测报告;
这里,对检测到的恶意行为,生成恶意行为检测报告,详细描述当前恶意行为的触发流程、操作的敏感数据和带来的危害,根据检测到的危险行为按照危险行为类别进行分类,并计算出危险程度及其可能带来的危害,输出该危险行为的调用路径等程序信息;检测完成后,还将输出检测花费的时间、检测的指令条数、检测的函数个数、指令覆盖率、函数覆盖率等统计信息。以上信息最终以图形化、XML等多种形式表示,最后生成的检测报告由服务器发送给客户端。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。

Claims (17)

1.一种安卓(Android)恶意应用程序检测方法,其特征在于,该方法包括:
服务器模拟执行Android应用程序,将应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;
将含有敏感数据的函数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为;
所述服务器模拟Android应用程序的执行之前,该方法还包括:
客户端将待测的Android应用程序的APK文件发送给服务器,服务器解压APK文件,提取出Dalvik字节码文件和AndroidManifest.xml配置文件;
服务器反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,包括:指令结构、基本结构、函数结构、类结构、函数调用图、控制流图;
服务器解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构,作为模拟执行的入口函数。
2.根据权利要求1所述的方法,其特征在于,该方法还包括:
待服务器模拟Android应用程序的执行结束后,根据与恶意行为检测规则库匹配的结果生成危险行为的详细说明,输出检测报告,并向客户端报告检测结果。
3.根据权利要求1所述的方法,其特征在于,所述服务器模拟执行Android应用程序的包括:
服务器从入口函数开始,根据构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,并按指令的执行顺序,按顺序模拟每条指令的执行。
4.根据权利要求3所述的方法,其特征在于,该方法还包括:
在模拟指令的执行过程中,服务器收集函数变量的程序状态信息,并利用收集到的变量的程序状态信息,判断动态机制函数实际的调用对象,根据当前对象查找相关响应函数。
5.一种Android恶意应用程序检测系统,其特征在于,该系统包括客户端和服务器;其中:
所述客户端,用于将待测的Android应用程序的APK文件发送给服务器;
所述服务器,用于解压APK文件,提取出Dalvik字节码文件和AndroidManifest.xml配置文件;反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,所述程序结构包括:指令结构、基本结构、函数结构、类结构、函数调用图、控制流图;
所述服务器,还用于解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构,作为模拟执行的入口函数;
所述服务器,还用于模拟执行Android应用程序,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;同时将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
6.根据权利要求5所述的系统,其特征在于,所述客户端包括第一通讯模块,用于将待测的Android应用程序的APK文件发送给服务器。
7.根据权利要求5所述的系统,其特征在于,所述服务器包括第二通讯模块、流敏感分析引擎、敏感数据引入规则库和恶意行为检测规则库;其中:
所述第二通讯模块,用于接收客户端发来的APK文件,并将APK文件发送给流敏感分析引擎;
所述流敏感分析引擎,用于根据收到的APK文件模拟Android应用程序的执行,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;还用于将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为的检测规则进行匹配,将匹配成功的函数参数标记为恶意行为;
所述敏感数据引入规则库,用于存储敏感特征信息;
所述恶意行为检测规则库,用于存储恶意行为特征信息。
8.根据权利要求7所述的系统,其特征在于,所述流敏感分析引擎包括匹配模块和恶意行为检测器;其中:
所述匹配模块,用于将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据,将匹配后的数据送入恶意行为检测器进行恶意行为检测;
所述恶意行为检测器,用于将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
9.根据权利要求5所述的系统,其特征在于,所述服务器还包括危险行为报告器,用于模拟Android应用程序的执行结束后,根据与恶意行为检测规则库匹配的结果生成危险行为的详细说明,输出检测报告,同时将检测报告经第二通讯模块发送给客户端。
10.根据权利要求5所述的系统,其特征在于,所述服务器还包括程序结构构建器和入口函数解析器;其中:
所述程序结构构建器,用于反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,并将构建好的程序结构发送给流敏感分析引擎;
所述入口函数解析器,用于解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构作为开始分析的入口函数,并将获得的入口函数发送给流敏感分析引擎。
11.根据权利要求7所述的系统,其特征在于,所述流敏感分析引擎还包括指令模拟器,用于根据程序结构构建器构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,从入口函数解析器获得的入口函数开始,按顺序模拟每条指令的执行。
12.根据权利要求7所述的系统,其特征在于,所述流敏感分析引擎还包括程序状态收集器和动态机制连接器;其中:
所述程序状态收集器,用于在指令的模拟执行过程中,收集函数变量的程序状态信息,并将收集到的函数变量的程序状态信息发送给动态机制连接器;
所述动态机制连接器,用于根据程序状态收集器收集到的函数变量的程序状态信息,判断动态机制函数实际的调用对象,根据当前对象查找相关响应函数。
13.一种服务器,其特征在于,该服务器包括通讯模块、流敏感分析引擎、敏感数据引入规则库、恶意行为检测规则库、程序结构构建器和入口函数解析器;其中:
所述通讯模块,用于接收客户端发来的APK文件,并将APK文件发送给流敏感分析引擎;
所述流敏感分析引擎,用于解压APK文件,提取出Dalvik字节码文件和AndroidManifest.xml配置文件;
所述程序结构构建器,用于反汇编Dalvik字节码文件,并根据Dalvik字节码文件信息构建程序结构,并将构建好的程序结构发送给流敏感分析引擎;所述程序结构包括:指令结构、基本结构、函数结构、类结构、函数调用图、控制流图;
所述入口函数解析器,用于解析AndroidManifest.xml配置文件获取入口函数名,并从构建的程序结构中找出对应的函数结构作为开始分析的入口函数,并将获得的入口函数发送给流敏感分析引擎;
所述流敏感分析引擎,还用于模拟执行Android应用程序,将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中存储的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据;还用于将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为的检测规则进行匹配,将匹配成功的函数参数标记为恶意行为;
所述敏感数据引入规则库,用于存储敏感特征信息;
所述恶意行为检测规则库,用于存储恶意行为特征信息。
14.根据权利要求13所述的服务器,其特征在于,所述流敏感分析引擎包括匹配模块和恶意行为检测器;其中:
所述匹配模块,用于将Android应用程序调用的系统函数的敏感特征信息与敏感数据引入规则库中的敏感特征信息进行匹配,将匹配成功的系统函数的变量标记为敏感数据,将匹配后的数据送入恶意行为检测器进行恶意行为检测;
所述恶意行为检测器,用于将含有敏感数据的函数参数与恶意行为检测规则库中存储的恶意行为特征信息进行匹配,将匹配成功的函数参数标记为恶意行为。
15.根据权利要求13所述的服务器,其特征在于,该服务器还包括危险行为报告器,用于模拟Android应用程序的执行结束后,根据与恶意行为检测规则库匹配的结果生成危险行为的详细说明,输出检测报告,同时将检测报告经通讯模块发送给客户端。
16.根据权利要求13所述的服务器,其特征在于,所述流敏感分析引擎还包括指令模拟器,用于根据程序结构构建器构建出的程序结构,模拟函数的调用序列和函数内指令的执行顺序,从入口函数解析器获得的入口函数开始,按顺序模拟每条指令的执行。
17.根据权利要求13所述的服务器,其特征在于,所述流敏感分析引擎还包括程序状态收集器和动态机制连接器;其中:
所述程序状态收集器,用于在指令的模拟执行过程中,收集函数变量的程序状态信息,并将收集到的函数变量的程序状态信息发送给动态机制连接器;
所述动态机制连接器,用于根据程序状态收集器收集到的函数变量的程序状态信息,判断动态机制函数实际的调用对象,根据当前对象查找相关响应函数。
CN201210376003.6A 2012-09-29 2012-09-29 Android恶意应用程序检测方法、系统及设备 Expired - Fee Related CN102938040B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201210376003.6A CN102938040B (zh) 2012-09-29 Android恶意应用程序检测方法、系统及设备
PCT/CN2013/082152 WO2014048194A1 (zh) 2012-09-29 2013-08-23 Android恶意应用程序检测方法、系统及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210376003.6A CN102938040B (zh) 2012-09-29 Android恶意应用程序检测方法、系统及设备

Publications (2)

Publication Number Publication Date
CN102938040A CN102938040A (zh) 2013-02-20
CN102938040B true CN102938040B (zh) 2016-11-30

Family

ID=

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101587527A (zh) * 2009-07-08 2009-11-25 北京东方微点信息技术有限责任公司 病毒程序扫描方法及装置
CN102194079A (zh) * 2011-03-18 2011-09-21 北京思创银联科技股份有限公司 文件访问过滤方法
CN102622536A (zh) * 2011-01-26 2012-08-01 中国科学院软件研究所 一种恶意代码捕获方法
CN102663281A (zh) * 2012-03-16 2012-09-12 成都市华为赛门铁克科技有限公司 检测恶意软件的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101587527A (zh) * 2009-07-08 2009-11-25 北京东方微点信息技术有限责任公司 病毒程序扫描方法及装置
CN102622536A (zh) * 2011-01-26 2012-08-01 中国科学院软件研究所 一种恶意代码捕获方法
CN102194079A (zh) * 2011-03-18 2011-09-21 北京思创银联科技股份有限公司 文件访问过滤方法
CN102663281A (zh) * 2012-03-16 2012-09-12 成都市华为赛门铁克科技有限公司 检测恶意软件的方法和装置

Similar Documents

Publication Publication Date Title
CN105022960B (zh) 基于网络流量的多特征移动终端恶意软件检测方法及系统
CN105187394B (zh) 具有移动终端恶意软件行为检测能力的代理服务器及方法
CN110233849B (zh) 网络安全态势分析的方法及系统
CN102945347B (zh) 一种检测Android恶意软件的方法、系统及设备
CN109361643B (zh) 一种恶意样本的深度溯源方法
CN112685737A (zh) 一种app的检测方法、装置、设备及存储介质
CN101350745B (zh) 一种入侵检测方法及装置
CN112468520B (zh) 一种数据检测方法、装置、设备及可读存储介质
CN110502897A (zh) 一种基于混合分析的网页恶意JavaScript代码识别和反混淆方法
CN105187395B (zh) 基于接入路由器进行恶意软件网络行为检测的方法及系统
CN107341399B (zh) 评估代码文件安全性的方法及装置
CN104598824A (zh) 一种恶意程序检测方法及其装置
CN107070929A (zh) 一种工控网络蜜罐系统
CN108133139A (zh) 一种基于多运行环境行为比对的安卓恶意应用检测系统
CN105530265B (zh) 一种基于频繁项集描述的移动互联网恶意应用检测方法
CN105069355A (zh) webshell变形的静态检测方法和装置
CN103297267B (zh) 一种网络行为的风险评估方法和系统
CN104767757A (zh) 基于web业务的多维度安全监测方法和系统
CN103186740A (zh) 一种Android恶意软件的自动化检测方法
CN113342639B (zh) 小程序安全风险评估方法和电子设备
CN106155882B (zh) 一种Android软件动态行为分析中的路径感知方法
CN104318162A (zh) 源代码泄露检测方法及装置
CN114386032A (zh) 电力物联网设备的固件检测系统及方法
CN113315767A (zh) 一种电力物联网设备安全检测系统及方法
CN114422271B (zh) 数据处理方法、装置、设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20161130

Termination date: 20190929