发明内容
本申请提供一种病毒APK的识别方法,用以快速、准确、有效地识别出病毒APK及其变种,提高APK应用的安全性。
本申请还提供了一种病毒APK的识别装置,用以保证上述方法在实际中的应用及实现。
为了解决上述问题,本申请公开了一种病毒APK的识别方法,包括:
预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;
检测目标Android安装包APK的指定文件中是否包含病毒特征码,若是,则统计所述病毒特征码对应的权重值之和;
若所述权重值之和大于等于某病毒判定阈值,则判定所述目标Android安装包APK中存在相应类型的病毒。
优选地,所述的方法,还包括:
生成所述目标Android安装包APK中存在该类型病毒的提示信息。
优选地,所述的方法,还包括:
若所述权重值之和小于某病毒判定阈值,则判定所述目标Android安装包APK为病毒APK。
优选地,所述的方法,还包括:
生成所述目标Android安装包APK为病毒APK的提示信息。
优选地,所述的方法,还包括:
调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。
优选地,所述指定文件包括可执行文件,所述预置病毒数据库的步骤包括:
扫描源Android安装包APK中的可执行文件;
提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
若是,则根据所述特定数据生成病毒特征码;
为所述病毒特征码分配权重值;
将所述病毒特征码及对应的权重值保存至病毒数据库中。
优选地,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
优选地,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;
所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;
所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;
所述将病毒特征码及对应的权重值保存至病毒数据库中的步骤包括:
将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值分别保存在数据库中不同的存储区域;
或者,
将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值保存在数据库中,并分别标记分类标签。
优选地,所述检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码的步骤包括:
定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
优选地,所述指定文件还包括文本文件,所述预置病毒数据库的步骤还包括:
提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
若是,则根据所述linux命令生成病毒特征码。
优选地,所述病毒特征码还包括linux命令特征码,所述检测目标Android安装包APK中的指定文件中是否包含病毒特征码的步骤还包括:
定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
优选地,所述可执行文件中常量池中的常量包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature。
本申请实施例还公开了一种病毒APK的识别装置,包括:
病毒数据库生成模块,用于预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;
病毒检测模块,用于检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;若是,则调用病毒权重值统计模块;
病毒权重值统计模块,用于统计所述病毒特征码对应的权重值之和;
阈值判断模块,用于判断所述权重值之和是否大于等于某病毒判定阈值;若是,则调用病毒判定模块;
病毒判定模块,用于判定所述目标Android安装包APK中存在相应类型的病毒。
优选地,所述的装置,还包括:
第一提示信息生成模块,与所述病毒判定模块连接,用于生成所述目标Android安装包APK中存在该类型病毒的提示信息。
优选地,所述的装置,还包括:
病毒识别模块,用于在所述权重值之和小于某病毒判定阈值时,判定所述目标Android安装包APK为病毒APK。
优选地,所述的装置,还包括:
第二提示信息生成模块,与所述病毒识别模块连接,用于生成所述目标Android安装包APK为病毒APK的提示信息。
优选地,所述的装置,还包括:
病毒查杀模块,用于调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。
优选地,所述指定文件包括可执行文件,所述病毒数据库生成模块包括:
源文件扫描子模块,用于扫描源Android安装包APK中的可执行文件;
特定数据提取子模块,用于提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
第一特征码生成子模块,用于在所述特定数据包含病毒信息时,根据所述特定数据生成病毒特征码;
权重值分配模块,用于为所述病毒特征码分配权重值;
特征码保存子模块,用于将所述病毒特征码及对应的权重值保存至病毒数据库中。
优选地,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
优选地,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;
所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;
所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;
所述特征码保存子模块进一步包括:
分区保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值分别保存在数据库中不同的存储区域;
或者,
标签保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值保存在数据库中,并分别标记分类标签。
优选地,所述病毒检测模块包括:
第一检测子模块,用于定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第二检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第三检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第四检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第五检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第六检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
优选地,所述指定文件还包括文本文件,所述病毒数据库生成模块还包括:
linux命令提取子模块,用于提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
第二特征码生成子模块,用于在所述linux命令包含病毒信息时,根据所述linux命令生成病毒特征码。
优选地,所述病毒特征码还包括linux命令特征码,所述病毒检测模块还包括:
第七检测子模块,用于定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
与现有技术相比,本申请具有以下优点:
本申请通过扫描分析源APK文件中的指定文件,如可执行文件、文本文件等,针对包含病毒信息的指令、常量或头部信息按预置规则生成相应的病毒特征码,并针对各病毒特征码分配权重值,汇编成病毒数据库;之后病毒APK识别的过程中,检测目标APK文件中的指定文件,判断该指定文件中是否存在相应的病毒特征码,若存在则累计所述病毒特征码的权重值,若大于等于某病毒判定阈值,则判定所述目标APK中存在相应类型的病毒。应用本申请实施例,无论病毒制造者如何通过修改混淆方式、增加资源、修改代码(改变类名、函数名等)、更换签名、包名等方式来制作病毒变种其病毒APK的特征码都不会变,从而本申请可以快速、准确、有效地识别出病毒APK及其变种,而且有针对性的更改程序逻辑以及特定字符串(恶意号码、恶意网址)来制作病毒变种相对病毒制造者而言是比较麻烦、耗时的,从而这种方式也能有效的提高病毒制作者制作病毒变种的难度,提高APK应用的安全性。
再者,本申请能通过不同病毒类型阈值的比对进一步判定APK的病毒类型,从而便于更有针对性地对病毒APK进行后续处理,进一步提高APK识别的准确性。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请实施例的核心构思之一在于,通过扫描分析源APK文件中的指定文件,如可执行文件、文本文件等,针对包含病毒信息的指令、常量或头部信息按预置规则生成相应的病毒特征码,并针对各病毒特征码分配权重值,汇编成病毒数据库;之后病毒APK识别的过程中,检测目标APK文件中的指定文件,判断该指定文件中是否存在相应的病毒特征码,若存在则累计所述病毒特征码的权重值,若大于等于某病毒判定阈值,则判定所述目标APK中存在相应类型的病毒。
参考图1,示出了本申请的一种病毒APK的识别方法实施例1的步骤流程图,具体可以包括如下步骤:
步骤101、预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;
在本申请的一种优选实施例中,所述指定文件包括可执行文件,可以通过如下子步骤预置所述病毒数据库:
子步骤S11、扫描源Android安装包APK中的可执行文件;
子步骤S12、提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
子步骤S13、若是,则根据所述特定数据生成病毒特征码;
子步骤S14、为所述病毒特征码分配权重值;
子步骤S15、将所述病毒特征码及对应的权重值保存至病毒数据库中。
例如,病毒数据库中包括的病毒特征码及对应的权重值如下表1所示:
表1:
对于APK而言,所述可执行文件可以包括Dex文件,Dex文件主要是APK中的classes.dex文件,即Dalvik Executable(Dalvik虚拟机可执行文件)。公知的是,Dalvik是用于Android平台的Java虚拟机。Dalvik虚拟机(Dalvik VM)是Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的***。Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
更为优选的是,所述可执行文件还可以包括扩展名为.jar的文件。Android安装包中的JAR文件其实就是Dex文件,只不过其扩展名为.jar,对于APK中除classes.dex之外的其他文件,只要判定其为Dex文件即可决定是否进行扫描。
在实际应用中,所述Dex文件还可以包括其它Dex格式的文件。
在本申请的一种优选实施例中,所述可执行文件中的特定数据可以按如下顺序来提取:
1)可执行文件常量池中的常量;
具体而言,所述指定文件中常量池中的常量可以包括字符串strings、类型types、域fields和方法methods中的常量,所述可执行文件常量池中的常量,可以通过以下子步骤判断是否包含病毒信息:
子步骤S21、判断所述字符串strings中的常量是否包含预定义的恶意网址信息、恶意文件名或恶意号码信息等恶意信息;
和/或,
子步骤S22、判断所述类型types、域fields和方法methods中的常量是否调用自定义的类名、自定义的函数名或Android***SDK类名、Android***函数名。
在具体应用中,可以直接将所述常量中的病毒信息作为病毒特征码,在实施例中生成的病毒特征码包括常量特征码、类名函数名特征码。
例如,某个APK的classes.dex文件中的常量池中包含如下字符串:
com.noshufou.android.su
/system/app/com.***.update.apk
在判定其为病毒信息后,可直接将其作为病毒特征码并分配对应的权重值后保存至病毒数据库中。
例如,某个APK的classes.dex文件中的常量池中包含如下method:
Lcom/android/main/SmsReceiver;
Lcom/android/main/ActionReceiver;
在判定其为病毒信息后,可直接将其作为病毒特征码并分配对应的权重值后保存至病毒数据库中。
例如,某个APK的classes.dex文件中的常量池中包含如下type:
Lcom/androidkernel/flash/Main$1;
在判定其为病毒信息后,可直接将其作为病毒特征码并分配对应的权重值后保存至病毒数据库中。
例如,某个APK的classes.dex文件中的常量池中包含如下field:
Lcom/androidkernel/flash/b/br$1;.this$0:Lcom/androidkernel/flash/b/br;
在判定其为病毒信息后,可直接将其作为病毒特征码并分配对应的权重值后保存至病毒数据库中。
2)可执行文件中的操作指令;
Dalvik VM是基于寄存器设计的,程序中使用的数据如strings,types,fields和methods保存在专门的数据存储区(常量池)中,在程序当中通过对应的索引来引用,而字符文字常量则直接保存在instructions(操作指令)中,其操作码(opcode)分为两类:
一类将指定的数据放入寄存器,如参见如下例1至例4:
例1:
1303 6100 |0000:const/16v3,#int 97//#61
将整数97放入寄存器v3中。
例2:
1700 0000 0040 |0049:const-wide/32 v0,#float 2.000000 //#40000000
将浮点数2.000000放入寄存器v0中。
例3:
1a00 7d00 |000b:const-string v0,"%.2fMB"//
string007d
将字符串"%.2fMB"放入寄存器v0中。
例4:
1c03 6e04 |0015: const-class v3,
Lcom/qihoo360/mobilesafe/service/NetTrafficService;//type046e
将类com.qihoo360.mobilesafe.service.NetTrafficService放入寄存器v3中。
另外一类则基于寄存器进行操作,如参见如下例5至例10:
例5:
3100 0305 |0042:cmp-long v0,
v3,v5
比较寄存器v3和v5中的long值,将比较结果存入寄存器v0。
例6:
3221 0400 |001a:if-eq v1,v2, 001e//+0004
条件if,根据v1和v2是否相等来决定执行流程。
例7:
3800 1500 |001e:if-eqz v0, 0033//+0015
条件if,判断v0是否等于0来决定执行流程。
例8:
6e10 0e29 0500 |0006:invoke-virtual{v5},Ljava/io/File;.length:()J//method290e
调用File的length()函数。
例9:
7010 042a 0800 |011d: invoke-direct {v8},
Ljava/lang/StringBuilder;.<init>:()V//method2a04
调用StringBuilder的init函数。
例10:
b021 |0035:add-int/2addr v1,v2
将v1+v2的结果保存在v1中。
APK中的classes.dex文件和JAR文件中的用户类名,函数名,字符串会受到混淆或者修改而发生改变,但Dalvik VM的指令以及对Android***SDK提供的类的调用不会受到用户类名,函数名,变量名等被混淆或者修改的影响,因此可以通过一组有序的特定指令来识别APK。因为Dalvik VM是基于寄存器的,因此其指令本身只能操作寄存器,字符文字常量,数据存储区,而寄存器地址是可变的,因此识别时要模糊匹配也即通过识别指令中的固定部分——opcode及其相关的字符文字常量参数或者数据存储区中的strings,types,fields和methods等,当然也可以直接使用指令及其操作数本身作为病毒特征码。
在本申请的一种优选实施例中,可以通过如下子步骤判断所述操作指令是否包含病毒信息:
子步骤S31、判断所述操作数中是否包含预定义的非法操作数;
和/或,
子步骤S32、判断所述操作码和操作数的组合是否符合预定义的非法搭配规则。
在本申请的一种优选实施例中,可以通过如下子步骤根据所述操作指令生成病毒特征码:
子步骤S41、将所述操作指令本身作为病毒特征码;
和/或,
子步骤S42、将所述操作指令的操作码,以及,操作数的字符串或通配符作为病毒特征码。
应用本实施例生成的病毒特征码包括操作数特征码、指令特征码、指令特征码序列。
特征码生成方案一:
直接使用APK中的classes.dex文件和JAR文件中的特定指令集本身作为病毒特征码。
例如,上述例1的特征码可以为1303 6100,例2的特征码可以为17000000 0040,例3的特征码可以为1a00 7d00,例4的特征码可以为1c036e04,例5的特征码可以为3100 0305,例6的特征码可以为3221 0400,例7的特征码可以为3800 1500,例8的特征码可以为6e10 0e29 0500,例9的特征码可以为7010 042a 0800,例10的特征码可以为b021。
特征码生成方案二:
使用APK中的classes.dex文件和JAR文件中的特定opcode及其操作数的字符串或通配符作为病毒特征码。
例如,上述例1的特征码可以为13$*(其中*代表模糊匹配,下同,需要说明的是,此处的“*”仅用作举例,实际中可以使用任意字符),例2的特征码可以为17$*,例3的特征码可以为1a$,例4的特征码可以为1c$Lcom/qihoo360/mobilesafe/service/NetTrafficService,例5的特征码可以为31$*,例6的特征码可以为32$*,例7的特征码可以为38$*,例8的特征码可以为6e$Ljava/io/File;.length:(),例9的特征码可以为70$Ljava/lang/StringBuilder;.<init>,例10的特征码可以为b0$*。
特征码选择方案三:
混合使用上述方案一和方案二。即将上述APK中的classes.dex中的特定指令集本身,以及,APK中的classes.dex中的特定opcode及其操作数的字符串或通配符全部作为病毒特征码。
需要说明的是,在本申请实施例中,采用$为分隔符,在实际中还可采用任意其他字符作为分隔符;在本申请实施例中,采用*作为通配符,在实际中还可采用任意其他字符作为通配符。
为使本领域技术人员更好地理解上述特征码生成的过程,以下通过一个具体示例进行说明。
针对提取classes.dex中的常量池(string、type、field和meth)当中的常量提取的特征码如下:例如,某病毒在其字符串常量池当中包括以下特征字符串:
zjphonecall.txt和zjsms.txt,在这2个文件中包括了恶意电话号码以及特服短信号码则可提取其作为病毒特征码。
针对反汇编classes.dex提取的特征码如下:
例如,病毒X卧底.apk中包含以下指令用以备份用户隐私数据至http://www.mybackup.me,按照其出现的先后顺序列举如下:
2200 f600 |0000:new-instance v0, Ljava/lang/StringBuilder;
//type00f6
提取其病毒特征码为:2200f600或22$Ljava/lang/StringBuilder
7010 9804 0000 |0002: invoke-direct {v0},
Ljava/lang/StringBuilder;.<init>:( )V//method0498
提取其病毒特征码为:701098040000或
70$Ljava/lang/StringBuilder;.<init>
1a01 5506 |0005:const-string v1,"http://www.mybackup.me"//string0655
提取其病毒特征码为:701098040000或1a$http://www.mybackup.me
6e20 9e04 1000 |0007:invoke-virtual{v0,v1},
Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)
Ljava/lang/StringBuilder;//method049e
提取其病毒特征码为:6e209e041000或6e$Ljava/lang/StringBuilder;.append
3902 0900 |0005:if-nez v2,000e//+0009
提取其病毒特征码为:39020900或39$*
0c02 |0003:move-result-object v2
提取其病毒特征码为:0c02或0c$*
最终获得的特征码为:
特征码选择方案一:
2200f6007010980400007010980400006e209e041000390209000c02
特征码选择方案二:
22$Ljava/lang/StringBuilder$70$Ljava/lang/StringBuilder;.<init>$1a$http://www.mybackup.me$6e$Ljava/lang/StringBuilder;.append$39$*$0c$*
特征码选择方案三:
22$Ljava/lang/StringBuilder$701098040000$1a$http://www.mybackup.me$6e$Ljava/lang/StringBuilder;.append$39$*$0c02
又如,某个APK的classes.dex文件中的Instructions(操作指令)如下所示:
1a0c bb08 |009b:const-string v12,"tiger"//string08bb
1a0d 1e03 |009d:const-string v13,"P5"//string031e
7120 1404 dc00 |009f:invoke-static{v12,v13},
Lcom/androidkernel/flash/util/LogUtil;.i:
(Ljava/lang/String;Ljava/lang/String;)V//method0414
2205 9700 |00a2:new-instance
v5,Lcom/androidkernel/flash/http/base/DlStruct;//type0097
7010 1603 0500 |00a4:invoke-direct{v5},
Lcom/androidkernel/flash/http/base/DlStruct;.<init>:( )V//method0316
1a0c 7200 |00a7:const-string v12,"AA"//string0072
7020 f402 ce00 |00a9:invoke-direct{v14,v12},
Lcom/androidkernel/flash/helper/Tiger;.getUrl:(Ljava/lang/String;)
Ljava/lang/String;//method02f4
0c0b |00ac:move-result-object v11
当判定上述操作码和操作数的搭配符合预定义的非法搭配规则,或者,判定上述操作数中包含预定义的非法操作数时,可按如下方式生成特征码:
方式一:
1a0cbb081a0d1e0371201404dc00220597007010160305001a0c72007020f402ce000c0b
方式二:
1a$tiger$1a$P5$71$Lcom/androidkernel/flash/util/LogUtil;.i:(Ljava/lang/String;Ljava/lang/String;)V$22$Lcom/androidkernel/flash/http/base/DlStruct;$70$Lcom/androidkernel/flash/http/base/DlStruct;.<init>:( )V$1a$AA$70$Lcom/androidkernel/flash/helper/Tiger;.getUrl:(Ljava/lang/String;)Ljava/lang/String;$0c$*
方式三:
1a0cbb08$1a$P5$71201404dc00$22$*$70$Lcom/androidkernel/flash/http/base/DlStruct;.<init>:( )V$1a$AA$70$Lcom/androidkernel/flash/helper/Tiger;.getUrl:(Ljava/lang/String;)Ljava/lang/String;$0c$*
3)可执行文件的头部信息。
在具体实现中,所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature,在这种情况下,可以通过判断所述摘要信息checksum和/或签名信息Signature中是否包含预定义的非法字符串,来确定所述头部信息中是否包含病毒信息。
在具体应用中,也可以直接将所述摘要信息checksum和/或签名信息Signature作为病毒特征码。即在本实施例中,所述病毒特征码包括头部信息特征码。
例如,APK中的classes.dex文件头部信息header的checksum为:11f26cac;Signature为:2911621AD071F675ADF0F590C3F1AFB5443BEBBE,在判定其为木马病毒后,直接将11f26cac和2911621AD071F675ADF0F590C3F1AFB5443BEBBE提取为病毒特征码,并将所述病毒特征码保存至数据库中。
作为本申请实施例具体应用的一种示例,所述将病毒特征码保存至病毒数据库中的步骤可以包括如下子步骤:
子步骤S51、将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,上述各特征码对应的权重值分别保存在数据库中不同的存储区域;
或者,
子步骤S52、将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,上述各特征码对应的权重值保存在数据库中,并分别标记分类标签。
当然,上述保存病毒特征码的方式仅仅用作示例,本领域技术人员根据实际情况采用任一种保存方式都是可行的,本申请对此无需加以限制。
步骤102、检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码,所述指定文件包括可执行文件;
作为本申请实施例具体应用的一种示例,所述病毒特征码可以包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;在这种情况下,所述步骤102具体可以包括如下子步骤:
子步骤S41、定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
子步骤S42、定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
子步骤S43、定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
子步骤S44、定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
子步骤S45、定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
子步骤S46、定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
在具体实现中,可以按如下方式进行匹配:
方式一:直接逐字节按序扫描。
方式二:病毒特征码序列按序扫描,只需病毒特征码指令按序出现即可,无需连续出现。
方式三:只需存在所有或部分特征码指令即可。
当然,上述检测及匹配的方式仅仅用作示例,本领域技术人员根据实际情况采用任一种检测及匹配病毒特征码的方式均是可行的,本申请对此无需加以限制。
步骤103、若是,则统计所述病毒特征码对应的权重值之和;
例如,扫描分析某APK发现其包含以下病毒特征码:
/system/bin/su com.qihoo360.mobilesafe 1066185829
参照以上示例中的表1,可以得知,其中/system/bin/su的权重值为0.2,com.qihoo360.mobilesafe的权重值为0.3,1066185829的权重值为0.5,则统计该病毒特征码对应的权重值之和为1。
步骤104、若所述权重值之和大于等于某病毒判定阈值,则判定所述目标Android安装包APK中存在相应类型的病毒。
例如,若预先配置木马病毒判定阈值为1,上例中病毒特征码对应的权重值之和等于该阈值,于是判定该目标APK中存在木马。
在具体实现中,本申请实施例还可以包括如下步骤:
生成所述目标Android安装包APK中存在该类型病毒的提示信息。
进一步而言,在实际中,还可以调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。
为使本领域技术人员更好地理解本申请,以下通过几个具体示例进行说明。
例一:
1)定位至目标APK中的classes.dex或者JAR的操作指令instruction开始的地方(以下简称之为代码段);
2)从病毒数据库中的病毒特征码序列中根据分隔符提取第一个instruction;
3)从代码段中提取第一个instruction;
4)两者进行比较,若相同则从特征码序列中根据分隔符提取下一个instruction,若不同则从代码段中提取下一个instruction;
5)以此类推逐指令进行匹配,直至抵达代码段的末尾,若匹配过程中完全匹配则报告发现病毒;
6)提取相应病毒特征码对应的权重值,统计所述权重值之和;
7)若所述权重值之和大于等木马病毒判定阈值,则判定目标APK中存在木马病毒,报告用户,并调用安全软件进行查杀。
例二:
1)从病毒数据库的病毒特征码中提取相应的特征字符串(可能为一个或多个)。
2)查找字符串常量池中是否存在相应的特征字符串;
3)若存在,则报告发现病毒APK;
4)提取相应病毒特征码字符串对应的权重值,统计所述权重值之和;
5)若所述权重值之和大于等木马病毒判定阈值,则判定目标APK中存在木马病毒,报告用户,并调用安全软件进行查杀。
例三:
1)从病毒特征码中提取相应的特征字符串(可能为一个或多个),特征函数名(可能为一个或多个);
2)查找字符串常量池以及函数常量池中是否存在相应的特征字符串、特征函数名。其他string、type、field和meth pool的组合扫描依此类推;
3)若存在,则报告发现病毒APK;
4)提取相应病毒特征码字符串对应的权重值,统计所述权重值之和;
5)若所述权重值之和大于等木马病毒判定阈值,则判定目标APK中存在木马病毒,报告用户,并调用安全软件进行查杀。
本领域技术人员易于理解的是,上述操作指令、常量池和头部信息的扫描并无先后顺序的限制,本领域技术人员根据实际情况任意设定上述三者的扫描顺序都是可行的,本申请对此无需加以限制。
本申请实施例还适用于APK中嵌套APK的情形,即当APK中还包含其它APK时,同样可应用本申请实施例,对APK及其嵌套APK中的可执行文件、文本文件等进行解析和病毒提取,例如,在某个1.APK中嵌入了一个root.apk用以获取root权限,应用本申请实施例,除从1.APK提取病毒特征码,还会从root.apk中提取病毒特征码。本领域技术人员易于想到的是,对于多重嵌套APK的情形,本申请实施例亦同样适用,本申请在此不作限制。
参考图2,示出了本申请的一种病毒APK的识别方法实施例2的步骤流程图,具体可以包括如下步骤:
步骤201、预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;
在本申请的一种优选实施例中,所述步骤201可以包括如下子步骤:
子步骤S51、扫描源Android安装包APK中的指定文件,所述指定文件包括可执行文件和/或文本文件;
子步骤S52、提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
子步骤S53、若是,则根据所述特定数据生成病毒特征码;
子步骤S54、提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
子步骤S55、若是,则根据所述linux命令生成病毒特征码;
子步骤S56、为所述病毒特征码分配权重值;
子步骤S57、将所述病毒特征码及对应的权重值保存至病毒数据库中。
在具体实现中,可以通过判断所述linux命令是否符合预置的恶意linux命令确定所述linux命令是否包含病毒信息,还可以将所述包含病毒信息的linux命令直接作为病毒特征码。在本实施例中,所述病毒特征码还包括linux命令特征码。
例如,从APK中的文本文件中提取相应的linux命令如下:
在判定上述linux命令符合预置的恶意linux命令时,将上述命令作为病毒特征码并分配权重值后写入病毒数据库中。
步骤202、检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码,所述指定文件包括可执行文件和文本文件;若是,则执行步骤203;若否,则执行步骤207
在本申请的一种优选实施例中,所述步骤202可以包括如下子步骤:
定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
步骤203、统计所述病毒特征码对应的权重值之和;
步骤204、判断所述权重值之和是否大于等于某病毒判定阈值,若是,则执行步骤205;若否,则执行步骤206;
步骤205、判定所述目标Android安装包APK中存在相应类型的病毒,成所述目标Android安装包APK中存在该类型病毒的提示信息;
步骤206、判定所述目标Android安装包APK为病毒APK,生成所述目标Android安装包APK为病毒APK的提示信息;
步骤207,判定所述目标Android安装包APK为正常APK。
例如:扫描分析某APK发现其包含以下病毒特征码:
/system/bin/su com.qihoo360.mobilesafe 1066185829
参照上述表1,计算所述病毒特征码的权重和为1,确定其等于木马病毒判定阈值1,于是向用户报告发现木马,生成提示信息如下:
发现木马,可获取root权限,之后可绕过***安全机制从而执行恶意行为。并可侦测***是否存在杀毒软件,从而进行规避。可向号码1066185829发送扣费短信或拨打吸费电话。
或如:扫描分析某APK发现其包含以下病毒特征码:
/system/bin/su
参照上述表1,计算其权重值为0.2,确定其小于木马病毒判定阈值1,则向用户报告警告,生成提示信息如下:
警告当前应用可获取root权限,之后有可能绕过***安全机制从而执行恶意行为。
在本申请实施例中,所述某病毒判定阈值可以根据不同的病毒类型进行设置,还可以根据实际情况在云端动态调整,本申请对此不作限制。
本申请实施例还可适用于客户端软件及云查杀的过程中,即上述病毒APK识别的过程可以在客户端完成,也可以在服务器端或云端完成,本申请对此不作限制。
以下提供本申请实施例的应用场景:
场景一:依据用户的病毒扫描启动操作,首先检查APK是否变更以及是否缓存过扫描结果,若APK未变更并且缓存过扫描结果则直接输出扫描结果,反之则进行黑名单扫描,若在其中发现APK存在,则输出扫描结果发现病毒APK并增加至缓存,若未发现则进行白名单扫描,若在其中发现APK存在,则输出扫描结果安全并增加至缓存,若未发现则采用病毒数据库进行病毒特征码扫描,并输出扫描结果以及增加至缓存。
场景二:用户新装APK,杀毒程序收到新装APK消息,开始对用户新装的APK进行扫描,首先进行黑名单扫描,若在其中发现APK存在,则输出扫描结果发现病毒并增加至缓存,若未发现则进行白名单扫描,若在其中发现APK存在,则输出扫描结果安全并增加至缓存,若未发现则采用病毒数据库进行病毒特征码扫描,并输出扫描结果以及增加至缓存。
本领域技术人员易于理解的是,应用本申请实施例,也可以通过直接检测文本文件中是否包含病毒特征码来判定当前APK是否为病毒APK,为节约篇幅,本申请对此方案不作赘述。
本申请通过扫描分析源APK文件中的指定文件,如可执行文件、文本文件等,针对包含病毒信息的指令、常量或头部信息按预置规则生成相应的病毒特征码,并汇编成病毒数据库;之后病毒APK识别的过程中,检测目标APK文件中的指定文件,判断该指定文件中是否包含所述病毒数据库中的病毒特征码,从而确定目标APK是否为病毒APK。应用本申请实施例,无论病毒制造者如何通过修改混淆方式、增加资源、修改代码(改变类名、函数名等)、更换签名、包名等方式来制作病毒变种其病毒APK的特征码都不会变,从而本申请可以快速、准确、有效地识别出病毒APK及其变种,而且有针对性的更改程序逻辑以及特定字符串(恶意号码、恶意网址)来制作病毒变种相对病毒制造者而言是比较麻烦、耗时的,从而这种方式也能有效的提高病毒制作者制作病毒变种的难度,提高APK应用的安全性。
需要说明的是,本申请实施例不仅适用于各种Android终端,即使用Android平台(操作***)的终端,包括计算机、PC、笔记本电脑、手机、平板电脑等等;还适用于在其他计算机***(例如Windows、Linux)之上使用的病毒特征码提取方案。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
参考图3,其示出了本申请的一种病毒APK的识别装置实施例的结构框图,具体可以包括以下模块:
病毒数据库生成模块301,用于预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;
病毒检测模块302,用于检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;若是,则调用病毒权重值统计模块303;
病毒权重值统计模块303,用于统计所述病毒特征码对应的权重值之和;
阈值判断模块304,用于判断所述权重值之和是否大于等于某病毒判定阈值;若是,则调用病毒判定模块305;
病毒判定模块305,用于判定所述目标Android安装包APK中存在相应类型的病毒。
在本申请的一种优选实施例中,还可以包括如下模块:
病毒识别模块306,用于在所述权重值之和小于某病毒判定阈值时,判定所述目标Android安装包APK为病毒APK。
在具体实现中,本申请实施例还可以包括如下模块:
第一提示信息生成模块307,与所述病毒判定模块305连接,用于生成所述目标Android安装包APK中存在该类型病毒的提示信息。
第二提示信息生成模块308,与所述病毒识别模块306连接,用于生成所述目标Android安装包APK为病毒APK的提示信息。
更为优选的是,本申请实施例还可以包括如下模块:
病毒查杀模块,用于调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。
在本申请的一种优选实施例中,所述指定文件可以包括可执行文件,所述病毒数据库生成模块301可以包括如下子模块:
源文件扫描子模块,用于扫描源Android安装包APK中的指定文件,所述指定文件包括可执行文件;
特定数据提取子模块,用于提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
第一特征码生成子模块,用于在所述特定数据包含病毒信息时,根据所述特定数据生成病毒特征码;
权重值分配模块,用于为所述病毒特征码分配权重值;
特征码保存子模块,用于将所述病毒特征码及对应的权重值保存至病毒数据库中。
作为本申请实施例具体应用的一种示例,所述特征码保存子模块可以进一步包括以下单元:
分区保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码及对应的权重值分别保存在数据库中不同的存储区域;
或者,
标签保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码及对应的权重值保存在数据库中,并分别标记分类标签。
在具体应用中,所述可执行文件可以包括Dex文件,所述Dex文件可以包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
在本申请的一种优选实施例中,所述病毒特征码可以包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;
在这种情况下,所述病毒检测模块302可以包括如下子模块:
第一检测子模块,用于定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第二检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第三检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第四检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第五检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第六检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
在具体实现中,所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码可以根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;
所述指令特征码、指令特征码序列可以根据包含病毒信息的操作指令直接生成,或者,可以根据包含病毒信息的操作码和操作数的字符串或通配符生成。
在本申请的一种优选实施例中,所述指定文件还可以包括文本文件,在这种情况下,所述病毒数据库生成模块301还可以包括如下子模块:
linux命令提取子模块,用于提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
第二特征码生成子模块,用于在所述linux命令包含病毒信息时,根据所述linux命令生成病毒特征码。
相应的,所述病毒特征码还可以包括linux命令特征码,所述病毒检测模块302还可以包括如下子模块:
第七检测子模块,用于定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
在具体应用中,所述可执行文件中常量池中的常量可以包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中可以包括摘要信息checksum和/或签名信息Signature。
由于所述装置实施例基本相应于前述图1和图2所示的方法实施例,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此就不赘述了。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种病毒APK的识别方法,以及,一种病毒APK的识别装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。