CN104715199A - 一种病毒apk的识别方法及装置 - Google Patents
一种病毒apk的识别方法及装置 Download PDFInfo
- Publication number
- CN104715199A CN104715199A CN201510146262.3A CN201510146262A CN104715199A CN 104715199 A CN104715199 A CN 104715199A CN 201510146262 A CN201510146262 A CN 201510146262A CN 104715199 A CN104715199 A CN 104715199A
- Authority
- CN
- China
- Prior art keywords
- virus
- apk
- file
- code
- installation kit
- 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.)
- Pending
Links
Abstract
本申请提供了一种病毒APK的识别方法及装置,其中,所述方法包括:预置病毒数据库,所述病毒数据库中包括病毒特征码;检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;若是,则确定所述目标Android安装包APK为病毒APK。本申请可以快速、准确、有效地识别出病毒APK及其变种,提高APK应用的安全性。
Description
本发明专利申请是申请日为2012年3月21日、申请号为201210076889.2、名称为“一种病毒APK的识别方法及装置”的中国发明专利申请的分案申请。
技术领域
本申请涉及网络信息安全的技术领域,特别是涉及一种病毒APK的识别方法,以及,一种病毒APK的识别装置。
背景技术
Android是一种以Linux为基础的开放源码操作系统,主要使用于手机等移动终端,目前尚未有统一中文名称。Android平台由操作系统、中间件、用户界面和应用软件组成。
APK是Android application package file的缩写,即Android安装包,也可以理解为Android终端上安装的应用软件。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android终端中执行即可安装。apk文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk。APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是DalvikVM executes的全称,即Android Dalvik执行程序,并非标准的Java字节码而是Dalvik字节码。Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接运行,和Windows Mobile中的PE文件有区别。
具体而言,APK文件的结构如下表所示:
在具体应用时,APK可以通过数据线或者无线数据传输的方式导入移动终端,或者,直接通过market(工具软件,如安卓市场)、网页等方式下载安装。随着Android终端的普及和发展,各种各样的APK应运而生,这其中就包括了病毒APK,例如,一些APK通过诸如短信定制付费服务、拨打付费电话、备份用户手机中的敏感数据至特定服务器等恶意行为来损害用户的权益。
目前,已经出现了一些专门针对移动终端的安全软件(如手机杀毒软件)来对这些病毒APK进行查杀。这些现有的安全软件查杀病毒APK的方法主要有以下两种:
第一种是通过APK文件的HASH、签名、Package名字来对病毒APK进行识别,其原理是通过对APK使用HASH算法提取KEY,之后即可依据此KEY去识别病毒APK,或者,通过病毒APK制作者的APK数字签名、包名等对其进行识别。
然而,上述现有的基于APK文件的HASH进行识别的方式,很容易通过重新混淆、或者,在APK文件中添加新的资源文件乃至修改代码等方式,使通过HASH算法提取KEY发生改变,进而导致无法识别;上述现有的基于签名的识别方式可以通过更换签名的方式绕过;上述现有的基于Package名字来识别的方式也可通过修改包名的方式来绕过。而且更改混淆方式,修改APK文件(添加删除资源,代码等)或者更换签名对病毒制造者而言都很容易,所以病毒制造者很轻易地就可以制造新的病毒变种从而绕过安全软件的识别。
第二种是通过APK文件中的classes.dex中的类名对其进行识别,其原理是通过分析classes.dex中的类然后从中提取出若干个类的名字作为病毒特征码,之后即可解析病毒APK的classes.dex文件,看其中是否包含特定的类名来对其进行识别。
然而,这种通过扫描类名来进行识别的方式,一方面因为仅仅检查类名从而容易误报,另一方面也很容易被病毒制造者通过混淆或者直接修改类名而绕过。
因此,目前需要本领域技术人员解决的一个技术问题就是,提供一种病毒APK的识别机制,用以快速、准确、有效地识别出病毒APK及其变种,提高APK应用的安全性。
发明内容
本申请提供一种病毒APK的识别方法,用以快速、准确、有效地识别出病毒APK及其变种,提高APK应用的安全性。
本申请还提供了一种病毒APK的识别装置,用以保证上述方法在实际中的应用及实现。
为了解决上述问题,本申请公开了一种病毒APK的识别方法,包括:
预置病毒数据库,所述病毒数据库中包括病毒特征码;
检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;
若是,则确定所述目标Android安装包APK为病毒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为病毒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中的指定文件中包含病毒特征码。
优选的,所述可执行文件中常量池中的常量包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature。
与现有技术相比,本申请具有以下优点:
本申请通过扫描分析源APK文件中的指定文件,如可执行文件、文本文件等,针对包含病毒信息的指令、常量或头部信息按预置规则生成相应的病毒特征码,并汇编成病毒数据库;之后病毒APK识别的过程中,检测目标APK文件中的指定文件,判断该指定文件中是否包含所述病毒数据库中的病毒特征码,从而确定目标APK是否为病毒APK。应用本申请实施例,无论病毒制造者如何通过修改混淆方式、增加资源、修改代码(改变类名、函数名等)、更换签名、包名等方式来制作病毒变种其病毒APK的特征码都不会变,从而本申请可以快速、准确、有效地识别出病毒APK及其变种,而且有针对性的更改程序逻辑以及特定字符串(恶意号码、恶意网址)来制作病毒变种相对病毒制造者而言是比较麻烦、耗时的,从而这种方式也能有效的提高病毒制作者制作病毒变种的难度,提高APK应用的安全性。
附图说明
图1是本申请的一种病毒APK的识别方法实施例1的流程图;
图2是本申请的一种病毒APK的识别方法实施例2的流程图;
图3是本申请的一种病毒APK的识别装置实施例的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请实施例的核心构思之一在于,通过扫描分析源APK文件中的指定文件,如可执行文件、文本文件等,针对包含病毒信息的指令、常量或头部信息按预置规则生成相应的病毒特征码,并汇编成病毒数据库;之后病毒APK识别的过程中,检测目标APK文件中的指定文件,判断该指定文件中是否包含所述病毒数据库中的病毒特征码,从而确定目标APK是否为病毒APK。
参考图1,示出了本申请的一种病毒APK的识别方法实施例1的步骤流程图,具体可以包括如下步骤:
步骤101、预置病毒数据库,所述病毒数据库中包括病毒特征码;
在本申请的一种优选实施例中,所述指定文件包括可执行文件,可以通过如下子步骤预置所述病毒数据库:
子步骤S11、扫描源Android安装包APK中的可执行文件;
子步骤S12、提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
子步骤S13、若是,则根据所述特定数据生成病毒特征码;
子步骤S14、将所述病毒特征码保存至病毒数据库中。
对于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.google.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/16 v3,#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、若是,则确定所述目标Android安装包APK为病毒APK。
为使本领域技术人员更好地理解本申请,以下通过几个具体示例进行说明。
例一:
1)定位至APK中的classes.dex或者JAR的操作指令instruction开始的地方(以下简称之为代码段);
2)从病毒数据库中的病毒特征码序列中根据分隔符提取第一个instruction;
3)从代码段中提取第一个instruction;
4)两者进行比较,若相同则从特征码序列中根据分隔符提取下一个instruction,若不同则从代码段中提取下一个instruction;
5)以此类推逐指令进行匹配,直至抵达代码段的末尾,若匹配过程中完全匹配则报告发现病毒。
例二:
1)从病毒数据库的病毒特征码中提取相应的特征字符串(可能为一个或多个)。
2)查找字符串常量池中是否存在相应的特征字符串;
3)若存在,则报告发现病毒APK。
例三:
1)从病毒特征码中提取相应的特征字符串(可能为一个或多个),特征函数名(可能为一个或多个);
2)查找字符串常量池以及函数常量池中是否存在相应的特征字符串、特征函数名。其他string、type、field和meth pool的组合扫描依此类推;
3)若存在,则报告发现病毒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、将所述病毒特征码保存至病毒数据库中。
在具体实现中,可以通过判断所述linux命令是否符合预置的恶意linux命令确定所述linux命令是否包含病毒信息,还可以将所述包含病毒信息的linux命令直接作为病毒特征码。在本实施例中,所述病毒特征码还包括linux命令特征码。
例如,从APK中的文本文件中提取相应的linux命令如下:
cat/system/bin/sh>/data/data/$1/files/sh.new
chown 0.0/data/data/$1/files/sh.new
chmod 4755/data/data/$1/files/sh.new
rm-f/data/data/$1/files/sh
mount-o remount system/system
mkdir/system/xbin/$1
myuid=$2
if["$myuid"==""];then
myuid="0"
fi
chown${myuid}/system/xbin/$1
chmod 700/system/xbin/$1
cat/system/bin/sh>/system/xbin/$1/sh
chown 0.0/system/xbin/$1/sh
chmod 4755/system/xbin/$1/sh
sync
mount-o remount,ro system/system
#/system/bin/stop vold
#/system/bin/start vold
echo"+++ending+++"
在判定上述linux命令符合预置的恶意linux命令时,将上述命令作为病毒特征码写入病毒数据库中。
步骤202、检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码,所述指定文件包括可执行文件和文本文件;
在本申请的一种优选实施例中,所述步骤202可以包括如下子步骤:
定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
步骤203、若是,则确定所述目标Android安装包APK为病毒APK。
本申请实施例适用于客户端软件及云查杀的过程中,即上述病毒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,用于在所述目标Android安装包APK中的指定文件中包含病毒特征码时,确定所述目标Android安装包APK为病毒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的识别装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
本发明的实施例公开了A1、一种病毒APK的识别方法,包括:
预置病毒数据库,所述病毒数据库中包括病毒特征码;
检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;
若是,则确定所述目标Android安装包APK为病毒APK。
A2、如A1所述的方法,所述指定文件包括可执行文件,所述预置病毒数据库的步骤包括:
扫描源Android安装包APK中的可执行文件;
提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
若是,则根据所述特定数据生成病毒特征码;
将所述病毒特征码保存至病毒数据库中。
A3、如A1或A2所述的方法,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
A4、如A3所述的方法,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;
所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;
所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;
所述将病毒特征码保存至病毒数据库中的步骤包括:
将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码分别保存在数据库中不同的存储区域;
或者,
将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码保存在数据库中,并分别标记分类标签。
A5.如A4所述的方法,所述检测目标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中的指定文件中包含病毒特征码。
A6、如A2或A5所述的方法,所述指定文件还包括文本文件,所述预置病毒数据库的步骤还包括:
提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
若是,则根据所述linux命令生成病毒特征码。
A7、如A6所述的方法,所述病毒特征码还包括linux命令特征码,所述检测目标Android安装包APK中的指定文件中是否包含病毒特征码的步骤还包括:
定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
A8、如A5所述的方法,所述可执行文件中常量池中的常量包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature。
本发明的实施例还公开了B9、一种病毒APK的识别装置,包括:
病毒数据库生成模块,用于预置病毒数据库,所述病毒数据库中包括病毒特征码;
病毒检测模块,用于检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;
病毒识别模块,用于在所述目标Android安装包APK中的指定文件中包含病毒特征码时,确定所述目标Android安装包APK为病毒APK。
B10、如B9所述的装置,所述指定文件包括可执行文件,所述病毒数据库生成模块包括:
源文件扫描子模块,用于扫描源Android安装包APK中的可执行文件;
特定数据提取子模块,用于提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
第一特征码生成子模块,用于在所述特定数据包含病毒信息时,根据所述特定数据生成病毒特征码;
特征码保存子模块,用于将所述病毒特征码保存至病毒数据库中。
B11、如B9或B10所述的装置,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
B12、如B11所述的装置,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;
所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;
所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;
所述特征码保存子模块进一步包括:
分区保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码分别保存在数据库中不同的存储区域;
或者,
标签保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码保存在数据库中,并分别标记分类标签。
B13、如B12所述的装置,所述病毒检测模块包括:
第一检测子模块,用于定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第二检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第三检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第四检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第五检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第六检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
B14、如B10或B13所述的装置,所述指定文件还包括文本文件,所述病毒数据库生成模块还包括:
linux命令提取子模块,用于提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
第二特征码生成子模块,用于在所述linux命令包含病毒信息时,根据所述linux命令生成病毒特征码。
B15、如B14所述的装置,所述病毒特征码还包括linux命令特征码,所述病毒检测模块还包括:
第七检测子模块,用于定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
B16、如B12所述的装置,所述可执行文件中常量池中的常量包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature。
Claims (10)
1.一种病毒APK的识别方法,其特征在于,包括:
预置病毒数据库,所述病毒数据库中包括病毒特征码;
检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;
若是,则确定所述目标Android安装包APK为病毒APK。
2.如权利要求1所述的方法,其特征在于,所述指定文件包括可执行文件,所述预置病毒数据库的步骤包括:
扫描源Android安装包APK中的可执行文件;
提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
若是,则根据所述特定数据生成病毒特征码;
将所述病毒特征码保存至病毒数据库中。
3.如权利要求1或2所述的方法,其特征在于,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
4.如权利要求3所述的方法,其特征在于,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;
所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;
所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;
所述将病毒特征码保存至病毒数据库中的步骤包括:
将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码分别保存在数据库中不同的存储区域;
或者,
将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码保存在数据库中,并分别标记分类标签。
5.如权利要求4所述的方法,其特征在于,所述检测目标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中的指定文件中包含病毒特征码。
6.如权利要求2或5所述的方法,其特征在于,所述指定文件还包括文本文件,所述预置病毒数据库的步骤还包括:
提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
若是,则根据所述linux命令生成病毒特征码。
7.如权利要求6所述的方法,其特征在于,所述病毒特征码还包括linux命令特征码,所述检测目标Android安装包APK中的指定文件中是否包含病毒特征码的步骤还包括:
定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
8.如权利要求5所述的方法,其特征在于,所述可执行文件中常量池中的常量包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature。
9.一种病毒APK的识别装置,其特征在于,包括:
病毒数据库生成模块,用于预置病毒数据库,所述病毒数据库中包括病毒特征码;
病毒检测模块,用于检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;
病毒识别模块,用于在所述目标Android安装包APK中的指定文件中包含病毒特征码时,确定所述目标Android安装包APK为病毒APK。
10.如权利要求9所述的装置,其特征在于,所述指定文件包括可执行文件,所述病毒数据库生成模块包括:
源文件扫描子模块,用于扫描源Android安装包APK中的可执行文件;
特定数据提取子模块,用于提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
第一特征码生成子模块,用于在所述特定数据包含病毒信息时,根据所述特定数据生成病毒特征码;
特征码保存子模块,用于将所述病毒特征码保存至病毒数据库中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510146262.3A CN104715199A (zh) | 2012-03-21 | 2012-03-21 | 一种病毒apk的识别方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510146262.3A CN104715199A (zh) | 2012-03-21 | 2012-03-21 | 一种病毒apk的识别方法及装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210076889.2A Division CN102663286B (zh) | 2012-03-21 | 2012-03-21 | 一种病毒apk的识别方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104715199A true CN104715199A (zh) | 2015-06-17 |
Family
ID=53414517
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510146262.3A Pending CN104715199A (zh) | 2012-03-21 | 2012-03-21 | 一种病毒apk的识别方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104715199A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106709341A (zh) * | 2016-06-30 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 一种针对文件包的病毒处理方法及装置 |
CN106855926A (zh) * | 2015-12-08 | 2017-06-16 | 武汉安天信息技术有限责任公司 | 安卓系统下的恶意代码检测方法、系统及一种移动终端 |
CN107315955A (zh) * | 2016-04-27 | 2017-11-03 | 百度在线网络技术(北京)有限公司 | 文件安全性识别方法和装置 |
CN107977574A (zh) * | 2017-12-19 | 2018-05-01 | 深圳豪客互联网有限公司 | 病毒识别方法和装置 |
CN109214179A (zh) * | 2017-06-30 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 一种程序模块安全检测方法及装置 |
CN109472137A (zh) * | 2018-10-31 | 2019-03-15 | 北京羽扇智信息科技有限公司 | 非法操作的检测方法及装置 |
CN109922037A (zh) * | 2018-12-28 | 2019-06-21 | 深圳豪客互联网有限公司 | 一种应用程序安全识别方法及装置 |
CN110502900A (zh) * | 2019-08-26 | 2019-11-26 | Oppo广东移动通信有限公司 | 一种检测方法、终端、服务器及计算机存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567118A (zh) * | 2004-03-29 | 2005-01-19 | 四川大学 | 一种计算机病毒检测和识别系统及方法 |
US20110145920A1 (en) * | 2008-10-21 | 2011-06-16 | Lookout, Inc | System and method for adverse mobile application identification |
CN102254113A (zh) * | 2011-06-27 | 2011-11-23 | 深圳市安之天信息技术有限公司 | 一种检测和拦截移动终端恶意代码的方法及系统 |
CN102346829A (zh) * | 2011-09-22 | 2012-02-08 | 重庆大学 | 基于集成分类的病毒检测方法 |
-
2012
- 2012-03-21 CN CN201510146262.3A patent/CN104715199A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567118A (zh) * | 2004-03-29 | 2005-01-19 | 四川大学 | 一种计算机病毒检测和识别系统及方法 |
US20110145920A1 (en) * | 2008-10-21 | 2011-06-16 | Lookout, Inc | System and method for adverse mobile application identification |
CN102254113A (zh) * | 2011-06-27 | 2011-11-23 | 深圳市安之天信息技术有限公司 | 一种检测和拦截移动终端恶意代码的方法及系统 |
CN102346829A (zh) * | 2011-09-22 | 2012-02-08 | 重庆大学 | 基于集成分类的病毒检测方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106855926A (zh) * | 2015-12-08 | 2017-06-16 | 武汉安天信息技术有限责任公司 | 安卓系统下的恶意代码检测方法、系统及一种移动终端 |
CN106855926B (zh) * | 2015-12-08 | 2019-08-20 | 武汉安天信息技术有限责任公司 | 安卓系统下的恶意代码检测方法、系统及一种移动终端 |
CN107315955A (zh) * | 2016-04-27 | 2017-11-03 | 百度在线网络技术(北京)有限公司 | 文件安全性识别方法和装置 |
CN106709341A (zh) * | 2016-06-30 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 一种针对文件包的病毒处理方法及装置 |
CN106709341B (zh) * | 2016-06-30 | 2019-01-29 | 腾讯科技(深圳)有限公司 | 一种针对文件包的病毒处理方法及装置 |
CN109214179A (zh) * | 2017-06-30 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 一种程序模块安全检测方法及装置 |
CN107977574A (zh) * | 2017-12-19 | 2018-05-01 | 深圳豪客互联网有限公司 | 病毒识别方法和装置 |
CN109472137A (zh) * | 2018-10-31 | 2019-03-15 | 北京羽扇智信息科技有限公司 | 非法操作的检测方法及装置 |
CN109922037A (zh) * | 2018-12-28 | 2019-06-21 | 深圳豪客互联网有限公司 | 一种应用程序安全识别方法及装置 |
CN110502900A (zh) * | 2019-08-26 | 2019-11-26 | Oppo广东移动通信有限公司 | 一种检测方法、终端、服务器及计算机存储介质 |
CN110502900B (zh) * | 2019-08-26 | 2022-07-05 | Oppo广东移动通信有限公司 | 一种检测方法、终端、服务器及计算机存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102663286B (zh) | 一种病毒apk的识别方法及装置 | |
CN102708320B (zh) | 一种病毒apk的识别方法及装置 | |
CN102663285B (zh) | 一种apk病毒特征码的提取方法及装置 | |
CN104715199A (zh) | 一种病毒apk的识别方法及装置 | |
Fazzini et al. | Automated API-usage update for Android apps | |
US10114946B2 (en) | Method and device for detecting malicious code in an intelligent terminal | |
KR102415971B1 (ko) | 악성 모바일 앱 감지 장치 및 방법 | |
KR101246623B1 (ko) | 악성 애플리케이션 진단 장치 및 방법 | |
Chen et al. | Detecting android malware using clone detection | |
Crussell et al. | Andarwin: Scalable detection of android application clones based on semantics | |
CN107786564B (zh) | 基于威胁情报的攻击检测方法、系统及电子设备 | |
US20180181482A1 (en) | Monitoring Activity of Software Development Kits Using Stack Trace Analysis | |
CN101924761A (zh) | 一种依据白名单进行恶意程序检测的方法 | |
CN102867144B (zh) | 一种用于检测和清除计算机病毒的方法和装置 | |
CN104715200A (zh) | 一种病毒apk的识别方法及装置 | |
CN114386032A (zh) | 电力物联网设备的固件检测系统及方法 | |
Liao et al. | Smartdagger: a bytecode-based static analysis approach for detecting cross-contract vulnerability | |
CN114462044A (zh) | 一种基于污点分析的uefi固件漏洞静态检测方法及装置 | |
CN109241707A (zh) | 应用程序的混淆方法、装置和服务器 | |
CN111931185A (zh) | 一种Java反序列化漏洞检测方法及组件 | |
CN106709350B (zh) | 一种病毒检测方法及装置 | |
Dam et al. | Learning android malware | |
EP3522488B1 (en) | Automatic decoy derivation through patch transformation | |
CN109670317B (zh) | 一种基于原子控制流图的物联网设备继承性漏洞挖掘方法 | |
Xie et al. | Precise and Efficient Patch Presence Test for Android Applications against Code Obfuscation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150617 |
|
RJ01 | Rejection of invention patent application after publication |