1.一种恶意移动应用检测方法,其特征在于,包括如下步骤:将待检测移动应用程序转换为可执行、可分析的apk文件;
对apk文件进行静态分析,提取移动应用静态特征;
根据移动应用静态特征中动态分析所依赖的相关信息对移动应用进行行为触发及行为监控,提取移动应用动态特征;
综合考虑移动应用静态特征、移动应用动态特征,对待检测移动应用进行敏感行为分析,根据分析结果对恶意移动应用进行检测分类;
所述移动应用静态特征包括动态执行信息,提取移动应用静态特征中动态执行信息的方法包括如下步骤:调用Androguard的API将移动应用真实的dex文件加载至内存;
通过递归扫描的方式获取每个dex文件中所有类的字节码,并存放在内存中的列表中;
遍历列表将所有类的类名逐行写入动态分析所需的配置文件中;
调用Androguard提供API,获取apk实例对象;
调用apk实例对象的get_activities、get_receivers以及get_services方法分别获取所有这三大组件的组件名;
将组件名逐行写入动态分析所需的配置文件中;
对移动应用进行行为触发的方法包括回调强制触发,所述回调强制触发的方法包括如下步骤:根据所提取的移动应用静态特征读取所有类的类名;
利用java的RTTI机制,要求Android虚拟机按照类名加载目标类;
使用强制上转型后是否抛出转换异常的方式判断目标类是否继承自特定回调基类,如果是,则返回目标类的字节码;
根据字节码对目标类进行实例化,得到实例对象;
调用实例对象的回调方法,实现回调强制触发;
所述行为监控包括Android系统回调行为监控、API传递参数记录、用户行为和界面变化捕捉和/或文件系统监控;
所述Android系统回调行为监控的方法包括以下步骤:选取异步回调类的注册API为Hook点,注册API调用时获取传入的参数并从参数中获取异步回调类的实例,通过调用实例的getClass方法获取异步回调类的字节码;根据字节码获取抽象类的抽象方法的实现,并加以Hook监控;
所述API传递参数记录的方法包括以下步骤:
获取调用API时传递的参数,将所获取的参数上转型或装箱为Object类型,使用instanceof运算符判断所获取参数的数据类型:如果经判断该参数为基本数据类型,那么直接对其进行拆箱,然后记录其真值;如果经判断该参数为引用类型,那么调用该参数toString方法,将其序列化为字符串,再记录其真值;
所述用户行为和界面变化捕捉的方法包括以下步骤:在回调类的回调方法上下Hook,监控用户行为;
采用UI测试框架模拟UI界面的点击行为,捕捉界面变化;
所述文件系统监控的方法包括以下步骤:
用native代码实现自身文件系统操作,对java语言的文件系统操作API进行Hook监控,实现对于java层文件系统操作的API监控;
将待检测移动应用程序转换为可执行、可分析的apk文件的方法包括如下步骤:选取dex2oat作为脱壳点,对待检测移动应用程序进行脱壳处理,获取未加密的dex文件;
将未加密的dex文件反编译为smali伪汇编代码,修改AndroidManifest.xml,去除加固厂商插入的无效干扰信息;
将smali源码文件编译回dex文件,重打包以获取所述可执行、可分析的apk文件。
2.根据权利要求1所述的恶意移动应用检测方法,其特征在于,对移动应用进行行为触发的方法包括用户模拟触发,所述用户模拟触发的方法包括如下步骤:在预设递归搜索次数范围内,通过反复递归搜索确定可点击控件;
采用Traverse UI遍历工具对可点击控件进行批量动态测试。
3.根据权利要求1所述的恶意移动应用检测方法,其特征在于,对移动应用进行行为触发的方法包括系统消息伪造触发,所述系统消息伪造触发的方法包括如下步骤:采用Hook系统深层API的方式对时间进行伪造;
调用System.currentTimeMillis()获取正常返回时间值,将正常返回时间值直接加上
1年的时间,返回给被测移动应用,实现时间伪造触发;
采用native代码调用Linux系统的C语言API实现时间记录。
4.根据权利要求1所述的恶意移动应用检测方法,其特征在于,对移动应用进行行为触发的方法包括组件强制触发,所述组件强制触发的方法包括:获取移动应用所有的Activity组件和Service组件的名字;
在动态分析时,调用adb的am工具强制启动这些组件。
5.根据权利要求1所述的恶意移动应用检测方法,其特征在于,所述行为监控包括敏感API调用行为监控,所述敏感API调用行为监控选取深层API作为Hook点。