应用程序检测方法和装置制造方法

文档序号:6628058阅读:327来源:国知局
应用程序检测方法和装置制造方法
【专利摘要】本发明提供一种应用程序检测方法和装置,其中,该方法包括:从第一虚拟机中获取安卓系统中第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称;根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。从而随时分析应用程序运行时是否执行恶意行为,提高检测精确率,解决了现有技术中的问题。
【专利说明】应用程序检测方法和装置

【技术领域】
[0001]本发明涉及通信【技术领域】,尤其涉及一种应用程序检测方法和装置。

【背景技术】
[0002] 随着科技的发展和安卓(英文:Android)系统的迅速普及,用于运行Android系 统的设备越来越多,例如:智能手机、平板电脑等,而且为Android系统开发的应用程序也 越来越多,因此用户可以在Android系统的设备上会安装各种各样的应用程序,同时也需 要安装应用程序检测软件对这些应用程序进行检测,如设备中存储有用户的大量隐私信 息,为了避免用户的隐私信息被一些恶意的应用程序获取,在Android系统的设备上需要 有应用程序检测软件能检测出这些恶意的应用程序,以避免用户信息泄露。
[0003] 现有技术中通过在Android系统的设备中安装各应用程序的时候,采用安全检测 软件对各应用程序的安装包进行检测,以确定该应用程序是否会执行恶意行为。然而,这种 方式不能对各应用程序的更新包进行检测,从而无法检测出更新包中引发的恶意行为,导 致检测精确率低。


【发明内容】

[0004] 本发明提供一种应用程序检测方法和装置,用于提尚检测精确率,解决了现有技 术中的问题。
[0005] 第一方面,本发明提供一种应用程序检测方法,包括:
[0006] 从第一虚拟机(例如Dalvik虚拟机)中获取Android系统中第一应用程序运行 时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接 口所属的类的名称、所述第一接口所属的目录的名称;
[0007] 根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述 第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口 的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的 名称。
[0008] 第二方面,本发明提供一种应用程序检测装置,包括:
[0009] 第一获取单元,用于从第一虚拟机(例如Dalvik虚拟机)中获取Android系统中 第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的 名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称;
[0010] 第一确定单元,用于根据所述获取单元获取的所述第一接口的信息与预设接口信 息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息 集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预 设接口所属的类的名称、所述预设接口的名称。
[0011] 本发明实施例提供的应用程序检测和装置,通过获取Android系统中第一应用程 序运行时所执行的第一接口的信息;并根据所述第一接口的信息与预设接口信息集中一预 设接口的信息匹配,确定所述第一应用程序执行恶意行为。可以通过虚拟机来获取应用程 序运行时所执行的接口的信息,从而随时分析应用程序运行时是否执行恶意行为,提高检 测精确率,解决了现有技术中的问题。

【专利附图】

【附图说明】
[0012] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根 据这些附图获得其他的附图。
[0013] 图1为本发明应用程序检测方法实施例一的流程图;
[0014] 图2为本发明应用程序检测方法实施例二的流程图;
[0015] 图3为本发明实施例提供的第一应用程序运行时所执行的接口的信息的一种示 意图;
[0016] 图4为本发明实施例提供的预设接口信息集的一种示意图;
[0017] 图5为本发明实施例提供的根据第一接口的信息查找三级链表的一种示意图;
[0018] 图6为本发明应用程序检测方法实施例三的流程图;
[0019] 图7为本发明实施例提供的应用程序检测装置的第一应用界面的一种示意图;
[0020] 图8为本发明实施例提供的应用程序检测装置的第二应用界面的一种示意图;
[0021] 图9为本发明应用程序检测装置实施例一的结构示意图;
[0022] 图10为本发明应用程序检测装置实施例二的结构示意图。

【具体实施方式】
[0023] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0024] 图1为本发明应用程序检测方法实施例一的流程图,如图1所示,本实施例的方法 可以由应用程序检测装置来执行,例如:应用程序检测软件,本实施例的方法可以包括:
[0025] S101、从第一虚拟机中获取安卓系统中第一应用程序运行时所执行的第一接口的 信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述 第一接口所属的目录的名称。
[0026] 本实施例中第一虚拟机可以为Dalvik虚拟机,Dalvik虚拟机是安卓(英文: Android)系统中应用程序的虚拟机,也是Android系统中Java程序的运行基础,Android 系统中的每一个应用程序在底层都会对应一个独立的Dalvik虚拟机实例,应用程序的代 码在Dalvik虚拟机的解释器下得以执行,Dalvik虚拟机中的解释器在执行应用程序时, 可以获得该应用程序所执行的所有接口的信息,从而本实施例中的应用程序检测装置可以 获取第一应用程序所执行的第一接口的信息,第一应用程序可以为Android系统中所有应 用程序中任一应用程序,第一接口可以为第一应用程序所执行的所有接口中的任一接口。 该第一接口的信息包括第一接口的名称、第一接口所属的类的名称、第一接口所属的目录 的名称,例如:第一接口 的信息可以为:D/dalvikvm(l772) :Landroid/net/LocalSocket ;· connect。其中,net (中文:网络)为第一接口所属的目录的名称,LocalSocket (中文:本 地套接字)为第一接口所属的类的名称,connect (中文:连接)为第一接口的名称。
[0027] S102、根据所述第一接口的信息与预设接口信息集中任一预设接口的信息匹配, 确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述 预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预 设接口的名称。
[0028] 本实施例中,预先设置有预设接口信息集,预设接口信息集包括各预设接口的信 息,预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述 预设接口的名称。预设接口可以为敏感接口,若第一应用程序所执行的第一接口为各预设 接口中的一个,则可以确定第一应用程序执行了敏感接口,从而可以确定该第一应用程序 执行了恶意行为。确定第一接口是否为各预设接口中的一个,可以通过判断第一接口的信 息是否与预设接口信息集中一预设接口的信息匹配,若匹配,则确定第一接口为各预设接 口中的一个,若不匹配,则确定第一接口不是预设接口。判断第一接口的信息是否与预设接 口信息集中一预设接口的信息匹配,具体地,判断第一接口的信息中的第一接口所属的目 录的名称、第一接口所属的类的名称、第一接口的名称是否分别与一预设接口的信息中的 预设接口所属的目录的名称、预设接口所属的类的名称、预设接口的名称一致,若一致,则 确定第一接口的信息与预设接口信息集中任一预设接口的信息匹配,若不一致,则确定第 一接口的信息与预设接口信息集中一预设接口的信息不匹配。
[0029] 例如:若预设接口信息集中的一预设接口的信息为:net/LocalSocket/connect, 则第一接口所属的目录的名称也为net,第一接口所属的类的名称也为LocalSocket,第一 接口的名称也为connect,从而可以确定第一接口的信息与预设接口信息集中一预设接口 的信息区配。
[0030] 需要说明的是,若第一应用程序执行的所有接口中没有一个接口为预设接口,则 可以确定第一应用程序执行的是安全行为。
[0031] 本发明实施例提供的应用程序检测方法,通过获取Android系统中第一应用程序 运行时所执行的第一接口的信息;并根据所述第一接口的信息与预设接口信息集中一预设 接口的信息匹配,确定所述第一应用程序执行恶意行为。可以通过虚拟机来获取应用程序 运行时所执行的接口的信息,从而随时分析应用程序运行时是否执行恶意行为,提高检测 精确率,解决了现有技术中的问题。
[0032] 图2为本发明应用程序检测方法实施例二的流程图,如图2所示,本实施例的方法 可以由应用程序检测装置来执行,例如:应用程序检测软件,本实施例的方法可以包括:
[0033] S201、获取Zygote进程的进程号。
[0034] 本实施例中,Android系统是基于Linux的多任务系统,同一时刻Android系统中 可能存在多个进程在同时运行,这些进程中不仅包括应用程序还包括大量的系统进程,因 此需要确定这些进程中哪些进程是应用程序的进程。
[0035] 在Android系统系统中,Zygote进程是由init进程启动的一个重要的进程,它是 一个第一虚拟机,比如Dalvik虚拟机,的进程,同时也是一个Dalvik虚拟机实例的孵化器。 每当Android系统要求执行一个应用程序时,Zygote进程就会孵化(FORK)出一个进程来 执行该应用程序,该进程为该应用程序的进程,因此应用程序的进程的父进程为Zygote进 程,从而可以根据进程的父进程是否为Zygote进程来判断该进程是否为应用程序的进程。 判断应用程序的进程的父进程是否为Zygote进程,即判断应用程序的进程的父进程的进 程号与Zygote进程的进程号是否相同,因此,本实施例可以先获取Zygote进程的进程号, 例如可以通过接口 findZygotePid()获得Zygote进程的进程号,具体可以通过如下所示的 代码来实现:
[0036] pid_t fmdZygotePid(char ^pidName) { ? * * ·?· 中包IS&jl的迸程儒:息,读取壤貝謙 opendir("/proc"); :*·.:?: ·:> //遍历/proc里面的目录 while ((next = readdir(dir)) != NULL) | //设置进程
[0037] sprintf(fi!ename, "/piOc/%s/statos", nexlr^i_iiame), if (! (status = fbpen(filename, "r"]p) { continue; if (fgets(buffer, EEAD_BUF-SIZE-1,status)拿 NULL) { fclose(status); continue:;; fclose(status); //得到进糧M sscanf(buffer, "%*s %s", name); if(strcmp(nam0s pdName) == 0) { pid_t spZg = stitol(next->dj3amesuNtlLL·, 0), return spZg; } }
[0038] S202、当第一进程运行时,获取所述第一进程的父进程的进程号。
[0039] S203、根据所述第一进程的父进程的进程号与所述Zygote进程的进程号相同,确 定所述第一进程所在的应用程序为所述第一应用程序。
[0040] 本实施例中,在Android系统中有进程运行时,如第一进程运行时,第一进程为 Android系统中当前运行的所有进程中的任一进程,可以获取第一进程的父进程的进程号, 如可以通过getppidO接口获得第一进程的父进程号。然后判断该第一进程的父进程的进 程号与Zygote进程的进程号是否相同,若确定第一进程的父进程的进程号与Zygote进程 的进程号不相同,则确定第一进程不是应用程序的进程,若确定第一进程的父进程的进程 号与Zygote进程的进程号相同,贝 1J第一进程是应用程序的进程,可以称第一进程所在的应 用程序为第一应用程序。具体可以通过如下所示的代码来实现:
[0041] if (getppidO =- pidZygote) {
[0042] 愤 e pthr轉WUIi,(vqM *)dete^_th聯d,NULL》; ? · *.?.? · }
[0043] S2〇4、从第一虚拟机中获取所述第一应用程序运行时所执行的第一接口的信息, 所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一 接口所属的目录的名称、所述第一接口所属的库的名称。
[0044] 本实施例中,从Dalvik虚拟机中获取所述第一应用程序运行时所执行的第一接 口的信息的具体实现过程与图1所示的S101的具体实现过程类似,此处不再赘述。值得注 意的是,本实施例中的第一接口的信息包括:所述第一接口所属的库的名称、所述第一接口 所属的目录的名称、所述第一接口所属的类的名称、所述第一接口的名称。
[0045] 在第一应用程序执行过程中,Dalvik虚拟机可以输出该第一应用程序所调用的接 口的伯息,如图3所不,第一应用程序在运行时会执行三类库中的接口,这三类库的名称分 别为:Ljava、Lcom、Landroid,Ljava中的接口表示java库里面的接口,Lcom中的接口表 示开发者开发的接口,Landroid中的接口表示Android Framework(框架)里面的接口,而 Landroid中的接口为Android系统调用的接口。
[0046] S2〇5、根据所述第一接口所属的库的名称为安卓本地库,确定所述第一接口为安 卓系统的应用程序编程接口(Application Programming Interface,简称:API)。
[0047] 本实施例中,第一接口可以为第一应用程序所执行的所有接口中的任一接口, 在获取第一接口的信息后,可以判断第一接口的信息中第一接口所属的库的名称是否为 安卓本地库(英文:Landroid),若确定第一接口的信息中第一接口所属的库的名称不是 Landroid,即第一接口所属的库的名称为L java或Lcom,则该接口不是Android系统调用的 接口,则对于该第一接口而言,则结束检测流程;若确定第一接口的信息中第一接口所属的 库的名称是Landroid,则该第一接口是Android系统调用的接口,即该第一接口为Android 系统的API,然后再执行S206。
[0048] S2〇6、根据预设接口信息集,生成三级链表,所述预设接口信息集包括各预设接口 的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的 名称、所述预设接口的名称,所述三级链表的第一级存储各预设接口所属的目录的名称,所 述三级链表的第二级存储各预设接口所属的类的名称,所述三级链表的第三级存储各预设 接口的名称。
[0049]本实施例中,预设接口信息集可以存储在工作目录(如/data/, security/)中, 该工作目录的属性为可读写,预设接口信息集可以存储在func_malware. h文件中,如图 4所示,图4中示出6个预设接口的信息,net和os分别为预设接口所在的目录的名称, UriSAbstractPart、LocalSocket、Parcel、MessageQueue 分别为预设接口所在的类的名 称,getDecoded、connect、recycle、obtain、rcelable、removeMessages 分别为预设接口 的名称。本实施例可以根据预设接口信息集来生成易于查找的三级链表,该三级链表可以 存储在内存中,该三级链表包括三级,第一级存储各预设接口所属的目录的名称,用于查 找Landroid库中的不同目录,例如第一级可以包括: andr〇id. bluetooth、android, media、 android· net、android、net. http、android· net. wifi、android· telephony ;第二级存储各 预设接口所属的类的名称,用于查找各目录中的不同类:例如目录android, net中的第二 级可以包括:android· net/ConnectivityManager、android. net/LocalSocket、android. net/TrafficStats ;第三级存储各预设接口的名称,用于查找各类中的不同接口,例如目 录 android, net 中类 LocalSocket 中的第三级可以包括:android. net/LocalSocket/ connectO、android· net/LocalSocket./close()、android· net/LocalSocket/ getFileDescriptor() 'android. net/LocalSocket/getLocalSocketAddress()。
[0050] 其中,根据预设接口信息集,生成三级链表可以通过如下所示的函数来实现: static int create-detect-list()〇
[0051] S207、根据所述第一接口的信息,查找所述三级链表。
[0052] S2〇S、若所述第一接口的信息在所述三级链表中能查找到,则确定所述第一应用 程序执行恶意行为。
[0053] 本实施例中,在获取第一应用程序在运行时所执行的第一接口的信息以及根据预 设接口信息集生成三级链表之后,根据第一接口的信息来查找三级链表,若第一接口的信 息为Landroid/net/LocalSocket->connect (),具体实现过程如图5所示,三级链表中的 第一级(目录的名称)为net (中文:网络)、telephony (中文:电话)、bluetooth (中文: 蓝牙),其它目录的名称未示出,其中,第一级目录net包括的第二级(类的名称)分别为 LockSocket (中文:本地套接字)、LockSocketService (中文:本地套接字服务)、Proxy (中 文:代理),其它目录中的第二级和第三级未示出;第一级目录net中第二级LockSocket 包括的第三级(接口的名称)分别为connectO (中文:连接())、cl〇se()(中文:关闭 ())、Bind()(中文:绑定());其它类中的第三级未示出。根据第一接口的信息中第一接 口所在的目录的名称net去查找三级链表中的第一级,可以命中第一级中的 net,然后根据 第一接口的信息中第一接口所在的类的名称LocalSocket去查找刚刚查找到的第一级中 net中的第二级,可以命令第二级中的LocaSoket,然后根据第一接口的信息中第一接口的 名称connectO去查找刚刚查找到的第二级LocaSoket中的第三级,可以命令第三级中的 connect (),表示第一接口的信息在第三级链表中能查找到,第一接口为预设接口,从而可 以确定第一应用程序执行恶意行为。若第一接口的信息中的第一接口所在的目录的名称、 第一接口所在的类的名称、第一接口的名称中至少一个未在三级链表中查找到,则说明第 一接口不是预设接口,从而可以确定第一应用程序未执行恶意行为。
[0054] 其中,根据所述第一接口的信息查找所述三级链表可以通过如下所示的函数来实 3? :static int match_method(char氺classdis,char氺method-name)〇
[0055] 本实施例,通过虚拟机来获取应用程序运行时所执行的接口的信息,从而随时分 析应用程序运行时是否执行恶意行为,提高检测精确率,解决了现有技术中的问题。
[0056] 图6为本发明应用程序检测方法实施例三的流程图,如图6所示,本实施例的方法 可以由应用程序检测装置来执行,例如:应用程序检测软件,本实施例的方法可以包括:
[0057] S301、获取Zygote进程的进程号。
[0058] S302、当第一进程运行时,获取所述第一进程的父进程的进程号。
[0059] S303、根据所述第一进程的父进程的进程号与所述Zygote进程的进程号相同,确 定所述第一进程所在的应用程序为所述第一应用程序。
[0060] S304、从第一虚拟机中获取所述第一应用程序运行时所执行的第一接口的信息, 所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一 接口所属的目录的名称、所述第一接口所属的库的名称。
[0061] S305、根据所述第一接口所属的库的名称为安卓本地库,确定所述第一接口为安 卓系统的API。
[0062] 本实施例中,S301-S305的具体实现过程与图2所示的S201-S205的具体实现过 程类似,此处不再赘述。
[0063] S306、根据先入先出的队列形式,将所述第一接口的信息进行存储。
[0064] 本实施例中,若第一应用程序执行的安卓(英文:Android)系统的API为多个,第 一接口为第一应用程序执行的Android系统的API中的任一个,而且检测第一接口的信息 与预设接口信息集中一预设接口的信息是否匹配需要耗费一定的时间,因此,在确定第一 接口为Android系统的API之后,可以将该第一接口的信息根据先入先出的队列形式进行 缓存,其中,该队列形式的实现需要实现如下所述的接口:
[0065] 队列初始化:detect_queue_init ();
[0066] 队列销毁:detect_queue_des ();
[0067] 入队:detect_queue_in();
[0068] 出队:detect_queue_out ();
[0069] 判断队列空:detect_queue_empty();
[0070] 判断队列满:detect_queue_full ()。
[0071] 其中,第一接口的信息可以以如下所述的数据结构进行缓存:
[0072] Ipedef ste?t && {J ,点数据 char app_name[50]; // 进程名 int app_pid; // 进程 _id char ?fessjfap?]; char method-na_me[50]。 } QOEDAm,
[0073] 例如,在确定第一接口为Android系统的API后,可以为先入先出队列分配缓存空 间,用于缓存第一接口的信息,具体可以通过如下所述的代码实现:
[0074] if I flagSee &#: NULL !- strstr(curMethod->clazz->descnptGr, "Landroid") && !g_pq->destoryed ) { fi^UEDATA pqdiia; pqdata = (pQUEDATA;|malloc(sizeof(QUEDATA)); |5giata-^app_pid = self->systemTid; memcpy(pqdata->class_des, curMethod->clazz->descriptor, sti len(curMethod->clazz->descriptor)+l); :memcpy(pqdata->method_name, cur!Vlethod->imdK::,: strJen(curMethod->name)+1); pthread_mufex^lock(&queue_lock); inQueue(g_pqs pqdata); pthread_mutex_unlock(&queue_l@dk|; i
[0075] S307、根据先入先出的队列形式,获取存储的所述第一接口的信息。
[0076] 本实施例中,在第一接口根据先入先出的队列形式进行缓存后,在需要对第一接 口进行检测埋,根据先入先出的队列形式,获取缓存的第一接口的信息,然后再执行S308。 [0077] S308、根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确 定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预 设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设 接口的名称。
[0078] 本实施例中,S308的具体实现过程与图1所示的S102或图2所示的S206-S208的 具体实现过程类似,详细可以参见上述方法实施例中的相关记载,此处不再赘述。
[0079] S309、生成日记记录文件,所述日记记录文件包括:所述第一应用程序的名称、所 述第一应用程序执行的所述第一接口的信息、以及所述第一应用程序执行所述第一接口的 时间。
[0080] 本实施例中,在确定第一接口为预设接口后,生成日记记录文件,日记记录文件包 括:第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息、以及所述第一应 用程序执行所述第一接口的时间。例如日记记录文件为log文件,该log文件以第一应用 程序的名称来命令,即app_name. log文件,对第一应用程序执行的所有Android系统的API 进行检测后,可以确定第一应用程序执行的至少一个Android系统的API为预设接口,该至 少一个Android系统的API的信息可以记录在app_name. log中,而且相应的Android系统 的API的执行时间也可以记录在app_name. log中。为了不影响Android系统的运行速度, 这个日记记录文件大多数时间缓存在内存里,只有在特定的时刻,如Android系统空闲、第 一应用程序退出才回写到文件系统中。
[0081] 可选地,图2所示的S206中提到的工作目录(如/data/· security/)还可以存储 S309中所生成的日记记录文件,即log文件,该工作目录的初始化过程可以通过如下所示 的代码来实现:
[0082] int mkdir_security() { if (NULL opendii|7data/,securtyl,log/,H)) { if ( ENOENT = cirno ) { // directory /data/.sccurity/ not exist then create it mkdir("/data/.sccurity/log/", 0); chmod("/data/.security/1 og/", 0777); mtum 0· }
[0083] 可选地,S307-S309的具体过程可以通过如下所示的代码来实现:
[0084] //从队列里取数据 pthread_mutex_lock(?&queue_Iock); if (!IsEmpty(pq)) {
[0085] outQueue(pq, &data); I else { pthread_ffluti5i_unlock(&queue_Iock); return; } pth read_rautex_unloc k( &queue_lock); //在链表里搜憲:動据,愈匹駆處:霜m回,匹配成功继续执行 if ( 0 != match_method(tmp_class_des, data.method_name)) // not match return; //保存数据到文件app_name.log f]puts(data.class_deSi 喔;// store claisyfe fputs(data.method_name, fp); // stori method_name /Γ获得系统时间弁保存到文件app_imim:to| time(&rawtime); tiineinfb = localtime(&rawtime); sprintf(strtime, "%4d-%02d-%02d %02d:%02d:%02d", 1900 + iar, 1 + timeinfo->tm_mon, timcinfo->tm mday, timcinfo->tm_min, timcinfo->tm_sec); fputs(strtimc, fp);
[0086] 本实施例,通过虚拟机来获取应用程序运行时所执行的接口的信息,从而随时分 析应用程序运行时是否执行恶意行为,提高检测精确率,解决了现有技术中的问题。
[0087]在本发明应用程序检测方法实施例四中,本实施例的方法在图6所示方法实施例 的基础上,进一步地,还可以包括:根据所述日记记录文件,显示所述第一应用程序的名称、 所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接口 的时间。
[0088]本实施例中,在对第一应用程序的所有第一接口检测完成之后,生成日记记录文 件,然后再根据日记记录文件向用户显示(如在屏幕上显示)第一应用程序的名称、所述第 一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接口的时间。 或者,根据用户需要,如获取到用户输入的查看指令,根据日记记录文件显示所述第一应用 程序的名称、所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所 述第一接口的时间。
[0089] 例如:应用程序检测装置可以扫描工作目录/data/· security/log/里面的文件, 读取文件app_name. log中的内容,如第一应用程序的名称、第一应用程序调用的第一接口 的信息、调用时间,并将这些内容呈现给用户。该应用程序检测装置的第一应用界面如图7 所示,该第一应用界面显示执行了恶意行为的所有应用程序的名称,第一应用界面中是一 个纵向列表,每一表项对应一个应用程序检测结果。用户点击每个表项,即点击每个应用程 序的名称,即可进入第二应用界面,第二应用界面将显示详细的检测结果,如图8所示,第 二应用界面是所选的应用程序的检测结果,里面列出了检测到的应用程序调用预设接口的 详细信息,包括各接口所在的目录的名称、各接口所在的类的名称、各接口的名称、各接口 调用的时间。
[0090] 在本发明应用程序检测方法实施例五中,本实施例五在图6所示的方法实施例的 基础上,本实施例的应用程序检测装置作为一个插件,将检测后生成的日记记录文件提供 给其它的安全检测软件,由其它的安全检测软件向用户显示第一应用程序的恶意行为,使 得其它的安全检测软件具有动态检测的能力,且无需对framework层做大量修改。
[0091] 图9为本发明应用程序检测装置实施例一的结构示意图,如图9所示,本实施例的 装置可以包括:第一获取单元11和第一确定单元12,其中,第一获取单元11用于从第一虚 拟机(例如Dalvik虚拟机)中获取安卓(英文 :Android)系统中第一应用程序运行时所 执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所 属的类的名称、所述第一接口所属的目录的名称;第一确定单元12用于根据所述获取单元 获取的所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应 用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息 包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。
[0092] 本实施例的装置,可以用于执行本发明上述方法实施例的技术方案,其实现原理 和技术效果类似,此处不再赘述。
[0093] 图10为本发明应用程序检测装置实施例二的结构示意图,如图10所示,本实施例 的装置在图9所示装置结构的基础上,进一步地,还可以包括:第一生成单元13,该第一生 成单元13用于在第一确定单元12根据所述第一接口的信息与预设接口信息集中一预设接 口的信息匹配,确定所述第一应用程序执行恶意行为之前,根据所述预设接口信息集,生成 三级链表,所述三级链表的第一级存储各预设接口所属的目录的名称,所述三级链表的第 二级存储各预设接口所属的类的名称,所述三级链表的第三级存储各预设接口的名称;第 一确定单元I2具体用于根据所述第一接口的信息,查找所述三级链表;若所述第一接口的 信息在所述三级链表中能查找到,则确定所述第一应用程序执行恶意行为。
[0094] 可选地,本实施例的装置还可以包括:第二确定单元14 ;上述的第一获取单元11 还用于在获取Android系统中第一应用程序运行时所执行的第一接口的信息之前,获取 Zygote进程的进程号;以及当第一进程运行时,获取所述第一进程的父进程的进程号;第 二确定单元14用于根据所述第一进程的父进程的进程号与所述 Zyg〇te进程的进程号相 同,确定所述第一进程所在的应用程序为所述第一应用程序。
[0095] 可选地,本实施例的装置还可以包括:第三确定单元15;所述第一接口的信息 还包括所述第一接口所属的库的名称;该第三确定单元15,用于在第一获取单元11获取 Android系统中第一应用程序运行时所执行的第一接口的信息之后,根据所述第一接口所 属的库的名称为安卓本地库(英文:Landroid),确定所述第一接口为Android系统的API。 [0096] 可选地,本实施例的装置还可以包括:存储单元16和第二获取单元17,其中,存储 单元16用于在第三确定单元15确定所述第一接口为Android系统的应用程序编程接口 API之后,根据先入先出的队列形式,将所述第一接口的信息进行存储;第二获取单元17用 于在第一确定单元12根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹 配,确定所述第一应用程序执行恶意行为之前,根据先入先出的队列形式,获取存储的所述 第一接口的信息。
[0097] 可选地,本实施例的装置还可以包括:第二生成单元18,该第二生成单元18用于 在第一确定单元12根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹 配,确定所述第一应用程序执行恶意行为之后,生成日记记录文件,所述日记记录文件包 括:所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息、以及所述第 一应用程序执行所述第一接口的时间。
[0098] 可选地,本实施例的装置还可以包括:显示单元19,该显示单元19,用于在第二 生成单元18生成日记记录文件之后,根据所述日记记录文件,显示所述第一应用程序的名 称、所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接 口的时间。
[0099]本实施例的装置,可以用于执行本发明上述方法实施例的技术方案,其实现原理 和技术效果类似,此处不再赘述。
[0100] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通 过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程 序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟 或者光盘等各种可以存储程序代码的介质。
[0101]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制; 尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其 依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征 进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技 术方案的范围。
【权利要求】
1. 一种应用程序检测方法,其特征在于,包括: 从第一虚拟机中获取安卓系统中第一应用程序运行时所执行的第一接口的信息,所述 第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口 所属的目录的名称; 根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一 应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信 息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。
2. 根据权利要求1所述的方法,其特征在于,所述根据所述第一接口的信息与预设接 口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,还包括: 根据所述预设接口信息集,生成三级链表,所述三级链表的第一级存储各预设接口所 属的目录的名称,所述三级链表的第二级存储各预设接口所属的类的名称,所述三级链表 的第三级存储各预设接口的名称; 所述根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述 第一应用程序执行恶意行为,包括: 根据所述第一接口的信息,查找所述三级链表; 若所述第一接口的信息在所述三级链表中能查找到,则确定所述第一应用程序执行恶 意行为。
3. 根据权利要求1或2所述的方法,其特征在于,所述获取安卓系统中第一应用程序运 行时所执行的第一接口的信息之前,还包括: 获取Zygote进程的进程号; 当第一进程运行时,获取所述第一进程的父进程的进程号; 根据所述第一进程的父进程的进程号与所述Zygote进程的进程号相同,确定所述第 一进程所在的应用程序为所述第一应用程序。
4. 根据权利要求1-3任意一项所述的方法,其特征在于,所述第一接口的信息还包括 所述第一接口所属的库的名称; 所述获取安卓系统中第一应用程序运行时所执行的第一接口的信息之后,还包括: 根据所述第一接口所属的库的名称为安卓本地库,确定所述第一接口为安卓系统的应 用程序编程接口 API。
5. 根据权利要求4所述的方法,其特征在于,所述确定所述第一接口为安卓系统的应 用程序编程接口 API之后,还包括: 根据先入先出的队列形式,将所述第一接口的信息进行存储; 所述根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述 第一应用程序执行恶意行为之前,还包括: 根据先入先出的队列形式,获取存储的所述第一接口的信息。
6. 根据权利要求1-5任意一项所述的方法,其特征在于,所述根据所述第一接口的信 息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之 后,还包括: 生成日记记录文件,所述日记记录文件包括:所述第一应用程序的名称、所述第一应用 程序执行的所述第一接口的信息、以及所述第一应用程序执行所述第一接口的时间。
7. 根据权利要求6所述的方法,其特征在于,所述生成日记记录文件之后,还包括: 根据所述日记记录文件,显示所述第一应用程序的名称、所述第一应用程序执行的所 述第一接口的信息以及所述第一应用程序执行所述第一接口的时间。
8. -种应用程序检测装置,其特征在于,包括: 第一获取单元,用于从第一虚拟机中获取安卓系统中第一应用程序运行时所执行的第 一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的 名称、所述第一接口所属的目录的名称; 第一确定单元,用于根据所述获取单元获取的所述第一接口的信息与预设接口信息集 中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包 括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接 口所属的类的名称、所述预设接口的名称。
9. 根据权利要求8所述的装置,其特征在于,还包括: 第一生成单元,用于在所述第一确定单元根据所述第一接口的信息与预设接口信息集 中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,根据所述预设接口 信息集,生成三级链表,所述三级链表的第一级存储各预设接口所属的目录的名称,所述三 级链表的第二级存储各预设接口所属的类的名称,所述三级链表的第三级存储各预设接口 的名称; 所述第一确定单元具体用于根据所述第一接口的信息,查找所述三级链表;若所述第 一接口的信息在所述三级链表中能查找到,则确定所述第一应用程序执行恶意行为。
10. 根据权利要求8或9所述的装置,其特征在于,还包括:第二确定单元; 所述第一获取单元还用于在获取安卓系统中第一应用程序运行时所执行的第一接口 的信息之前,获取Zygote进程的进程号;以及当第一进程运行时,获取所述第一进程的父 进程的进程号; 所述第二确定单元,用于根据所述第一进程的父进程的进程号与所述Zygote进程的 进程号相同,确定所述第一进程所在的应用程序为所述第一应用程序。
11. 根据权利要求8-10任意一项所述的装置,其特征在于,还包括:第三确定单元;所 述第一接口的信息还包括所述第一接口所属的库的名称; 所述第三确定单元,用于在所述第一获取单元获取安卓系统中第一应用程序运行时所 执行的第一接口的信息之后,根据所述第一接口所属的库的名称为安卓本地库,确定所述 第一接口为安卓系统的应用程序编程接口 API。
12. 根据权利要求11所述的装置,其特征在于,还包括: 存储单元,用于在所述第三确定单元确定所述第一接口为安卓系统的应用程序编程接 口 API之后,根据先入先出的队列形式,将所述第一接口的信息进行存储; 第二获取单元,用于在所述第一确定单元根据所述第一接口的信息与预设接口信息集 中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,根据先入先出的队 列形式,获取存储的所述第一接口的信息。
13. 根据权利要求8-12任意一项所述的装置,其特征在于,还包括: 第二生成单元,用于在所述第一确定单元根据所述第一接口的信息与预设接口信息集 中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之后,生成日记记录文件, 所述日记记录文件包括:所述第一应用程序的名称、所述第一应用程序执行的所述第一接 口的信息、以及所述第一应用程序执行所述第一接口的时间。
14.根据权利要求13所述的装置,其特征在于,还包括: 显示单元,用于在所述第二生成单元生成日记记录文件之后,根据所述日记记录文件, 显示所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息以及所述第 一应用程序执行所述第一接口的时间。
【文档编号】G06F21/56GK104268473SQ201410492215
【公开日】2015年1月7日 申请日期:2014年9月23日 优先权日:2014年9月23日
【发明者】梁志刚, 高翔, 孟小甫, 蓝小明 申请人:龙芯中科技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1