Android平台自动生成的恶意程序的检测方法及系统技术领域
本发明涉及Android平台的软件检测技术领域,尤其涉及一种Android平台自动生成的恶意程序的检测方法及系统。
背景技术
随着移动互联网的飞速发展,智能手机已成为移动终端的主流。智能手机具有独立的操作系统,可以安装各种软件,扩充手机的功能。其中Android操作系统以其自由开放的特点被各家手机厂商广泛采用,发展最为迅速。基于其开放性,任何组织和个人都能编写Android应用程序(APK),供用户随意下载使用。因此恶意软件也将Android系统作为主要的攻击目标,并成为阻碍其发展的重要障碍。
目前对于Android系统中存在的恶意应用程序的检测方法主要有基于特征的检测和基于行为的检测两类方法。其中基于特征的检测方法主要指分析现有的APK,提取恶意程序的特征,将对APK的检测变为对特征的匹配。常用的特征有:文件的散列值(散列函数的结果)——一对一的匹配;字符串——一对多匹配,检测具有类似代码的程序;以及证书——一对多匹配,检测同一个开发者签名的多个程序,由于这种检测方法是将已知的恶意程序中的特征与待检测的应用程序进行特征匹配,因此它对于从未出现过的恶意程序的检测效果很差,具有严重的滞后性,而且现在的恶意程序具有很强的随机性,APK经过加壳后,无法静态扫描原始代码,因此无法直接抽取一对多的特征进行检测。而基于行为的检测方法主要指在沙盒中运行待检测的APK,监视APK动态运行时的行为,与已知的恶意程序行为模式进行匹配,这种检测方法需要定制的Android系统,无法在没有root的用户的手机上运行;因此安全厂商需要提前获取待测APK样本,在定制的Android系统上检测后获取检测结果,再将结果通过一对一的特征匹配提供给用户,这显然是在用户受到恶意程序的侵害后采取的补救措施。
发明内容
本发明要解决的技术问题是:为了解决在Android平台上现有的恶意程序的检测方法检测效率低和检测准确度低的问题,本发明提供了一种Android平台自动生成的恶意程序的检测方法及系统来解决上述问题。
本发明解决其技术问题所采用的技术方案是:一种Android平台自动生成的恶意程序的检测方法,包括以下步骤:
S1、获取待检测的Android应用程序的PackageName和证书信息,其中所述证书信息包括CommonName、OrganizationalUnit、Organization、Locality、StateOrProvinceName和CountryName,验证所述PackageName和证书信息中是否存在无意义的字符串;
S2、获取所述待检测的Android应用程序申请的权限,验证所述待检测的Android应用程序申请的权限中是否存在敏感权限或者敏感权限的组合;
S3、检测所述待检测的Android应用程序是否进行了加壳;
S4、当所述待检测的Android应用程序同时满足所述PackageName和证书信息中存在无意义的字符串、申请的权限中存在敏感权限或者敏感权限的组合以及进行了加壳,则将其认定为恶意程序。
作为优选,在步骤S4中,将PackageName和证书信息中存在的无意义的字符串在搜索引擎上进行检索,如果PackageName和证书信息与现有的善意应用程序相匹配,则认定所述待检测的Android应用程序为善意程序。
作为优选,在步骤S1中,将所述PackageName和证书信息在字库中进行检索,如果存在无法释义的字符串则将其视为无意义的字符串。
作为优选,通过反编译所述待检测的Android应用程序的AndroidManifext.xml文件获得所述PackageName和权限声明,所述权限声明中描述了所述待检测的Android应用程序申请的权限;通过反编译所述待检测的Android应用程序的META‐INF目录中的CERT.RSA文件获取所述证书信息。
作为优选,所述步骤S3具体为:遍历所述AndroidManifext.xml文件,如果存在与现有加壳工具的特征相匹配的加壳类或者so文件,则认为所述待检测的Android应用程序进行了加壳。
一种Android平台自动生成的恶意程序的检测系统,包括:
PackageName和证书信息验证模块,用于获取待检测的Android应用程序的PackageName和证书信息,其中所述证书信息包括CommonName、OrganizationalUnit、Organization、Locality、StateOrProvinceName和CountryName,验证所述PackageName和证书信息中是否存在无意义的字符串;
申请权限验证模块,用于获取所述待检测的Android应用程序申请的权限,验证所述待检测的Android应用程序申请的权限中是否存在敏感权限或者敏感权限的组合;
加壳检测模块,用于检测所述待检测的Android应用程序是否进行了加壳;
恶意程序判断模块,用于当所述待检测的Android应用程序同时满足所述PackageName和证书信息中存在无意义的字符串、申请的权限中存在敏感权限或者敏感权限的组合以及进行了加壳,将其认定为恶意程序。
作为优选,所述恶意程序判断模块还用于将PackageName和证书信息中存在的无意义的字符串在搜索引擎上进行检索,如果PackageName和证书信息与现有的善意应用程序相匹配,则认定所述待检测的Android应用程序为善意程序。
作为优选,所述PackageName和证书信息验证模块用于将所述PackageName和证书信息在字库中进行检索,如果存在无法释义的字符串则将其视为无意义的字符串。
作为优选,还包括反编译模块,用于反编译所述待检测的Android应用程序的AndroidManifext.xml文件从而输出所述PackageName和权限声明,所述权限声明中描述了所述待检测的Android应用程序申请的权限;还用于反编译所述待检测的Android应用程序的META‐INF目录中的CERT.RSA文件从而输出所述证书信息。
作为优选,所述加壳检测模块,用于遍历所述AndroidManifext.xml文件,如果存在与现有加壳工具的特征相匹配的加壳类或者so文件,则认为所述待检测的Android应用程序进行了加壳。
本发明的有益效果是,这种Android平台自动生成的恶意程序的检测及系统根据恶意程序所具有的特点,不仅可以检测出已经存在的恶意程序,对于Android平台自动生成的从未出现过的恶意程序也可以准确快速的识别出来,而且检测过程不需要获取系统的root权限,降低了使用门槛,有利于软件在用户群中的推广。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1是本发明的Android平台自动生成的恶意程序的检测方法的最优实施例的流程图。
图2是本发明的Android平台自动生成的恶意程序的检测系统的最优实施例的框架图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
如图1所示,本发明提供了一种Android平台自动生成的恶意程序的检测方法,包括以下步骤:
S1、获取待检测的Android应用程序的PackageName和证书信息,其中证书信息包括CommonName、OrganizationalUnit、Organization、Locality、StateOrProvinceName和CountryName,验证PackageName和证书信息中是否存在无意义的字符串;一般情况下,为了与区别于其他程序,善意程序的证书信息和PackageName均为有意义的英文字符串,例如com.king.candycrushsaga(CommonName),CristianBidea(OrganizationalUnit),Mobile(Organization),king.com(Locality),Bucharest(StateOrProvinceName),Romania(CountryName);而自动生成的恶意程序所包含的这些信息基本为无意义的随机字符串,例如jhr.jgnai.rmplbdi,EexawtuvkLmxff,Lzhfhlrq,Omrupnos,Zfbmahre,Bjegovt;可以根据现有的英文字典建立字库,也可以利用互联网上的网络字库对PackageName和证书信息进行检索,如果存在无法释义的字符串则将其视为无意义的字符串;
S2、获取待检测的Android应用程序申请的权限,可以设定规则,将一般恶意程序所要获取的敏感权限(例如允许一个程序截获用户按键、触摸、轨迹球的输入信息、允许读取用户的通讯录、短信等数据库、允许下载文件等)作为集合制定在规则中,根据规则验证待检测的Android应用程序申请的权限中是否存在敏感权限或者敏感权限的组合;
无论恶意程序是否进行了加壳,通过反编译待检测的Android应用程序的AndroidManifext.xml文件获得PackageName和权限声明,权限声明中描述了待检测的Android应用程序申请的权限;通过反编译待检测的Android应用程序的META‐INF目录中的CERT.RSA文件获取证书信息;
S3、遍历AndroidManifext.xml文件,如果存在与现有加壳工具的特征相匹配的加壳类(例如com.qihoo.util.StubApplication)或者so文件(例如libprotectClass.so),则认为待检测的Android应用程序进行了加壳;
S4、当待检测的Android应用程序同时满足PackageName和证书信息中存在无意义的字符串、申请的权限中存在敏感权限或者敏感权限的组合以及进行了加壳,则将其认定为恶意程序,在进行恶意程序认定之前,将PackageName和证书信息中存在的无意义的字符串在搜索引擎上进行检索,如果PackageName和证书信息与现有的善意应用程序相匹配,则认定待检测的Android应用程序为善意程序,从而避免一些开发人员有意将packageName和证书信息设为无意义的字符串而造成的误判。
如图2所示,本发明还提供一种Android平台自动生成的恶意程序的检测系统,包括:
反编译模块,用于反编译待检测的Android应用程序的AndroidManifext.xml文件从而输出PackageName和权限声明,权限声明中描述了待检测的Android应用程序申请的权限;还用于反编译待检测的Android应用程序的META‐INF目录中的CERT.RSA文件从而输出证书信息;
PackageName和证书信息验证模块,用于获取待检测的Android应用程序的PackageName和证书信息,其中证书信息包括CommonName、OrganizationalUnit、Organization、Locality、StateOrProvinceName和CountryName,将PackageName和证书信息在字库中进行检索,如果存在无法释义的字符串则将其视为无意义的字符串;
申请权限验证模块,用于获取待检测的Android应用程序申请的权限,验证待检测的Android应用程序申请的权限中是否存在敏感权限或者敏感权限的组合;
加壳检测模块,用于遍历AndroidManifext.xml文件,如果存在与现有加壳工具的特征相匹配的加壳类或者so文件,则认为待检测的Android应用程序进行了加壳;
恶意程序判断模块,用于当待检测的Android应用程序同时满足PackageName和证书信息中存在无意义的字符串、申请的权限中存在敏感权限或者敏感权限的组合以及进行了加壳,将其认定为恶意程序;在认定待检测的Android应用程序为恶意程序之前,恶意程序判断模块还用于将PackageName和证书信息中存在的无意义的字符串在搜索引擎上进行检索,如果PackageName和证书信息与现有的善意应用程序相匹配,则认定待检测的Android应用程序为善意程序。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对所述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上述依据本发明的理想实施例为启示,通过上述的说明内容,相关工作人员完全可以在不偏离本项发明技术思想的范围内,进行多样的变更以及修改。本项发明的技术性范围并不局限于说明书上的内容,必须要根据权利要求范围来确定其技术性范围。