著录项信息
专利名称 | 一种病毒APK的识别方法及装置 |
申请号 | CN201210137453.X | 申请日期 | 2012-05-04 |
法律状态 | 授权 | 申报国家 | 暂无 |
公开/公告日 | 2012-10-03 | 公开/公告号 | CN102708320A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/56 | IPC分类号 | G;0;6;F;2;1;/;5;6查看分类表>
|
申请人 | 奇智软件(北京)有限公司 | 申请人地址 | 北京市西城区新街口外大街28号D座112室(德胜园区)
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司 | 当前权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司 |
发明人 | 张旭;王栒 |
代理机构 | 北京润泽恒知识产权代理有限公司 | 代理人 | 赵娟 |
摘要
本申请提供了一种病毒APK的识别方法和装置,其中,所述方法包括:预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;检测目标Android安装包APK的指定文件中是否包含病毒特征码,若是,则统计所述病毒特征码对应的权重值之和;若所述权重值之和大于等于某病毒判定阈值,则判定所述目标Android安装包APK中存在相应类型的病毒。本申请可以快速、准确、有效地识别出病毒APK及其变种,提高APK应用的安全性。
1.一种病毒APK的识别方法,其特征在于,包括:
预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;
检查目标Android安装包APK是否变更,和/或,是否缓存过扫描结果;若目标Android安装包APK未变更,和/或,缓存过扫描结果,则直接输出扫描结果;反之,对目标Android安装包APK进行黑名单扫描、白名单扫描中的至少一种扫描;
当扫描到目标Android安装包APK在黑名单中,或者,当扫描到到目标Android安装包APK未在白名单中时,检测目标Android安装包APK的指定文件中是否包含病毒特征码,若是,则统计所述病毒特征码对应的权重值之和;
若所述权重值之和大于等于某病毒判定阈值,则判定所述目标Android安装包APK中存在相应类型的病毒,以获得扫描结果;
将所述扫描结果增加至缓存中;
当扫描到目标Android安装包APK在白名单中时,则输出扫描结果安全并增加至缓存;
其中,所述指定文件包括可执行文件,所述预置病毒数据库的步骤包括:
扫描源Android安装包APK中的可执行文件;
提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
若是,则根据所述特定数据生成病毒特征码;
为所述病毒特征码分配权重值;
将所述病毒特征码及对应的权重值保存至病毒数据库中。
2.如权利要求1所述的方法,其特征在于,还包括:
生成所述目标Android安装包APK中存在该类型病毒的提示信息。
3.如权利要求1所述的方法,其特征在于,还包括:
若所述权重值之和小于某病毒判定阈值,则判定所述目标Android安装包APK为病毒APK。
4.如权利要求3所述的方法,其特征在于,还包括:
生成所述目标Android安装包APK为病毒APK的提示信息。
5.如权利要求2或4所述的方法,其特征在于,还包括:
调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。
6.如权利要求1所述的方法,其特征在于,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
7.如权利要求6所述的方法,其特征在于,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;
所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;
所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;
所述将病毒特征码及对应的权重值保存至病毒数据库中的步骤包括:
将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值分别保存在数据库中不同的存储区域;
或者,
将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值保存在数据库中,并分别标记分类标签。
8.如权利要求7所述的方法,其特征在于,所述检测目标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中的指定文件中包含病毒特征码。
9.如权利要求1所述的方法,其特征在于,所述指定文件还包括文本文件,所述预置病毒数据库的步骤还包括:
提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
若是,则根据所述linux命令生成病毒特征码。
10.如权利要求9所述的方法,其特征在于,所述病毒特征码还包括linux命令特征码,所述检测目标Android安装包APK中的指定文件中是否包含病毒特征码的步骤还包括:
定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
11.如权利要求8所述的方法,其特征在于,所述可执行文件中常量池中的常量包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature。
12.一种病毒APK的识别装置,其特征在于,包括:
病毒数据库生成模块,用于预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;
病毒检测模块,用于检查目标Android安装包APK是否变更,和/或,是否缓存过扫描结果;若目标Android安装包APK未变更,和/或,缓存过扫描结果,则直接输出扫描结果;
反之,对目标Android安装包APK进行黑名单扫描、白名单扫描中的至少一种扫描;
当扫描到目标Android安装包APK在黑名单中,或者,当扫描到到目标Android安装包APK未在白名单中时,检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;若是,则调用病毒权重值统计模块;
病毒权重值统计模块,用于统计所述病毒特征码对应的权重值之和;
阈值判断模块,用于判断所述权重值之和是否大于等于某病毒判定阈值;若是,则调用病毒判定模块;
病毒判定模块,用于判定所述目标Android安装包APK中存在相应类型的病毒,以获得扫描结果;将所述扫描结果增加至缓存中;
当扫描到目标Android安装包APK在白名单中时,则输出扫描结果安全并增加至缓存;
其中,所述指定文件包括可执行文件,所述病毒数据库生成模块包括:
源文件扫描子模块,用于扫描源Android安装包APK中的可执行文件;
特定数据提取子模块,用于提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;
第一特征码生成子模块,用于在所述特定数据包含病毒信息时,根据所述特定数据生成病毒特征码;
权重值分配模块,用于为所述病毒特征码分配权重值;
特征码保存子模块,用于将所述病毒特征码及对应的权重值保存至病毒数据库中。
13.如权利要求12所述的装置,其特征在于,还包括:
第一提示信息生成模块,与所述病毒判定模块连接,用于生成所述目标Android安装包APK中存在该类型病毒的提示信息。
14.如权利要求12所述的装置,其特征在于,还包括:
病毒识别模块,用于在所述权重值之和小于某病毒判定阈值时,判定所述目标Android安装包APK为病毒APK。
15.如权利要求14所述的装置,其特征在于,还包括:
第二提示信息生成模块,与所述病毒识别模块连接,用于生成所述目标Android安装包APK为病毒APK的提示信息。
16.如权利要求13或15所述的装置,其特征在于,还包括:
病毒查杀模块,用于调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。
17.如权利要求12所述的装置,其特征在于,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
18.如权利要求17所述的装置,其特征在于,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;
所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;
所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;
所述特征码保存子模块进一步包括:
分区保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值分别保存在数据库中不同的存储区域;
或者,
标签保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值保存在数据库中,并分别标记分类标签。
19.如权利要求18所述的装置,其特征在于,所述病毒检测模块包括:
第一检测子模块,用于定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第二检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第三检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第四检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第五检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;
和/或,
第六检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
20.如权利要求16所述的装置,其特征在于,所述指定文件还包括文本文件,所述病毒数据库生成模块还包括:
linux命令提取子模块,用于提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;
第二特征码生成子模块,用于在所述linux命令包含病毒信息时,根据所述linux命令生成病毒特征码。
21.如权利要求20所述的装置,其特征在于,所述病毒特征码还包括linux命令特征码,所述病毒检测模块还包括:
第七检测子模块,用于定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。
一种病毒APK的识别方法及装置\n技术领域\n[0001] 本申请涉及网络信息安全的技术领域,特别是涉及一种病毒APK的识别方法,以及,一种病毒APK的识别装置。\n背景技术\n[0002] Android是一种以Linux为基础的开放源码操作系统,主要使用于手机等移动终端,目前尚未有统一中文名称。Android平台由操作系统、中间件、用户界面和应用软件组成。\n[0003] 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文件有区别。\n[0004] 具体而言,APK文件的结构如下表所示:\n[0005] \n[0006] 在具体应用时,APK可以通过数据线或者无线数据传输的方式导入移动终端,或者,直接通过market(工具软件,如安卓市场)、网页等方式下载安装。随着Android终端的普及和发展,各种各样的APK应运而生,这其中就包括了病毒APK,例如,一些APK通过诸如短信定制付费服务、拨打付费电话、备份用户手机中的敏感数据至特定服务器等恶意行为来损害用户的权益。\n[0007] 目前,已经出现了一些专门针对移动终端的安全软件(如手机杀毒软件)来对这些病毒APK进行查杀。这些现有的安全软件查杀病毒APK的方法主要有以下两种:\n[0008] 第一种是通过APK文件的HASH、签名、Package名字来对病毒APK进行识别,其原理是通过对APK使用HASH算法提取KEY,之后即可依据此KEY去识别病毒APK,或者,通过病毒APK制作者的APK数字签名、包名等对其进行识别。\n[0009] 然而,上述现有的基于APK文件的HASH进行识别的方式,很容易通过重新混淆、或者,在APK文件中添加新的资源文件乃至修改代码等方式,使通过HASH算法提取KEY发生改变,进而导致无法识别;上述现有的基于签名的识别方式可以通过更换签名的方式绕过;\n上述现有的基于Package名字来识别的方式也可通过修改包名的方式来绕过。而且更改混淆方式,修改APK文件(添加删除资源,代码等)或者更换签名对病毒制造者而言都很容易,所以病毒制造者很轻易地就可以制造新的病毒变种从而绕过安全软件的识别。\n[0010] 第二种是通过APK文件中的classes.dex中的类名对其进行识别,其原理是通过分析classes.dex中的类然后从中提取出若干个类的名字作为病毒特征码,之后即可解析病毒APK的classes.dex文件,看其中是否包含特定的类名来对其进行识别。\n[0011] 然而,这种通过扫描类名来进行识别的方式,一方面因为仅仅检查类名从而容易误报,另一方面也很容易被病毒制造者通过混淆或者直接修改类名而绕过。\n[0012] 因此,目前需要本领域技术人员解决的一个技术问题就是,提供一种病毒APK的识别机制,用以快速、准确、有效地识别出病毒APK及其变种,提高APK应用的安全性。\n发明内容\n[0013] 本申请提供一种病毒APK的识别方法,用以快速、准确、有效地识别出病毒APK及其变种,提高APK应用的安全性。\n[0014] 本申请还提供了一种病毒APK的识别装置,用以保证上述方法在实际中的应用及实现。\n[0015] 为了解决上述问题,本申请公开了一种病毒APK的识别方法,包括:\n[0016] 预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;\n[0017] 检测目标Android安装包APK的指定文件中是否包含病毒特征码,若是,则统计所述病毒特征码对应的权重值之和;\n[0018] 若所述权重值之和大于等于某病毒判定阈值,则判定所述目标Android安装包APK中存在相应类型的病毒。\n[0019] 优选地,所述的方法,还包括:\n[0020] 生成所述目标Android安装包APK中存在该类型病毒的提示信息。\n[0021] 优选地,所述的方法,还包括:\n[0022] 若所述权重值之和小于某病毒判定阈值,则判定所述目标Android安装包APK为病毒APK。\n[0023] 优选地,所述的方法,还包括:\n[0024] 生成所述目标Android安装包APK为病毒APK的提示信息。\n[0025] 优选地,所述的方法,还包括:\n[0026] 调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。\n[0027] 优选地,所述指定文件包括可执行文件,所述预置病毒数据库的步骤包括:\n[0028] 扫描源Android安装包APK中的可执行文件;\n[0029] 提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;\n[0030] 若是,则根据所述特定数据生成病毒特征码;\n[0031] 为所述病毒特征码分配权重值;\n[0032] 将所述病毒特征码及对应的权重值保存至病毒数据库中。\n[0033] 优选地,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。\n[0034] 优选地,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;\n[0035] 所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;\n[0036] 所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;\n[0037] 所述将病毒特征码及对应的权重值保存至病毒数据库中的步骤包括:\n[0038] 将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值分别保存在数据库中不同的存储区域;\n[0039] 或者,\n[0040] 将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值保存在数据库中,并分别标记分类标签。\n[0041] 优选地,所述检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码的步骤包括:\n[0042] 定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0043] 和/或,\n[0044] 定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0045] 和/或,\n[0046] 定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0047] 和/或,\n[0048] 定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0049] 和/或,\n[0050] 定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0051] 和/或,\n[0052] 定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。\n[0053] 优选地,所述指定文件还包括文本文件,所述预置病毒数据库的步骤还包括:\n[0054] 提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;\n[0055] 若是,则根据所述linux命令生成病毒特征码。\n[0056] 优选地,所述病毒特征码还包括linux命令特征码,所述检测目标Android安装包APK中的指定文件中是否包含病毒特征码的步骤还包括:\n[0057] 定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。\n[0058] 优选地,所述可执行文件中常量池中的常量包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature。\n[0059] 本申请实施例还公开了一种病毒APK的识别装置,包括:\n[0060] 病毒数据库生成模块,用于预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;\n[0061] 病毒检测模块,用于检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;若是,则调用病毒权重值统计模块;\n[0062] 病毒权重值统计模块,用于统计所述病毒特征码对应的权重值之和;\n[0063] 阈值判断模块,用于判断所述权重值之和是否大于等于某病毒判定阈值;若是,则调用病毒判定模块;\n[0064] 病毒判定模块,用于判定所述目标Android安装包APK中存在相应类型的病毒。\n[0065] 优选地,所述的装置,还包括:\n[0066] 第一提示信息生成模块,与所述病毒判定模块连接,用于生成所述目标Android安装包APK中存在该类型病毒的提示信息。\n[0067] 优选地,所述的装置,还包括:\n[0068] 病毒识别模块,用于在所述权重值之和小于某病毒判定阈值时,判定所述目标Android安装包APK为病毒APK。\n[0069] 优选地,所述的装置,还包括:\n[0070] 第二提示信息生成模块,与所述病毒识别模块连接,用于生成所述目标Android安装包APK为病毒APK的提示信息。\n[0071] 优选地,所述的装置,还包括:\n[0072] 病毒查杀模块,用于调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。\n[0073] 优选地,所述指定文件包括可执行文件,所述病毒数据库生成模块包括:\n[0074] 源文件扫描子模块,用于扫描源Android安装包APK中的可执行文件;\n[0075] 特定数据提取子模块,用于提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;\n[0076] 第一特征码生成子模块,用于在所述特定数据包含病毒信息时,根据所述特定数据生成病毒特征码;\n[0077] 权重值分配模块,用于为所述病毒特征码分配权重值;\n[0078] 特征码保存子模块,用于将所述病毒特征码及对应的权重值保存至病毒数据库中。\n[0079] 优选地,所述可执行文件包括Dex文件,所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。\n[0080] 优选地,所述病毒特征码包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;\n[0081] 所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;\n[0082] 所述指令特征码、指令特征码序列根据包含病毒信息的操作指令直接生成,或者,根据包含病毒信息的操作码和操作数的字符串或通配符生成;\n[0083] 所述特征码保存子模块进一步包括:\n[0084] 分区保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值分别保存在数据库中不同的存储区域;\n[0085] 或者,\n[0086] 标签保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,对应的权重值保存在数据库中,并分别标记分类标签。\n[0087] 优选地,所述病毒检测模块包括:\n[0088] 第一检测子模块,用于定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0089] 和/或,\n[0090] 第二检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0091] 和/或,\n[0092] 第三检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0093] 和/或,\n[0094] 第四检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0095] 和/或,\n[0096] 第五检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0097] 和/或,\n[0098] 第六检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。\n[0099] 优选地,所述指定文件还包括文本文件,所述病毒数据库生成模块还包括:\n[0100] linux命令提取子模块,用于提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;\n[0101] 第二特征码生成子模块,用于在所述linux命令包含病毒信息时,根据所述linux命令生成病毒特征码。\n[0102] 优选地,所述病毒特征码还包括linux命令特征码,所述病毒检测模块还包括:\n[0103] 第七检测子模块,用于定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。\n[0104] 与现有技术相比,本申请具有以下优点:\n[0105] 本申请通过扫描分析源APK文件中的指定文件,如可执行文件、文本文件等,针对包含病毒信息的指令、常量或头部信息按预置规则生成相应的病毒特征码,并针对各病毒特征码分配权重值,汇编成病毒数据库;之后病毒APK识别的过程中,检测目标APK文件中的指定文件,判断该指定文件中是否存在相应的病毒特征码,若存在则累计所述病毒特征码的权重值,若大于等于某病毒判定阈值,则判定所述目标APK中存在相应类型的病毒。\n应用本申请实施例,无论病毒制造者如何通过修改混淆方式、增加资源、修改代码(改变类名、函数名等)、更换签名、包名等方式来制作病毒变种其病毒APK的特征码都不会变,从而本申请可以快速、准确、有效地识别出病毒APK及其变种,而且有针对性的更改程序逻辑以及特定字符串(恶意号码、恶意网址)来制作病毒变种相对病毒制造者而言是比较麻烦、耗时的,从而这种方式也能有效的提高病毒制作者制作病毒变种的难度,提高APK应用的安全性。\n[0106] 再者,本申请能通过不同病毒类型阈值的比对进一步判定APK的病毒类型,从而便于更有针对性地对病毒APK进行后续处理,进一步提高APK识别的准确性。\n附图说明\n[0107] 图1是本申请的一种病毒APK的识别方法实施例1的流程图;\n[0108] 图2是本申请的一种病毒APK的识别方法实施例2的流程图;\n[0109] 图3是本申请的一种病毒APK的识别装置实施例的结构框图。\n具体实施方式\n[0110] 为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。\n[0111] 本申请实施例的核心构思之一在于,通过扫描分析源APK文件中的指定文件,如可执行文件、文本文件等,针对包含病毒信息的指令、常量或头部信息按预置规则生成相应的病毒特征码,并针对各病毒特征码分配权重值,汇编成病毒数据库;之后病毒APK识别的过程中,检测目标APK文件中的指定文件,判断该指定文件中是否存在相应的病毒特征码,若存在则累计所述病毒特征码的权重值,若大于等于某病毒判定阈值,则判定所述目标APK中存在相应类型的病毒。\n[0112] 参考图1,示出了本申请的一种病毒APK的识别方法实施例1的步骤流程图,具体可以包括如下步骤:\n[0113] 步骤101、预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;\n[0114] 在本申请的一种优选实施例中,所述指定文件包括可执行文件,可以通过如下子步骤预置所述病毒数据库:\n[0115] 子步骤S11、扫描源Android安装包APK中的可执行文件;\n[0116] 子步骤S12、提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;\n[0117] 子步骤S13、若是,则根据所述特定数据生成病毒特征码;\n[0118] 子步骤S14、为所述病毒特征码分配权重值;\n[0119] 子步骤S15、将所述病毒特征码及对应的权重值保存至病毒数据库中。\n[0120] 例如,病毒数据库中包括的病毒特征码及对应的权重值如下表1所示:\n[0121] 表1:\n[0122] \n[0123] \n[0124] 对于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进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。\n[0125] 更为优选的是,所述可执行文件还可以包括扩展名为.jar的文件。Android安装包中的JAR文件其实就是Dex文件,只不过其扩展名为.jar,对于APK中除classes.dex之外的其他文件,只要判定其为Dex文件即可决定是否进行扫描。\n[0126] 在实际应用中,所述Dex文件还可以包括其它Dex格式的文件。\n[0127] 在本申请的一种优选实施例中,所述可执行文件中的特定数据可以按如下顺序来提取:\n[0128] 1)可执行文件常量池中的常量;\n[0129] 具体而言,所述指定文件中常量池中的常量可以包括字符串strings、类型types、域fields和方法methods中的常量,所述可执行文件常量池中的常量,可以通过以下子步骤判断是否包含病毒信息:\n[0130] 子步骤S21、判断所述字符串strings中的常量是否包含预定义的恶意网址信息、恶意文件名或恶意号码信息等恶意信息;\n[0131] 和/或,\n[0132] 子步骤S22、判断所述类型types、域fields和方法methods中的常量是否调用自定义的类名、自定义的函数名或Android系统SDK类名、Android系统函数名。\n[0133] 在具体应用中,可以直接将所述常量中的病毒信息作为病毒特征码,在实施例中生成的病毒特征码包括常量特征码、类名函数名特征码。\n[0134] 例如,某个APK的classes.dex文件中的常量池中包含如下字符串:\n[0135] com.noshufou.android.su\n[0136] /system/app/com.google.update.apk\n[0137] 在判定其为病毒信息后,可直接将其作为病毒特征码并分配对应的权重值后保存至病毒数据库中。\n[0138] 例如,某个APK的classes.dex文件中的常量池中包含如下method:\n[0139] Lcom/android/main/SmsReceiver;\n[0140] Lcom/android/main/ActionReceiver;\n[0141] 在判定其为病毒信息后,可直接将其作为病毒特征码并分配对应的权重值后保存至病毒数据库中。\n[0142] 例如,某个APK的classes.dex文件中的常量池中包含如下type:\n[0143] Lcom/androidkernel/flash/Main$1;\n[0144] 在判定其为病毒信息后,可直接将其作为病毒特征码并分配对应的权重值后保存至病毒数据库中。\n[0145] 例如,某个APK的classes.dex文件中的常量池中包含如下field:\n[0146] Lcom/androidkernel/flash/b/br$1;.this$0:Lcom/androidkernel/flash/b/br;\n[0147] 在判定其为病毒信息后,可直接将其作为病毒特征码并分配对应的权重值后保存至病毒数据库中。\n[0148] 2)可执行文件中的操作指令;\n[0149] Dalvik VM是基于寄存器设计的,程序中使用的数据如strings,types,fields和methods保存在专门的数据存储区(常量池)中,在程序当中通过对应的索引来引用,而字符文字常量则直接保存在instructions(操作指令)中,其操作码(opcode)分为两类:\n[0150] 一类将指定的数据放入寄存器,如参见如下例1至例4:\n[0151] 例1:\n[0152] 1303 6100 |0000:const/16v3,#int 97//#61\n[0153] 将整数97放入寄存器v3中。\n[0154] 例2:\n[0155] 1700 0000 0040 |0049:const-wide/32 v0,#float 2.000000 //#40000000[0156] 将浮点数2.000000放入寄存器v0中。\n[0157] 例3:\n[0158] 1a00 7d00 |000b:const-string v0,"%.2fMB"//\n[0159] string@007d\n[0160] 将字符串"%.2fMB"放入寄存器v0中。\n[0161] 例4:\n[0162] 1c03 6e04 |0015: const-class v3,\n[0163] Lcom/qihoo360/mobilesafe/service/NetTrafficService;//type@046e[0164] 将类com.qihoo360.mobilesafe.service.NetTrafficService放入寄存器v3中。\n[0165] 另外一类则基于寄存器进行操作,如参见如下例5至例10:\n[0166] 例5:\n[0167] 3100 0305 |0042:cmp-long v0,\n[0168] v3,v5\n[0169] 比较寄存器v3和v5中的long值,将比较结果存入寄存器v0。\n[0170] 例6:\n[0171] 3221 0400 |001a:if-eq v1,v2, 001e//+0004\n[0172] 条件if,根据v1和v2是否相等来决定执行流程。\n[0173] 例7:\n[0174] 3800 1500 |001e:if-eqz v0, 0033//+0015\n[0175] 条件if,判断v0是否等于0来决定执行流程。\n[0176] 例8:\n[0177] 6e10 0e29 0500 |0006:invoke-virtual{v5}, Ljava/io/File;.length:()J//method@290e\n[0178] 调用File的length()函数。\n[0179] 例9:\n[0180] 7010 042a 0800 |011d: invoke-direct {v8},\n[0181] Ljava/lang/StringBuilder;.:()V//method@2a04\n[0182] 调用StringBuilder的init函数。\n[0183] 例10:\n[0184] b021 |0035:add-int/2addr v1,v2\n[0185] 将v1+v2的结果保存在v1中。\n[0186] APK中的classes.dex文件和JAR文件中的用户类名,函数名,字符串会受到混淆或者修改而发生改变,但Dalvik VM的指令以及对Android系统SDK提供的类的调用不会受到用户类名,函数名,变量名等被混淆或者修改的影响,因此可以通过一组有序的特定指令来识别APK。因为Dalvik VM是基于寄存器的,因此其指令本身只能操作寄存器,字符文字常量,数据存储区,而寄存器地址是可变的,因此识别时要模糊匹配也即通过识别指令中的固定部分——opcode及其相关的字符文字常量参数或者数据存储区中的strings,types,fields和methods等,当然也可以直接使用指令及其操作数本身作为病毒特征码。\n[0187] 在本申请的一种优选实施例中,可以通过如下子步骤判断所述操作指令是否包含病毒信息:\n[0188] 子步骤S31、判断所述操作数中是否包含预定义的非法操作数;\n[0189] 和/或,\n[0190] 子步骤S32、判断所述操作码和操作数的组合是否符合预定义的非法搭配规则。\n[0191] 在本申请的一种优选实施例中,可以通过如下子步骤根据所述操作指令生成病毒特征码:\n[0192] 子步骤S41、将所述操作指令本身作为病毒特征码;\n[0193] 和/或,\n[0194] 子步骤S42、将所述操作指令的操作码,以及,操作数的字符串或通配符作为病毒特征码。\n[0195] 应用本实施例生成的病毒特征码包括操作数特征码、指令特征码、指令特征码序列。\n[0196] 特征码生成方案一:\n[0197] 直接使用APK中的classes.dex文件和JAR文件中的特定指令集本身作为病毒特征码。\n[0198] 例如,上述例1的特征码可以为1303 6100,例2的特征码可以为17000000 0040,例3的特征码可以为1a00 7d00,例4的特征码可以为1c036e04,例5的特征码可以为3100 \n0305,例6的特征码可以为3221 0400,例7的特征码可以为3800 1500,例8的特征码可以为6e10 0e29 0500,例9的特征码可以为7010 042a 0800,例10的特征码可以为b021。\n[0199] 特征码生成方案二:\n[0200] 使用APK中的classes.dex文件和JAR文件中的特定opcode及其操作数的字符串或通配符作为病毒特征码。\n[0201] 例如,上述例1的特征码可以为13$*(其中*代表模糊匹配,下同,需要说明的是,此处的“*”仅用作举例,实际中可以使用任意字符),例2的特征码可以为17$*,例\n3的特征码可以为1a$,例4的特征码可以为1c$Lcom/qihoo360/mobilesafe/service/NetTrafficService,例5的特征码可以为31$*,例6的特征码可以为32$*,例7的特征码可以为38$*,例8的特征码可以为6e$Ljava/io/File;.length:(),例9的特征码可以为\n70$Ljava/lang/StringBuilder;.,例10的特征码可以为b0$*。\n[0202] 特征码选择方案三:\n[0203] 混合使用上述方案一和方案二。即将上述APK中的classes.dex中的特定指令集本身,以及,APK中的classes.dex中的特定opcode及其操作数的字符串或通配符全部作为病毒特征码。\n[0204] 需要说明的是,在本申请实施例中,采用$为分隔符,在实际中还可采用任意其他字符作为分隔符;在本申请实施例中,采用*作为通配符,在实际中还可采用任意其他字符作为通配符。\n[0205] 为使本领域技术人员更好地理解上述特征码生成的过程,以下通过一个具体示例进行说明。\n[0206] 针对提取classes.dex中的常量池(string、type、field和meth)当中的常量提取的特征码如下:例如,某病毒在其字符串常量池当中包括以下特征字符串:\n[0207] zjphonecall.txt和zjsms.txt,在这2个文件中包括了恶意电话号码以及特服短信号码则可提取其作为病毒特征码。\n[0208] 针对反汇编classes.dex提取的特征码如下:\n[0209] 例如,病毒X卧底.apk中包含以下指令用以备份用户隐私数据至http://www.mybackup.me,按照其出现的先后顺序列举如下:\n[0210] 2200 f600 |0000:new-instance v0, Ljava/lang/StringBuilder;\n[0211] //type@00f6\n[0212] 提取其病毒特征码为:2200f600或22$Ljava/lang/StringBuilder[0213] 7010 9804 0000 |0002: invoke-direct {v0},\n[0214] Ljava/lang/StringBuilder;.:( )V//method@0498\n[0215] 提取其病毒特征码为:701098040000或\n[0216] 70$Ljava/lang/StringBuilder;.\n[0217] 1a01 5506 |0005:const-string v1,"http://www.mybackup.me"//string@0655\n[0218] 提取其病毒特征码为:701098040000或1a$http://www.mybackup.me[0219] 6e20 9e04 1000 |0007:invoke-virtual{v0,v1},\n[0220] Ljava/lang/StringBuilder;.append:(Ljava/lang/String;)\n[0221] Ljava/lang/StringBuilder;//method@049e\n[0222] 提取其病毒特征码为:6e209e041000或6e$Ljava/lang/StringBuilder;.append[0223] 3902 0900 |0005:if-nez v2,000e//+0009\n[0224] 提取其病毒特征码为:39020900或39$*\n[0225] 0c02 |0003:move-result-object v2\n[0226] 提取其病毒特征码为:0c02或0c$*\n[0227] 最终获得的特征码为:\n[0228] 特征码选择方案一:\n[0229] 2200f6007010980400007010980400006e209e041000390209000c02[0230] 特征码选择方案二:\n[0231] 22$Ljava/lang/StringBuilder$70$Ljava/lang/\nStringBuilder;.$1a$http://www.mybackup.me$6e$Ljava/lang/StringBuilder;.append$39$*$0c$*\n[0232] 特征码选择方案三:\n[0233] 22$Ljava/lang/StringBuilder$701098040000$1a$http://www.mybackup.me$6e$Ljava/lang/StringBuilder;.append$39$*$0c02\n[0234] 又如,某个APK的classes.dex文件中的Instructions(操作指令)如下所示:\n[0235] 1a0c bb08 |009b:const-string v12,"tiger"//string@08bb[0236] 1a0d 1e03 |009d:const-string v13,"P5"//string@031e[0237] 7120 1404 dc00 |009f:invoke-static{v12,v13},\n[0238] Lcom/androidkernel/flash/util/LogUtil;.i:\n[0239] (Ljava/lang/String;Ljava/lang/String;)V//method@0414\n[0240] 2205 9700 |00a2:new-instance\n[0241] v5,Lcom/androidkernel/flash/http/base/DlStruct;//type@0097[0242] 7010 1603 0500 |00a4:invoke-direct{v5},\n[0243] Lcom/androidkernel/flash/http/base/DlStruct;.:( )V//method@0316[0244] 1a0c 7200 |00a7:const-string v12,"AA"//string@0072[0245] 7020 f402 ce00 |00a9:invoke-direct{v14,v12},\n[0246] Lcom/androidkernel/flash/helper/Tiger;.getUrl:(Ljava/lang/String;)[0247] Ljava/lang/String;//method@02f4\n[0248] 0c0b |00ac:move-result-object v11\n[0249] 当判定上述操作码和操作数的搭配符合预定义的非法搭配规则,或者,判定上述操作数中包含预定义的非法操作数时,可按如下方式生成特征码:\n[0250] 方式一:\n[0251] 1a0cbb081a0d1e0371201404dc00220597007010160305001a0c72007020f402ce000c0b\n[0252] 方式二:\n[0253] 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;.:( )V$1a$AA$70$Lcom/androidkernel/flash/helper/Tiger;.getUrl:(Ljava/lang/String;)Ljava/lang/String;$0c$*\n[0254] 方式三:\n[0255] 1a0cbb08$1a$P5$71201404dc00$22$*$70$Lcom/androidkernel/flash/http/base/DlStruct;.:( )V$1a$AA$70$Lcom/androidkernel/flash/helper/Tiger;.getUrl:(Ljava/lang/String;)Ljava/lang/String;$0c$*\n[0256] 3)可执行文件的头部信息。\n[0257] 在具体实现中,所述可执行文件的头部信息中包括摘要信息checksum和/或签名信息Signature,在这种情况下,可以通过判断所述摘要信息checksum和/或签名信息Signature中是否包含预定义的非法字符串,来确定所述头部信息中是否包含病毒信息。\n[0258] 在具体应用中,也可以直接将所述摘要信息checksum和/或签名信息Signature作为病毒特征码。即在本实施例中,所述病毒特征码包括头部信息特征码。\n[0259] 例如,APK中的classes.dex文件头部信息header的checksum为:11f26cac;\nSignature为:2911621AD071F675ADF0F590C3F1AFB5443BEBBE,在判定其为木马病毒后,直接将11f26cac和2911621AD071F675ADF0F590C3F1AFB5443BEBBE提取为病毒特征码,并将所述病毒特征码保存至数据库中。\n[0260] 作为本申请实施例具体应用的一种示例,所述将病毒特征码保存至病毒数据库中的步骤可以包括如下子步骤:\n[0261] 子步骤S51、将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,上述各特征码对应的权重值分别保存在数据库中不同的存储区域;\n[0262] 或者,\n[0263] 子步骤S52、将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码,以及,上述各特征码对应的权重值保存在数据库中,并分别标记分类标签。\n[0264] 当然,上述保存病毒特征码的方式仅仅用作示例,本领域技术人员根据实际情况采用任一种保存方式都是可行的,本申请对此无需加以限制。\n[0265] 步骤102、检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码,所述指定文件包括可执行文件;\n[0266] 作为本申请实施例具体应用的一种示例,所述病毒特征码可以包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;在这种情况下,所述步骤102具体可以包括如下子步骤:\n[0267] 子步骤S41、定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0268] 和/或,\n[0269] 子步骤S42、定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0270] 和/或,\n[0271] 子步骤S43、定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0272] 和/或,\n[0273] 子步骤S44、定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0274] 和/或,\n[0275] 子步骤S45、定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0276] 和/或,\n[0277] 子步骤S46、定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。\n[0278] 在具体实现中,可以按如下方式进行匹配:\n[0279] 方式一:直接逐字节按序扫描。\n[0280] 方式二:病毒特征码序列按序扫描,只需病毒特征码指令按序出现即可,无需连续出现。\n[0281] 方式三:只需存在所有或部分特征码指令即可。\n[0282] 当然,上述检测及匹配的方式仅仅用作示例,本领域技术人员根据实际情况采用任一种检测及匹配病毒特征码的方式均是可行的,本申请对此无需加以限制。\n[0283] 步骤103、若是,则统计所述病毒特征码对应的权重值之和;\n[0284] 例如,扫描分析某APK发现其包含以下病毒特征码:\n[0285] /system/bin/su com.qihoo360.mobilesafe 1066185829\n[0286] 参照以上示例中的表1,可以得知,其中/system/bin/su的权重值为0.2,com.qihoo360.mobilesafe的权重值为0.3,1066185829的权重值为0.5,则统计该病毒特征码对应的权重值之和为1。\n[0287] 步骤104、若所述权重值之和大于等于某病毒判定阈值,则判定所述目标Android安装包APK中存在相应类型的病毒。\n[0288] 例如,若预先配置木马病毒判定阈值为1,上例中病毒特征码对应的权重值之和等于该阈值,于是判定该目标APK中存在木马。\n[0289] 在具体实现中,本申请实施例还可以包括如下步骤:\n[0290] 生成所述目标Android安装包APK中存在该类型病毒的提示信息。\n[0291] 进一步而言,在实际中,还可以调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。\n[0292] 为使本领域技术人员更好地理解本申请,以下通过几个具体示例进行说明。\n[0293] 例一:\n[0294] 1)定位至目标APK中的classes.dex或者JAR的操作指令instruction开始的地方(以下简称之为代码段);\n[0295] 2)从病毒数据库中的病毒特征码序列中根据分隔符提取第一个instruction;\n[0296] 3)从代码段中提取第一个instruction;\n[0297] 4)两者进行比较,若相同则从特征码序列中根据分隔符提取下一个instruction,若不同则从代码段中提取下一个instruction;\n[0298] 5)以此类推逐指令进行匹配,直至抵达代码段的末尾,若匹配过程中完全匹配则报告发现病毒;\n[0299] 6)提取相应病毒特征码对应的权重值,统计所述权重值之和;\n[0300] 7)若所述权重值之和大于等木马病毒判定阈值,则判定目标APK中存在木马病毒,报告用户,并调用安全软件进行查杀。\n[0301] 例二:\n[0302] 1)从病毒数据库的病毒特征码中提取相应的特征字符串(可能为一个或多个)。\n[0303] 2)查找字符串常量池中是否存在相应的特征字符串;\n[0304] 3)若存在,则报告发现病毒APK;\n[0305] 4)提取相应病毒特征码字符串对应的权重值,统计所述权重值之和;\n[0306] 5)若所述权重值之和大于等木马病毒判定阈值,则判定目标APK中存在木马病毒,报告用户,并调用安全软件进行查杀。\n[0307] 例三:\n[0308] 1)从病毒特征码中提取相应的特征字符串(可能为一个或多个),特征函数名(可能为一个或多个);\n[0309] 2)查找字符串常量池以及函数常量池中是否存在相应的特征字符串、特征函数名。其他string、type、field和meth pool的组合扫描依此类推;\n[0310] 3)若存在,则报告发现病毒APK;\n[0311] 4)提取相应病毒特征码字符串对应的权重值,统计所述权重值之和;\n[0312] 5)若所述权重值之和大于等木马病毒判定阈值,则判定目标APK中存在木马病毒,报告用户,并调用安全软件进行查杀。\n[0313] 本领域技术人员易于理解的是,上述操作指令、常量池和头部信息的扫描并无先后顺序的限制,本领域技术人员根据实际情况任意设定上述三者的扫描顺序都是可行的,本申请对此无需加以限制。\n[0314] 本申请实施例还适用于APK中嵌套APK的情形,即当APK中还包含其它APK时,同样可应用本申请实施例,对APK及其嵌套APK中的可执行文件、文本文件等进行解析和病毒提取,例如,在某个1.APK中嵌入了一个root.apk用以获取root权限,应用本申请实施例,除从1.APK提取病毒特征码,还会从root.apk中提取病毒特征码。本领域技术人员易于想到的是,对于多重嵌套APK的情形,本申请实施例亦同样适用,本申请在此不作限制。\n[0315] 参考图2,示出了本申请的一种病毒APK的识别方法实施例2的步骤流程图,具体可以包括如下步骤:\n[0316] 步骤201、预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;\n[0317] 在本申请的一种优选实施例中,所述步骤201可以包括如下子步骤:\n[0318] 子步骤S51、扫描源Android安装包APK中的指定文件,所述指定文件包括可执行文件和/或文本文件;\n[0319] 子步骤S52、提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;\n[0320] 子步骤S53、若是,则根据所述特定数据生成病毒特征码;\n[0321] 子步骤S54、提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;\n[0322] 子步骤S55、若是,则根据所述linux命令生成病毒特征码;\n[0323] 子步骤S56、为所述病毒特征码分配权重值;\n[0324] 子步骤S57、将所述病毒特征码及对应的权重值保存至病毒数据库中。\n[0325] 在具体实现中,可以通过判断所述linux命令是否符合预置的恶意linux命令确定所述linux命令是否包含病毒信息,还可以将所述包含病毒信息的linux命令直接作为病毒特征码。在本实施例中,所述病毒特征码还包括linux命令特征码。\n[0326] 例如,从APK中的文本文件中提取相应的linux命令如下:\n[0327] \n[0328] \n[0329] 在判定上述linux命令符合预置的恶意linux命令时,将上述命令作为病毒特征码并分配权重值后写入病毒数据库中。\n[0330] 步骤202、检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码,所述指定文件包括可执行文件和文本文件;若是,则执行步骤203;若否,则执行步骤\n207\n[0331] 在本申请的一种优选实施例中,所述步骤202可以包括如下子步骤:\n[0332] 定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。\n[0333] 步骤203、统计所述病毒特征码对应的权重值之和;\n[0334] 步骤204、判断所述权重值之和是否大于等于某病毒判定阈值,若是,则执行步骤\n205;若否,则执行步骤206;\n[0335] 步骤205、判定所述目标Android安装包APK中存在相应类型的病毒,成所述目标Android安装包APK中存在该类型病毒的提示信息;\n[0336] 步骤206、判定所述目标Android安装包APK为病毒APK,生成所述目标Android安装包APK为病毒APK的提示信息;\n[0337] 步骤207,判定所述目标Android安装包APK为正常APK。\n[0338] 例如:扫描分析某APK发现其包含以下病毒特征码:\n[0339] /system/bin/su com.qihoo360.mobilesafe 1066185829\n[0340] 参照上述表1,计算所述病毒特征码的权重和为1,确定其等于木马病毒判定阈值\n1,于是向用户报告发现木马,生成提示信息如下:\n[0341] 发现木马,可获取root权限,之后可绕过系统安全机制从而执行恶意行为。并可侦测系统是否存在杀毒软件,从而进行规避。可向号码1066185829发送扣费短信或拨打吸费电话。\n[0342] 或如:扫描分析某APK发现其包含以下病毒特征码:\n[0343] /system/bin/su\n[0344] 参照上述表1,计算其权重值为0.2,确定其小于木马病毒判定阈值1,则向用户报告警告,生成提示信息如下:\n[0345] 警告当前应用可获取root权限,之后有可能绕过系统安全机制从而执行恶意行为。\n[0346] 在本申请实施例中,所述某病毒判定阈值可以根据不同的病毒类型进行设置,还可以根据实际情况在云端动态调整,本申请对此不作限制。\n[0347] 本申请实施例还可适用于客户端软件及云查杀的过程中,即上述病毒APK识别的过程可以在客户端完成,也可以在服务器端或云端完成,本申请对此不作限制。\n[0348] 以下提供本申请实施例的应用场景:\n[0349] 场景一:依据用户的病毒扫描启动操作,首先检查APK是否变更以及是否缓存过扫描结果,若APK未变更并且缓存过扫描结果则直接输出扫描结果,反之则进行黑名单扫描,若在其中发现APK存在,则输出扫描结果发现病毒APK并增加至缓存,若未发现则进行白名单扫描,若在其中发现APK存在,则输出扫描结果安全并增加至缓存,若未发现则采用病毒数据库进行病毒特征码扫描,并输出扫描结果以及增加至缓存。\n[0350] 场景二:用户新装APK,杀毒程序收到新装APK消息,开始对用户新装的APK进行扫描,首先进行黑名单扫描,若在其中发现APK存在,则输出扫描结果发现病毒并增加至缓存,若未发现则进行白名单扫描,若在其中发现APK存在,则输出扫描结果安全并增加至缓存,若未发现则采用病毒数据库进行病毒特征码扫描,并输出扫描结果以及增加至缓存。\n[0351] 本领域技术人员易于理解的是,应用本申请实施例,也可以通过直接检测文本文件中是否包含病毒特征码来判定当前APK是否为病毒APK,为节约篇幅,本申请对此方案不作赘述。\n[0352] 本申请通过扫描分析源APK文件中的指定文件,如可执行文件、文本文件等,针对包含病毒信息的指令、常量或头部信息按预置规则生成相应的病毒特征码,并汇编成病毒数据库;之后病毒APK识别的过程中,检测目标APK文件中的指定文件,判断该指定文件中是否包含所述病毒数据库中的病毒特征码,从而确定目标APK是否为病毒APK。应用本申请实施例,无论病毒制造者如何通过修改混淆方式、增加资源、修改代码(改变类名、函数名等)、更换签名、包名等方式来制作病毒变种其病毒APK的特征码都不会变,从而本申请可以快速、准确、有效地识别出病毒APK及其变种,而且有针对性的更改程序逻辑以及特定字符串(恶意号码、恶意网址)来制作病毒变种相对病毒制造者而言是比较麻烦、耗时的,从而这种方式也能有效的提高病毒制作者制作病毒变种的难度,提高APK应用的安全性。\n[0353] 需要说明的是,本申请实施例不仅适用于各种Android终端,即使用Android平台(操作系统)的终端,包括计算机、PC、笔记本电脑、手机、平板电脑等等;还适用于在其他计算机系统(例如Windows、Linux)之上使用的病毒特征码提取方案。\n[0354] 对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。\n[0355] 参考图3,其示出了本申请的一种病毒APK的识别装置实施例的结构框图,具体可以包括以下模块:\n[0356] 病毒数据库生成模块301,用于预置病毒数据库,所述病毒数据库中包括病毒特征码及对应的权重值;\n[0357] 病毒检测模块302,用于检测目标Android安装包APK中的指定文件中是否包含所述病毒特征码;若是,则调用病毒权重值统计模块303;\n[0358] 病毒权重值统计模块303,用于统计所述病毒特征码对应的权重值之和;\n[0359] 阈值判断模块304,用于判断所述权重值之和是否大于等于某病毒判定阈值;若是,则调用病毒判定模块305;\n[0360] 病毒判定模块305,用于判定所述目标Android安装包APK中存在相应类型的病毒。\n[0361] 在本申请的一种优选实施例中,还可以包括如下模块:\n[0362] 病毒识别模块306,用于在所述权重值之和小于某病毒判定阈值时,判定所述目标Android安装包APK为病毒APK。\n[0363] 在具体实现中,本申请实施例还可以包括如下模块:\n[0364] 第一提示信息生成模块307,与所述病毒判定模块305连接,用于生成所述目标Android安装包APK中存在该类型病毒的提示信息。\n[0365] 第二提示信息生成模块308,与所述病毒识别模块306连接,用于生成所述目标Android安装包APK为病毒APK的提示信息。\n[0366] 更为优选的是,本申请实施例还可以包括如下模块:\n[0367] 病毒查杀模块,用于调用安全软件接口,针对所述目标Android安装包APK进行病毒查杀。\n[0368] 在本申请的一种优选实施例中,所述指定文件可以包括可执行文件,所述病毒数据库生成模块301可以包括如下子模块:\n[0369] 源文件扫描子模块,用于扫描源Android安装包APK中的指定文件,所述指定文件包括可执行文件;\n[0370] 特定数据提取子模块,用于提取所述可执行文件中的特定数据,判断所述特定数据是否包含病毒信息,其中,所述特定数据包括可执行文件的头部信息、可执行文件常量池中的常量,和/或,可执行文件中的操作指令;\n[0371] 第一特征码生成子模块,用于在所述特定数据包含病毒信息时,根据所述特定数据生成病毒特征码;\n[0372] 权重值分配模块,用于为所述病毒特征码分配权重值;\n[0373] 特征码保存子模块,用于将所述病毒特征码及对应的权重值保存至病毒数据库中。\n[0374] 作为本申请实施例具体应用的一种示例,所述特征码保存子模块可以进一步包括以下单元:\n[0375] 分区保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码及对应的权重值分别保存在数据库中不同的存储区域;\n[0376] 或者,\n[0377] 标签保存单元,用于将所述头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码及对应的权重值保存在数据库中,并分别标记分类标签。\n[0378] 在具体应用中,所述可执行文件可以包括Dex文件,所述Dex文件可以包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。\n[0379] 在本申请的一种优选实施例中,所述病毒特征码可以包括:头部信息特征码、常量特征码、操作数特征码、指令特征码、指令特征码序列、类名函数名特征码;所述可执行文件中的操作指令包括操作码和操作数两部分;\n[0380] 在这种情况下,所述病毒检测模块302可以包括如下子模块:\n[0381] 第一检测子模块,用于定位目标Android安装包APK中可执行文件的头部信息,将所述头部信息与病毒数据库中的头部信息特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0382] 和/或,\n[0383] 第二检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量,将所述常量与病毒数据库中的常量特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0384] 和/或,\n[0385] 第三检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作数,将所述操作数与病毒数据库中的操作数特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0386] 和/或,\n[0387] 第四检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0388] 和/或,\n[0389] 第五检测子模块,用于定位目标Android安装包APK中可执行文件操作指令中的操作码,将所述操作码与病毒数据库中的指令特征码序列进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码;\n[0390] 和/或,\n[0391] 第六检测子模块,用于定位目标Android安装包APK中可执行文件常量池中的常量以及操作指令中的操作数所调用的类名和/或函数名,将所述类名和/或函数名与病毒数据库中的类名函数名特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。\n[0392] 在具体实现中,所述头部信息特征码、常量特征码、操作数特征码、类名函数名特征码可以根据包含病毒信息的头部信息、常量、操作数和类名函数名直接生成;\n[0393] 所述指令特征码、指令特征码序列可以根据包含病毒信息的操作指令直接生成,或者,可以根据包含病毒信息的操作码和操作数的字符串或通配符生成。\n[0394] 在本申请的一种优选实施例中,所述指定文件还可以包括文本文件,在这种情况下,所述病毒数据库生成模块301还可以包括如下子模块:\n[0395] linux命令提取子模块,用于提取所述文本文件中的linux命令,判断所述linux命令是否包含病毒信息;\n[0396] 第二特征码生成子模块,用于在所述linux命令包含病毒信息时,根据所述linux命令生成病毒特征码。\n[0397] 相应的,所述病毒特征码还可以包括linux命令特征码,所述病毒检测模块302还可以包括如下子模块:\n[0398] 第七检测子模块,用于定位目标Android安装包APK中的文本文件,将所述文本文件中的linux命令与病毒数据库中的linux命令特征码进行匹配,若匹配,则判定目标Android安装包APK中的指定文件中包含病毒特征码。\n[0399] 在具体应用中,所述可执行文件中常量池中的常量可以包括字符串strings、类型types、域fields和方法methods中的常量;所述可执行文件的头部信息中可以包括摘要信息checksum和/或签名信息Signature。\n[0400] 由于所述装置实施例基本相应于前述图1和图2所示的方法实施例,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此就不赘述了。\n[0401] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。\n[0402] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。\n[0403] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。\n[0404] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。\n[0405] 尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。\n[0406] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。\n[0407] 以上对本申请所提供的一种病毒APK的识别方法,以及,一种病毒APK的识别装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
法律信息
- 2022-08-12
专利权的转移
登记生效日: 2022.08.01
专利权人由北京奇虎科技有限公司变更为北京奇虎科技有限公司
地址由100088 北京市西城区新街口外大街28号D座112室(德胜园区)变更为100015 北京市朝阳区酒仙桥路6号院2号楼1至19层104号内8层801
专利权人由奇智软件(北京)有限公司 变更为空
- 2015-05-06
- 2012-11-28
实质审查的生效
IPC(主分类): G06F 21/00
专利申请号: 201210137453.X
申请日: 2012.05.04
- 2012-11-28
专利申请权的转移
登记生效日: 2012.10.25
申请人由奇智软件(北京)有限公司变更为北京奇虎科技有限公司
地址由100016 北京市朝阳区酒仙桥路14号兆维大厦4层东侧单元变更为100088 北京市西城区新街口外大街28号D座112室(德胜园区)
申请人变更为奇智软件(北京)有限公司
- 2012-10-03
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-12-22
|
2010-08-18
| | |
2
| |
2005-01-19
|
2004-03-29
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |