识别移动环境的木马化应用程序转让专利

申请号 : CN201380006506.7

文献号 : CN104067283B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : C·纳彻伯格

申请人 : 赛门铁克公司

摘要 :

识别出移动环境的木马化apps。从一个或多个外部来源获得特定移动环境的多个apps。从所述apps提取代码和数字签名者并存储。对于所述所获得apps中每个给定的特定app,将所述特定app的所述代码与其他所获得apps的所述代码进行比较,以确定所述特定app是否1)包含与所述其他apps中的一者共同的至少预定阈值量的代码,以及2)包含其中不含有的附加代码。如果是这样的话,将所述特定app的所述数字签名者与所述其他app的所述数字签名者进行比较。如果还是这样的情况:所述特定app的所述数字签名者与所述其他app的所述数字签名者不同,则将所述特定app识别为被木马化。

权利要求 :

1.一种用于识别移动环境的木马化应用程序的计算机实现方法,所述方法包括如下步骤:通过计算机从至少一个外部来源获得特定移动环境的多个应用程序;

将所获得应用程序中的第一特定应用程序的和代码、数字签名者和日期相关的数据与所获得应用程序的第二特定应用程序的和代码和数字签名者相关的数据进行比较;

基于所述比较,确定所述所获得应用程序中的所述第一特定应用程序包含:1)所述所获得应用程序的第二特定应用程序中所含的代码的至少预定阈值量,2)所述所获得应用程序的所述第二特定应用程序中不存在的附加代码,以及3)与所述所获得应用程序的所述第二特定应用程序不同的签名者,和4)所述所获得应用程序中的所述第一特定应用程序的日期晚于所述所获得应用程序的所述第二特定应用程序的日期;以及响应于所述确定,而将所述所获得应用程序中的所述第一特定应用程序识别为木马化应用程序。

2.根据权利要求1所述的方法,还包括:

将多个应用程序间共同的库排除在以下情况之外:1)将所述所获得应用程序中的第一特定应用程序的和代码相关的数据与至少一个其他所获得应用程序的和代码相关的数据进行比较,以及2)确定所述所获得应用程序的所述第一特定应用程序包含:所述所获得应用程序的第二特定应用程序中所含的代码的至少预定阈值量,以及所述所获得应用程序的所述第二特定应用程序中不存在的附加代码。

3.根据权利要求1所述的方法,其中通过计算机获得多个应用程序还包括:对于每个特定的所获得应用程序,从所述特定的所获得应用程序提取和代码相关的数据。

4.根据权利要求3所述的方法,其中从所述特定的所获得应用程序提取代码相关的数据还包括:提取所述特定的所获得应用程序使用的每个方法的完全限定名称。

5.根据权利要求3所述的方法,其中从所述特定的所获得应用程序提取代码相关的数据还包括:提取所述特定的所获得应用程序使用的每个类的完全限定名称。

6.根据权利要求3所述的方法,其中从所述特定的所获得应用程序提取代码相关的数据还包括:创建描述所述特定的所获得应用程序的可能执行路径的流程图。

7.根据权利要求3所述的方法,其中从所述特定的所获得应用程序提取代码相关的数据还包括:从所述应用程序的所有类别中的所有方法提取原始字节码;以及将所提取原始字节码归一化。

8.根据权利要求7所述的方法,其中从所述特定的所获得应用程序提取代码相关的数据还包括:创建归一化的所提取原始字节码的散列。

9.根据权利要求1所述的方法,还包括:

对于每个特定的所获得应用程序,从所述特定的所获得应用程序提取数字签名者的身份。

10.根据权利要求1所述的方法,还包括:

对于每个特定的所获得应用程序,从由如下组成的日期的组获得和所述特定的所获得应用程序相关的日期:发布所述特定应用程序的日期、发现所述特定应用程序的日期、下载所述特定应用程序的日期、和获得所述特定应用程序的日期、以及所述特定应用程序包含在其标头中的日期。

11.根据权利要求1所述的方法,还包括:

响应于将所述所获得应用程序中的所述第一特定应用程序识别为木马化应用程序,执行由如下组成的步骤的组中的至少一个另外的步骤:标记所述木马化应用程序以供人类分析者人工检查;

对所述木马化应用程序进行排队以用于自动恶意代码分析;

将和所述木马化应用程序相关的信息传输至集中式安全组件;以及将所述木马化应用程序列入黑名单。

12.根据权利要求1所述的方法,其中:

所述特定移动环境的所述多个应用程序还包括安卓环境的多个安卓应用程序。

13.一种用于识别移动环境的木马化应用程序的计算机系统,该计算机系统包括:计算机存储器;

处理器;

驻留在所述计算机存储器中的应用程序获取模块,该应用程序获取模块从至少一个外部来源获得特定移动环境的多个应用程序;

驻留在所述计算机存储器中的比较模块,该比较模块将所获得应用程序中的第一特定应用程序的和数字签名者和日期相关的数据与所获得应用程序的第二特定应用程序的和代码和数字签名者相关的数据进行比较;以及基于所述比较,确定所述所获得应用程序中的所述第一特定应用程序包含:1)所述所获得应用程序的第二特定应用程序中所含的代码的至少预定阈值量,2)所述所获得应用程序的所述第二特定应用程序中不存在的附加代码,以及3)与所述所获得应用程序的所述第二特定应用程序不同的签名者,和4)所述所获得应用程序中的所述第一特定应用程序的日期晚于所述所获得应用程序的所述第二特定应用程序的日期;以及驻留在所述计算机存储器中的木马化应用程序识别模块,该木马化应用程序识别模块被配置用于响应于所述确定而将所述所获得应用程序中的所述第一特定应用程序识别为木马化应用程序。

说明书 :

识别移动环境的木马化应用程序

技术领域

[0001] 本发明总体涉及计算机安全,并且更具体地讲,涉及识别移动环境的木马化应用程序。

背景技术

[0002] 诸如智能手机和平板电脑的移动计算设备每天得到越来越广泛的使用。安卓是用于此类移动设备的一种基于Linux的开源操作系统,它正获得日益普及的市场份额。大量开发者编写在安卓设备上运行的应用程序(“apps”)。通过谷歌公司(Google)运行的在线安卓市场,这些apps中的许多可供购买或供免费使用。安卓apps也可从其他网上商店和另外的第三方站点下载。由于安卓环境的开放性质,任何人都可以创建和分发安卓apps。
[0003] 由于其开放性,安卓平台易受到称为木马化(trojanization)的攻击。为了实现该攻击,恶意方以从在线商店或其他来源下载的合法app开始。攻击者除去app的数字签名,添加另外的(恶意的)代码到app上,用匿名数字证书为app重签名,并通过现有信道之一将当前恶意app再分发给无防备用户。这被称为使app木马化。实际上,攻击者正利用安卓开发和分发环境的开放性将恶意代码隐藏在现有合法app中。试图下载并运行合法app的用户会被诱使下载木马化的版本。当木马化app在用户的安卓设备上运行时,攻击者添加的新代码可执行恶意功能,例如窃取联系信息、记录数据输入、发送欺诈性通信,等等。
[0004] 有必要解决该问题。

发明内容

[0005] 木马化app管理系统识别移动环境中的木马化apps,例如木马化的安卓apps。特定的移动环境下的大多数应用程序是从一个或多个app商店和/或其他第三方来源获得的。从所获得的app提取代码、数字签名者和一些实施例中的日期(如,发布日期)并有效地存储。例如,该数据可存储在代表apps的数据结构数组中,使得存在与每一个所获得的apps相关的数组的单独元素。在不同实施例中,从每个app提取代码可采取不同形式,例如从app的所有类中的所有方法中提取原始字节码,提取app中存在的类的名称以及每个类的定义方法的名称,提取app的每个类中的每个方法的散列,提取描述app的可能执行路径的流程图,等等。
[0006] 对于所获得apps中每个给定的特定app,将特定的所获得app的代码与多个其他所获得apps的代码进行比较,以确定特定的所获得app是否1)包含与其他所获得apps中的一者通用的至少预定阈值量的代码,以及2)包含其中不含有的另外代码。在一个实施例中,该过程包括将特定的所获得app的代码与每一个其他所获得的apps中的代码进行比较。在另一个实施例中,该过程经优化,使得特定的所获得app的代码仅与其他所获得apps的子集的代码进行比较。在该情况下,该子集仅由与特定的所获得app的至少一些代码有共同之处的那些所获得的apps组成。
[0007] 对如下情况作出响应,而将特定app的数字签名者与其他app的数字签名者进行比较:确定1)特定的所获得app包含与所获得apps中的另一个app通用的至少预定阈值量的代码,以及2)特定的所获得app包含在其他所获得app中不含有的另外代码。在一个实施例中,也将特定app的日期与其他app的日期进行比较。响应于如下情况,而将特定app识别为木马化app:确定1)特定app包含与其他app通用的至少预定阈值量的代码,2)特定app包含其他app中不含有的另外代码,3)特定app的数字签名者与其他app的数字签名者不同,以及(可选)4)特定app的日期晚于其他app的日期。
[0008] 作为对识别木马化app的响应,可执行另外的步骤,例如标记木马化app以供人类分析者人工检查,对木马化app进行排队以用于自动化的恶意代码分析,将木马化app相关的信息传输至集中式安全组件,将木马化app列入黑名单,等等。
[0009] 本发明内容和以下具体实施方式中所述的特征和优点并不包括全部,并且特别地,相关领域的普通技术人员在考虑其附图、说明书和权利要求书后,许多另外的特征和优点将显而易见。此外,应该指出的是,说明书中所用的语言主要被选择用于可读性和指导目的,而不是被选择用来限定或限制本发明的主题,必需借助权利要求书确定此发明主题。

附图说明

[0010] 图1为根据一些实施例的示例性网络体系结构的框图,其中可实现木马化app管理系统。
[0011] 图2为根据一些实施例的适用于实现木马化app管理系统的计算机系统的框图。
[0012] 图3为根据一些实施例的木马化app管理系统的操作的框图。
[0013] 图4为根据一些实施例的木马化app管理系统的操作的流程图。
[0014] 这些图仅出于举例说明的目的来示出各种实施例。本领域技术人员根据下列讨论将易于认识到,在不脱离本文所述原理的情况下,可采用本文所述的结构和方法的替代实施例。

具体实施方式

[0015] 图1为框图,示出了示例性网络体系结构100,其中可实现木马化app管理系统101。所示网络体系结构100包括多个客户端103A、103B和103N,以及多个服务器105A和105N。在图1中,木马化app管理系统101被示出为驻留在服务器105A上。应当理解这仅是例子,并且在各种实施例中该系统101的各种功能可在服务器105、客户端103上被实例化,或可在多个客户端103和/或服务器105之间分发。
[0016] 客户端103和服务器105可使用计算机系统210(例如图2所示和下文所述的计算机系统)实现。客户端103和服务器105通信地耦合到网络107,例如经由以下结合图2所述的网络接口248或调制解调器247进行。客户端103能够使用例如网页浏览器或其他客户端软件(未示出)访问服务器105上的应用程序和/或数据。
[0017] 虽然图1示出了三个客户端和两个服务器作为例子,实际上可部署更多(或更少)客户端103和/或服务器105。在一个实施例中,网络107为互联网的形式。可在其他实施例中使用其他网络107或基于网络的环境。
[0018] 图2为适用于实现木马化app管理系统101的计算机系统210的框图。客户端103和服务器105可以此类计算机系统210的形式实现。如图所示,计算机系统210的一个组件是总线212。总线212通信地耦合计算机系统210的其他组件,例如至少一个处理器214;系统存储器217(如,随机存取存储器(RAM)、只读存储器(ROM)、闪存);输入/输出(I/O)控制器218;音频输出接口222,其通信地耦合到外部音频设备,例如扬声器系统220;显示适配器226,其通信地耦合到外部视频输出设备,例如显示屏224;一个或多个接口,例如串行端口230、通用串行总线(USB)插座230、并行端口(未示出)等等;键盘控制器233,其通信地耦合到键盘232;存储接口234,其通信地耦合到至少一个硬盘244(或其他形式的磁介质);软盘驱动器
237,其被配置为接收软盘238;主机总线适配器(HBA)接口卡235A,其被配置为与光纤通道(FC)网络290连接;HBA接口卡235B,其被配置为连接到SCSI总线239;光盘驱动器240,其被配置为接收光盘242;鼠标246(或其他指针设备),其例如经由USB插座228耦合到总线212;
调制解调器247,其例如经由串行端口230耦合到总线212;以及网络接口248,其例如直接耦合到总线212。
[0019] 其他组件(未示出)可以类似方式连接(如,文档扫描仪、数字相机、打印机等等)。相反地,图2中所示的所有组件不需要都存在。可以使用与图2中所示方法不同的方法来互连这些组件。
[0020] 总线212允许处理器214与系统内存217之间的数据通信,如上所指出的,所述系统内存既包括RAM,也包括ROM和/或闪存。RAM通常是将操作系统和应用程序加载到其中的主存储器。除其他代码外,ROM和/或闪存还可包含控制某些基本硬件操作的基本输入输出系统(BIOS)。应用程序可存储在本地计算机可读介质(如,硬盘244、光盘242)上并加载到系统内存217中并且被处理器214执行。应用程序也可以从远程位置(即,位于远程的计算机系统210)加载到系统内存217中,例如经由网络接口248或调制解调器247进行。在图2中,木马化app管理系统101被示出为驻留在系统内存217中。木马化app管理系统101的工作方式将在下文结合图3更详细解释。
[0021] 存储接口234耦合到一个或多个硬盘244(和/或其他标准存储介质)。硬盘244可以是计算机系统210的一部分,或者可以是物理上独立的,可以通过其他接口系统进行访问。
[0022] 网络接口248和/或调制解调器247可直接或间接通信地耦合到网络107,例如互联网。此类耦合可以是有线的或无线的。
[0023] 图3示出了根据一些实施例的木马化app管理系统101的操作。如上文所述,木马化app管理系统101的功能可驻留在客户端103、服务器105上,或者可在多个计算机系统210之间分发,包括在基于云的计算环境内,其中木马化app管理系统101的功能作为网络107上的服务提供。应当理解,虽然木马化app管理系统101在图3中被示出为单个实体,但所示木马化app管理系统101代表功能集合,其可根据需要被实例化为单个或多个模块(木马化app管理系统101的特定多个模块的实例化在图3中示出)。应当理解,木马化app管理系统101的模块可在任何计算机系统210的系统内存217(如,RAM、ROM、闪存)内被实例化(例如被实例化为目标代码或可执行映像),使得当计算机系统210的处理器214处理模块时,计算机系统210执行相关功能。如本文所用,术语“计算机系统”、“计算机”、“客户端”、“客户端计算机”、“服务器”、“服务器计算机”和“计算设备”意指被配置和/或被编程为执行所述功能的一个或多个计算机。另外,实现木马化app管理系统101的功能的程序代码可存储在计算机可读的存储介质上。任何形式的有形计算机可读的存储介质可用于该语境,例如磁或光存储介质。如本文所用,术语“计算机可读的存储介质”并不意味着电信号与底层物理介质分离。
[0024] 如图3所示,木马化app管理系统101通过获得给定移动设备环境可用的apps301并用与其他apps相关的特定特征识别这些apps来检测木马化apps303,如下文详细描述。在一个实施例中,移动设备环境是安卓环境,并且木马化app管理系统101从一个或多个app商店和/或其他第三方来源305获得安卓apps301。应当理解,木马化app管理系统101并不限于在安卓环境内操作,并且在其他实施例中可获得和处理其他移动设备环境的apps301。
[0025] 木马化app管理系统101的app获取模块313获得给定移动设备环境的多个apps301,例如安卓apps301,其为安卓应用程序包(“APK”)文件的形式(用于分发和安装安卓apps301的文件格式)。app获取模块313从一个或多个外部来源305获得apps301,所述一个或多个外部来源例如是提供apps301下载的app商店或其他第三方网站。在一个实施例中,当木马化app管理系统101激活时,app获取模块313从一个或多个外部来源305获取所有可供下载的apps301。在一个实施例中,app获取模块313在用户设备(如,智能手机、平板电脑)上运行并识别和获得新的和/或未知的apps301。基于用户设备的app获取模块313将所获得apps301提交到中央位置的木马化app管理系统101(在例如服务器105上运行)。这使木马化app管理系统101能够发现从许多不同用户设备(未示出)提交的新apps301,而不必爬行互联网。
[0026] 木马化app管理系统101的提取模块307从每个所获得app301提取要分析的代码309。在该语境中,提取代码309可包括提取代码309相关的数据,例如方法或类的名称;计算类和/或方法的散列;以及使用这些散列,或提取实际的可执行代码309自身。如本文所用,代码309的分析以及所提取的代码309在不同实施例中可采取不同形式。在一个实施例中,提取模块307提取app301所用的每个方法的完全限定名称(即,方法的完整原型,例如“float classa:methoda(int bar,float[]ack)”)。在另一个实施例中,提取模块307提取app301中的类的名称。在其他实施例中,提取模块307使用标识符而非名称(例如散列)来识别方法(或类)。在另一个实施例中,提取模块提取整块的机器/字节码并将其归一化。将所提取的字节码归一化可涉及例如将可能在不同可执行文件中有差异的索引归一化,同时仍然保留全部机器代码(dalvik/java字节码)语义。在又一个实施例中,提取模块307创建app301中代码309的可能执行路径的流程图。
[0027] 提取模块307还提取每个app301的签名者311的身份。安卓apps301(和许多其他移动环境的apps301)由分发方(如,开发者)签名。例如,安卓系统要求所有apps301用证书进行数字签名,该证书的私有密钥由app301的开发者持有。安卓系统不会安装或运行未正确签名的app301。然而,用于为安卓app301签名的证书不必由认证机构签名。实际上,通常情况是,安卓apps301用由分发方自签名的证书签名。
[0028] 在一个实施例中,提取模块307还获得发布(或首次发现、获得、下载等等)每个app301(如,每个APK文件)的日期315。日期信息可例如从app301的标头中的时间戳获得。在另一个实施例中,未提取或进一步处理日期315。
[0029] 如下文更详细解释,比较不同apps301的代码309和签名者311(和一些实施例中的日期315)相关的数据,以识别木马化apps303。为了便于该比较,木马化app管理系统101的所提取数据存储模块317例如以数组323的形式(或另一种格式,例如数据库、表、列表等等)存储所提取数据(代码309、签名者311和可选地日期315),其中每个条目包含特定app301的所提取数据。在一个实施例中,所述提取数据存储模块317将提取的数据存储在类对象的数组323中,所述类包括成员1)方法,2)签名者和3)日期(可选)。例如,在app类被称为APKInfo的一个实施例中,来自app301的所有方法的完全限定名称的集合存储在APKInfo.methods中。(方法名称的集合可包括例如{void classa:methoda(int a),int classa:methodb(double b),void classb:methodc(void),void classb:methodd(char g)}。)app301的签名者311存储在APKInfo.signer中,并且发布(或发现等等)的日期315存储在APKInfo.date中。
[0030] 应当理解所提取数据的存储的特定实现涉及可变设计参数。例如,代表与app301有关的信息的类(或其他数据结构)的格式,以及用于存储其实例的数组323(或其他数据结构)的格式在各实施例之间可以有差别。另外,如上文所指出的,从每个app301提取的特定数据在各实施例之间也可以有差别。例如,在一些实施例中,提取代码309而非方法名称,例如类别名称、流程图等等。
[0031] 一旦从所获得apps301提取数据并存储,就可通过将其所提取数据与其他所获得apps301的所提取数据进行比较(或在一些优化实施例中与其他的子集进行比较,如下文所解释),确定所获得apps301中的特定app是否为木马化app303。更具体地讲,木马化app管理系统101的比较模块319将从所获得apps301中的特定app提取的代码309相关的数据(如,方法名称、散列、原始字节码等等)与每个其他所获得apps301的代码309相关的数据进行比较。在一个实施例中,通过执行这些比较,比较模块319确定进行木马化分析的所获得apps301中的特定app是否具有与其他中任何一者相同的代码309,以及一些另外的代码309。例如,在所提取的代码309相关的数据为方法名称的形式的实施例中,比较模块319确定apps301中的特定app是否具有与apps301中的另一个app相同的所有方法,以及一个或多个另外的方法。在提取类别名称而非方法名称的实施例中,确定特定app301是否具有与另一个app301相同的类,以及一个或多个另外的类。为使现有app301木马化而添加的代码309不必以新的、单独的类或方法的形式,也可附加或插入到在原始的合法app301中发现的已有方法中去。为了检测以这种方式木马化的apps301,比较模块319可确定特定app301是否包含与另一个app301相同的类别和方法,但特定app301的一个或多个方法中存在一些附加的代码309。该场景也是木马化的指示。由于木马化app303是通过将恶意代码添加到现有的合法app301而创建的,具有与另一个app301相同的代码309以及一些附加代码309的app301如果是由不同作者/签名者生成,则被认为是可疑的。
[0032] 在一些实施例中,与其他apps301进行比较的特定app301不必与另一个被标记为可疑的apps301的所有代码309都相同,而是具有至少预定阈值的公共代码309。预定阈值可以是给定百分比的形式,包括实质多数(如,85%、90%、95%等等)、方法或类的临界子集、功能的临界核心(如由例如流程图等所确定)等等。被标记为可疑的app301中的附加代码309可包括一个或多个附加的方法或类、一个或多个修改的方法或类、预定阈值的附加或修改的功能等等。由于许多apps301通常使用可用的第三方库(如,广告库、用户界面库、通信库等等)实现基本功能,因此,在一些实施例中在确定特定app301与另一个app301是否具有共同的预定阈值的代码309时,此类库被排除在考虑之外。
[0033] 如果进行木马化分析的特定app301的代码309相关的数据与apps301中的另一个app的代码309相关的数据的比较指示特定app301是可疑的,则比较模块319还比较两个apps301的签名者311,并且在一些实施例中,还比较日期315。由于木马化app303是通过修改合法app301、除去其签名并对其重签名而创建的,可预期木马化app303具有与其所基于的合法app301不同的签名者311。另外,由于木马化app303是基于底层的、预先存在的合法app301,木马化app303通常具有更晚的日期315。因此,若基于代码309比较而认为app301可疑,则进行这些另外的比较中的一者或两者。若这指示所考虑的这两个apps301具有不同签名者311(并且另外在一个实施例中,可疑app301具有比另一个app301更晚的日期315),则木马化app管理系统101的木马化app识别模块321识别被分析为木马化app303的特定app301。因此,具有与另一个app301相同的代码309(或至少临界质量的通用代码309)以及一些附加的代码309并具有不同的签名者311(并且在一个实施例中还具有更晚的发布日期315)的app301被判定为木马化app303。通过以这种方式比较每个特定的所获得app301与其他所获得apps301,识别出木马化apps303。
[0034] 若识别出木马化app303,则可根据需要采取各种步骤作出响应。例如,被判非法的app303可进行标记以供人类分析者人工检查,进行排队以用于自动恶意代码分析,报告至集中式安全服务器(未示出),列入黑名单,等等。换句话讲,木马化app管理系统101可充当过滤器,其自动识别具有表现出木马化的某些特征的apps301。被木马化app管理系统101判定非法的apps301可随后根据需要进行处理,例如对它们进行进一步审查和分析,和/或采取保护用户不受其影响的步骤。
[0035] 为了说明木马化app管理系统101的操作,现在更详细描述若干特定例子。应当理解,这些例子中所述的实现细节仅是说明性的,并且可在其他实施例中作出不同的设计选择。在一个特定实施例中,按如下方式识别木马化安卓apps303。
[0036] 从各种已知App商店网站305下载安卓apps301(为APK文件)。类APKInstance用于代表所下载APK文件中的一个特定APK文件,并且具有成员1)APKInstance.methods、2)APKInstance.signer和3)APKInstance.date,其中方法(methods)是APK文件中所有方法的名称的集合,签名者(signer)是APK文件的数字签名者311,并且日期(date)是APK文件的发布日期315。若n为集合中APK文件的数量,则分配具有n个APKInstance对象的数组323APKInfo[n]。
[0037] 对于n个APK文件中的每个文件count=1..n,提取下列信息并存储在APKInfo[count]中:1)将来自APK文件的所有方法的完全限定名称的集合存储在APKInfo[count].methods中;2)将APK文件的数字签名者311存储在APKInfo[count].signer中;以及3)将每个APK文件的发布日期315存储在APKInfo[count].date中。
[0038] 然后检查集合中的每个APK文件,以便通过按如下方式将其与其他APK文件比较,来确定其是否已被木马化。若i等于正检查的APK文件并且count等于APKInfo1...n中所代表的n个APK文件中的每个,对于计数1...n,若计数不等于i,则将APKInfo[i]与APKInfo[count]进行比较。若APKInfo[i].methods包含APKInfo[count].methods中的每个完全限定的方法,并且APKInfo[i].methods包含APKInfo[count].methods中未包含的至少一个附加的方法,并且APKInfo[i].signer指示与APKInfo[count].signer不同的数字签名者311,并且(可选)APKInfo[i].date晚于APKInfo[count].date,则APKInfo[i]被判定为APKInfo[count]的木马化版本。
[0039] 可修改上述实施例以在类别层级而非方法层级上操作。在实施例的基于类的版本中,查看正检查的APK文件是否包含其他APK文件的每个类(而非方法),以及至少一个附加的类。不论是检查方法还是类,这些实施例都可识别新APK文件,所述新APK文件包含来自原始APK文件的代码309的超集(即,具有所有相同代码309以及一些附加的代码309),并且由与原始APK文件不同的签名者311签名。
[0040] 上述实施例(不论在代码分析方面是基于方法还是基于类)具有复杂度O(N2),其中N为要分析的APK文件的数量。可以通过减少需要与给定APK文件进行比较的APK文件集合的方式进行优化,降低时间复杂度(如,降低至O(N))。这可以例如通过如下方式进行:仅将APK文件与具有共同代码309(如,方法)的其他APK文件进行比较,而非与集合中的每个其他APK文件进行比较。
[0041] 例如,在一个优化实施例中,数组APKInfo[1..n]按照每个元素APKInfo[count].methods中的方法的数量从最少方法到最多进行排序(或按照类的数量、或按照如流程图中所指示的代码309的量等等)。创建映射(如,散列映射),其将在集合中的任何APK文件中的每个方法映射到方法所在的每个APK文件的数组323的索引。通过使用上述预构建的映射数据结构,表1中的伪代码所实现的算法可用于有效地识别木马化APK。应当理解,表1中的伪代码示出了一个可能实施例的特定例子,其经优化以降低时间复杂度。
[0042] 表1
[0043]
[0044] 应当理解,上述实施例的变型形式是可行的。一般来讲,该过程可通过如下方式优化:基于所比较的app301之间应具有必需量的共同代码309,仅将特定app301与集合中的其他apps301的子集进行比较,以避免在不可能检测到木马化apps303的apps301之间进行比较。
[0045] 图4示出了根据一些实施例的木马化app管理系统101的操作的步骤。在401处,app获取模块313从一个或多个外部来源305获得特定移动环境的多个apps301。在403处,提取模块307从每个所获得app301提取1)代码309相关的数据、2)数字签名者311的身份、以及(可选)3)发布日期315。在405处,所提取数据存储模块317存储所提取数据(代码309、数字签名者311和可选地日期315)。对于所获得apps301中每个给定的特定app,在407处,比较模块319将特定app301的代码309相关的数据与其他所获得apps301的代码309相关的数据进行比较,以确定特定app301是否1)包含与其他apps301中的一者共同的至少预定阈值量的代码309,以及2)包含其他app301中不含有的附加代码309(如,特定app301具有其他app301的代码309的超集)。对这样的情况作出响应,在409处,比较模块319进一步将特定app301的数字签名者311与其他app301的数字签名者311进行比较,并且可选地将特定app301的日期315与其他app301的日期315进行比较。在411处,对如下情况作出响应,木马化app识别模块
321将特定app301识别为木马化app303:1)特定app301包含与其他app301共同的至少预定阈值量的代码309,2)特定app301包含其他app301中不含有的附加代码309,3)特定app301的数字签名者311与其他app301的数字签名者311不同,以及(可选)4)特定app301的日期
315晚于其他app301的日期315。
[0046] 如熟悉本领域的技术人员所理解的,在不脱离本发明的精神或实质特征的情况下,本发明可以以其他特定形式来体现。同样地,部分、模块、代理程序、管理器、组件、功能、规程、动作、层、特征、属性、方法论、数据结构和其他方面的具体命名和划分不是强制性的或重要的,并且实现本发明的机制或其特征可具有不同名称、划分和/或格式。出于解释目的,已参考特定实施例描述了以上说明书。然而,以上示例性讨论并非意图是穷举的或限制为所公开的精确形式。鉴于上述教导,许多修改形式和变型形式都是可能的。为了最好地解释相关原理及其实际应用,选择并描述了实施例,由此使得本领域其他技术人员最好地利用具有或不具有可适合所设想的具体用途的各种修改形式的各种实施例。