著录项信息
专利名称 | 应用程序检测方法和装置 |
申请号 | CN201410492215.X | 申请日期 | 2014-09-23 |
法律状态 | 暂无 | 申报国家 | 暂无 |
公开/公告日 | 2015-01-07 | 公开/公告号 | CN104268473A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/56 | IPC分类号 | G;0;6;F;2;1;/;5;6查看分类表>
|
申请人 | 龙芯中科技术有限公司 | 申请人地址 | 北京市海淀区中关村环保科技示范园龙芯产业园2号楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 龙芯中科技术股份有限公司 | 当前权利人 | 龙芯中科技术股份有限公司 |
发明人 | 梁志刚;高翔;孟小甫;蓝小明 |
代理机构 | 北京同立钧成知识产权代理有限公司 | 代理人 | 刘芳 |
摘要
本发明提供一种应用程序检测方法和装置,其中,该方法包括:从第一虚拟机中获取安卓系统中第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称;根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。从而随时分析应用程序运行时是否执行恶意行为,提高检测精确率,解决了现有技术中的问题。
1.一种应用程序检测方法,其特征在于,包括:
从第一虚拟机中获取安卓系统中第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称;
根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称;
其中,所述获取安卓系统中第一应用程序运行时所执行的第一接口的信息之前,还包括:
获取Zygote进程的进程号;
当第一进程运行时,获取所述第一进程的父进程的进程号;
根据所述第一进程的父进程的进程号与所述Zygote进程的进程号相同,确定所述第一进程所在的应用程序为所述第一应用程序。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,还包括:
根据所述预设接口信息集,生成三级链表,所述三级链表的第一级存储各预设接口所属的目录的名称,所述三级链表的第二级存储各预设接口所属的类的名称,所述三级链表的第三级存储各预设接口的名称;
所述根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为,包括:
根据所述第一接口的信息,查找所述三级链表;
若所述第一接口的信息在所述三级链表中能查找到,则确定所述第一应用程序执行恶意行为。
3.根据权利要求2所述的方法,其特征在于,所述第一接口的信息还包括所述第一接口所属的库的名称;
所述获取安卓系统中第一应用程序运行时所执行的第一接口的信息之后,还包括:
根据所述第一接口所属的库的名称为安卓本地库,确定所述第一接口为安卓系统的应用程序编程接口API。
4.根据权利要求3所述的方法,其特征在于,所述确定所述第一接口为安卓系统的应用程序编程接口API之后,还包括:
根据先入先出的队列形式,将所述第一接口的信息进行存储;
所述根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,还包括:
根据先入先出的队列形式,获取存储的所述第一接口的信息。
5.根据权利要求1-4任意一项所述的方法,其特征在于,所述根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之后,还包括:
生成日记记录文件,所述日记记录文件包括:所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息、以及所述第一应用程序执行所述第一接口的时间。
6.根据权利要求5所述的方法,其特征在于,所述生成日记记录文件之后,还包括:
根据所述日记记录文件,显示所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接口的时间。
7.一种应用程序检测装置,其特征在于,包括:
第一获取单元,用于从第一虚拟机中获取安卓系统中第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称;
第一确定单元,用于根据所述第一获取单元获取的所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称;
第二确定单元,所述第一获取单元还用于在获取安卓系统中第一应用程序运行时所执行的第一接口的信息之前,获取Zygote进程的进程号;以及当第一进程运行时,获取所述第一进程的父进程的进程号;
所述第二确定单元,用于根据所述第一进程的父进程的进程号与所述Zygote进程的进程号相同,确定所述第一进程所在的应用程序为所述第一应用程序。
8.根据权利要求7所述的装置,其特征在于,还包括:
第一生成单元,用于在所述第一确定单元根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,根据所述预设接口信息集,生成三级链表,所述三级链表的第一级存储各预设接口所属的目录的名称,所述三级链表的第二级存储各预设接口所属的类的名称,所述三级链表的第三级存储各预设接口的名称;
所述第一确定单元具体用于根据所述第一接口的信息,查找所述三级链表;若所述第一接口的信息在所述三级链表中能查找到,则确定所述第一应用程序执行恶意行为。
9.根据权利要求8所述的装置,其特征在于,还包括:第三确定单元;所述第一接口的信息还包括所述第一接口所属的库的名称;
所述第三确定单元,用于在所述第一获取单元获取安卓系统中第一应用程序运行时所执行的第一接口的信息之后,根据所述第一接口所属的库的名称为安卓本地库,确定所述第一接口为安卓系统的应用程序编程接口API。
10.根据权利要求9所述的装置,其特征在于,还包括:
存储单元,用于在所述第三确定单元确定所述第一接口为安卓系统的应用程序编程接口API之后,根据先入先出的队列形式,将所述第一接口的信息进行存储;
第二获取单元,用于在所述第一确定单元根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,根据先入先出的队列形式,获取存储的所述第一接口的信息。
11.根据权利要求7-10任意一项所述的装置,其特征在于,还包括:
第二生成单元,用于在所述第一确定单元根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之后,生成日记记录文件,所述日记记录文件包括:所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息、以及所述第一应用程序执行所述第一接口的时间。
12.根据权利要求11所述的装置,其特征在于,还包括:
显示单元,用于在所述第二生成单元生成日记记录文件之后,根据所述日记记录文件,显示所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接口的时间。
应用程序检测方法和装置\n技术领域\n[0001] 本发明涉及通信技术领域,尤其涉及一种应用程序检测方法和装置。\n背景技术\n[0002] 随着科技的发展和安卓(英文:Android)系统的迅速普及,用于运行Android系统的设备越来越多,例如:智能手机、平板电脑等,而且为Android系统开发的应用程序也越来越多,因此用户可以在Android系统的设备上会安装各种各样的应用程序,同时也需要安装应用程序检测软件对这些应用程序进行检测,如设备中存储有用户的大量隐私信息,为了避免用户的隐私信息被一些恶意的应用程序获取,在Android系统的设备上需要有应用程序检测软件能检测出这些恶意的应用程序,以避免用户信息泄露。\n[0003] 现有技术中通过在Android系统的设备中安装各应用程序的时候,采用安全检测软件对各应用程序的安装包进行检测,以确定该应用程序是否会执行恶意行为。然而,这种方式不能对各应用程序的更新包进行检测,从而无法检测出更新包中引发的恶意行为,导致检测精确率低。\n发明内容\n[0004] 本发明提供一种应用程序检测方法和装置,用于提高检测精确率,解决了现有技术中的问题。\n[0005] 第一方面,本发明提供一种应用程序检测方法,包括:\n[0006] 从第一虚拟机(例如Dalvik虚拟机)中获取Android系统中第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称;\n[0007] 根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。\n[0008] 第二方面,本发明提供一种应用程序检测装置,包括:\n[0009] 第一获取单元,用于从第一虚拟机(例如Dalvik虚拟机)中获取Android系统中第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称;\n[0010] 第一确定单元,用于根据所述获取单元获取的所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。\n[0011] 本发明实施例提供的应用程序检测和装置,通过获取Android系统中第一应用程序运行时所执行的第一接口的信息;并根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为。可以通过虚拟机来获取应用程序运行时所执行的接口的信息,从而随时分析应用程序运行时是否执行恶意行为,提高检测精确率,解决了现有技术中的问题。\n附图说明\n[0012] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。\n[0013] 图1为本发明应用程序检测方法实施例一的流程图;\n[0014] 图2为本发明应用程序检测方法实施例二的流程图;\n[0015] 图3为本发明实施例提供的第一应用程序运行时所执行的接口的信息的一种示意图;\n[0016] 图4为本发明实施例提供的预设接口信息集的一种示意图;\n[0017] 图5为本发明实施例提供的根据第一接口的信息查找三级链表的一种示意图;\n[0018] 图6为本发明应用程序检测方法实施例三的流程图;\n[0019] 图7为本发明实施例提供的应用程序检测装置的第一应用界面的一种示意图;\n[0020] 图8为本发明实施例提供的应用程序检测装置的第二应用界面的一种示意图;\n[0021] 图9为本发明应用程序检测装置实施例一的结构示意图;\n[0022] 图10为本发明应用程序检测装置实施例二的结构示意图。\n具体实施方式\n[0023] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0024] 图1为本发明应用程序检测方法实施例一的流程图,如图1所示,本实施例的方法可以由应用程序检测装置来执行,例如:应用程序检测软件,本实施例的方法可以包括:\n[0025] S101、从第一虚拟机中获取安卓系统中第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称。\n[0026] 本实施例中第一虚拟机可以为Dalvik虚拟机,Dalvik虚拟机是安卓(英文:\nAndroid)系统中应用程序的虚拟机,也是Android系统中Java程序的运行基础,Android系统中的每一个应用程序在底层都会对应一个独立的Dalvik虚拟机实例,应用程序的代码在Dalvik虚拟机的解释器下得以执行,Dalvik虚拟机中的解释器在执行应用程序时,可以获得该应用程序所执行的所有接口的信息,从而本实施例中的应用程序检测装置可以获取第一应用程序所执行的第一接口的信息,第一应用程序可以为Android系统中所有应用程序中任一应用程序,第一接口可以为第一应用程序所执行的所有接口中的任一接口。该第一接口的信息包括第一接口的名称、第一接口所属的类的名称、第一接口所属的目录的名称,例如:第一接口的信息可以为:D/dalvikvm(1772):Landroid/net/LocalSocket;.connect。\n其中,net(中文:网络)为第一接口所属的目录的名称,LocalSocket(中文:本地套接字)为第一接口所属的类的名称,connect(中文:连接)为第一接口的名称。\n[0027] S102、根据所述第一接口的信息与预设接口信息集中任一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。\n[0028] 本实施例中,预先设置有预设接口信息集,预设接口信息集包括各预设接口的信息,预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。预设接口可以为敏感接口,若第一应用程序所执行的第一接口为各预设接口中的一个,则可以确定第一应用程序执行了敏感接口,从而可以确定该第一应用程序执行了恶意行为。确定第一接口是否为各预设接口中的一个,可以通过判断第一接口的信息是否与预设接口信息集中一预设接口的信息匹配,若匹配,则确定第一接口为各预设接口中的一个,若不匹配,则确定第一接口不是预设接口。判断第一接口的信息是否与预设接口信息集中一预设接口的信息匹配,具体地,判断第一接口的信息中的第一接口所属的目录的名称、第一接口所属的类的名称、第一接口的名称是否分别与一预设接口的信息中的预设接口所属的目录的名称、预设接口所属的类的名称、预设接口的名称一致,若一致,则确定第一接口的信息与预设接口信息集中任一预设接口的信息匹配,若不一致,则确定第一接口的信息与预设接口信息集中一预设接口的信息不匹配。\n[0029] 例如:若预设接口信息集中的一预设接口的信息为:net/LocalSocket/connect,则第一接口所属的目录的名称也为net,第一接口所属的类的名称也为LocalSocket,第一接口的名称也为connect,从而可以确定第一接口的信息与预设接口信息集中一预设接口的信息区配。\n[0030] 需要说明的是,若第一应用程序执行的所有接口中没有一个接口为预设接口,则可以确定第一应用程序执行的是安全行为。\n[0031] 本发明实施例提供的应用程序检测方法,通过获取Android系统中第一应用程序运行时所执行的第一接口的信息;并根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为。可以通过虚拟机来获取应用程序运行时所执行的接口的信息,从而随时分析应用程序运行时是否执行恶意行为,提高检测精确率,解决了现有技术中的问题。\n[0032] 图2为本发明应用程序检测方法实施例二的流程图,如图2所示,本实施例的方法可以由应用程序检测装置来执行,例如:应用程序检测软件,本实施例的方法可以包括:\n[0033] S201、获取Zygote进程的进程号。\n[0034] 本实施例中,Android系统是基于Linux的多任务系统,同一时刻Android系统中可能存在多个进程在同时运行,这些进程中不仅包括应用程序还包括大量的系统进程,因此需要确定这些进程中哪些进程是应用程序的进程。\n[0035] 在Android系统系统中,Zygote进程是由init进程启动的一个重要的进程,它是一个第一虚拟机,比如Dalvik虚拟机,的进程,同时也是一个Dalvik虚拟机实例的孵化器。每当Android系统要求执行一个应用程序时,Zygote进程就会孵化(FORK)出一个进程来执行该应用程序,该进程为该应用程序的进程,因此应用程序的进程的父进程为Zygote进程,从而可以根据进程的父进程是否为Zygote进程来判断该进程是否为应用程序的进程。判断应用程序的进程的父进程是否为Zygote进程,即判断应用程序的进程的父进程的进程号与Zygote进程的进程号是否相同,因此,本实施例可以先获取Zygote进程的进程号,例如可以通过接口findZygotePid()获得Zygote进程的进程号,具体可以通过如下所示的代码来实现:\n[0036]\n[0037]\n[0038] S202、当第一进程运行时,获取所述第一进程的父进程的进程号。\n[0039] S203、根据所述第一进程的父进程的进程号与所述Zygote进程的进程号相同,确定所述第一进程所在的应用程序为所述第一应用程序。\n[0040] 本实施例中,在Android系统中有进程运行时,如第一进程运行时,第一进程为Android系统中当前运行的所有进程中的任一进程,可以获取第一进程的父进程的进程号,如可以通过getppid()接口获得第一进程的父进程号。然后判断该第一进程的父进程的进程号与Zygote进程的进程号是否相同,若确定第一进程的父进程的进程号与Zygote进程的进程号不相同,则确定第一进程不是应用程序的进程,若确定第一进程的父进程的进程号与Zygote进程的进程号相同,则第一进程是应用程序的进程,可以称第一进程所在的应用程序为第一应用程序。具体可以通过如下所示的代码来实现:\n[0041]\n[0042]\n[0043] S204、从第一虚拟机中获取所述第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称、所述第一接口所属的库的名称。\n[0044] 本实施例中,从Dalvik虚拟机中获取所述第一应用程序运行时所执行的第一接口的信息的具体实现过程与图1所示的S101的具体实现过程类似,此处不再赘述。值得注意的是,本实施例中的第一接口的信息包括:所述第一接口所属的库的名称、所述第一接口所属的目录的名称、所述第一接口所属的类的名称、所述第一接口的名称。\n[0045] 在第一应用程序执行过程中,Dalvik虚拟机可以输出该第一应用程序所调用的接口的信息,如图3所示,第一应用程序在运行时会执行三类库中的接口,这三类库的名称分别为:Ljava、Lcom、Landroid,Ljava中的接口表示java库里面的接口,Lcom中的接口表示开发者开发的接口,Landroid中的接口表示Android Framework(框架)里面的接口,而Landroid中的接口为Android系统调用的接口。\n[0046] S205、根据所述第一接口所属的库的名称为安卓本地库,确定所述第一接口为安卓系统的应用程序编程接口(Application Programming Interface,简称:API)。\n[0047] 本实施例中,第一接口可以为第一应用程序所执行的所有接口中的任一接口,在获取第一接口的信息后,可以判断第一接口的信息中第一接口所属的库的名称是否为安卓本地库(英文:Landroid),若确定第一接口的信息中第一接口所属的库的名称不是Landroid,即第一接口所属的库的名称为Ljava或Lcom,则该接口不是Android系统调用的接口,则对于该第一接口而言,则结束检测流程;若确定第一接口的信息中第一接口所属的库的名称是Landroid,则该第一接口是Android系统调用的接口,即该第一接口为Android系统的API,然后再执行S206。\n[0048] S206、根据预设接口信息集,生成三级链表,所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称,所述三级链表的第一级存储各预设接口所属的目录的名称,所述三级链表的第二级存储各预设接口所属的类的名称,所述三级链表的第三级存储各预设接口的名称。\n[0049] 本实施例中,预设接口信息集可以存储在工作目录(如/data/.security/)中,该工作目录的属性为可读写,预设接口信息集可以存储在func_malware.h文件中,如图4所示,图4中示出6个预设接口的信息,net和os分别为预设接口所在的目录的名称,UriSAbstractPart、LocalSocket、Parcel、MessageQueue分别为预设接口所在的类的名称,getDecoded、connect、recycle、obtain、rcelable、removeMessages分别为预设接口的名称。本实施例可以根据预设接口信息集来生成易于查找的三级链表,该三级链表可以存储在内存中,该三级链表包括三级,第一级存储各预设接口所属的目录的名称,用于查找Landroid库中的不同目录,例如第一级可以包括:android.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/connect()、android.net/LocalSocket/close()、android.net/LocalSocket/getFileDescriptor()、android.net/LocalSocket/getLocalSocketAddress()。\n[0050] 其中,根据预设接口信息集,生成三级链表可以通过如下所示的函数来实现:\nstatic int create_detect_list()。\n[0051] S207、根据所述第一接口的信息,查找所述三级链表。\n[0052] S208、若所述第一接口的信息在所述三级链表中能查找到,则确定所述第一应用程序执行恶意行为。\n[0053] 本实施例中,在获取第一应用程序在运行时所执行的第一接口的信息以及根据预设接口信息集生成三级链表之后,根据第一接口的信息来查找三级链表,若第一接口的信息为Landroid/net/LocalSocket->connect(),具体实现过程如图5所示,三级链表中的第一级(目录的名称)为net(中文:网络)、telephony(中文:电话)、bluetooth(中文:蓝牙),其它目录的名称未示出,其中,第一级目录net包括的第二级(类的名称)分别为LockSocket(中文:本地套接字)、LockSocketService(中文:本地套接字服务)、Proxy(中文:代理),其它目录中的第二级和第三级未示出;第一级目录net中第二级LockSocket包括的第三级(接口的名称)分别为connect()(中文:连接())、close()(中文:关闭())、Bind()(中文:绑定());其它类中的第三级未示出。根据第一接口的信息中第一接口所在的目录的名称net去查找三级链表中的第一级,可以命中第一级中的net,然后根据第一接口的信息中第一接口所在的类的名称LocalSocket去查找刚刚查找到的第一级中net中的第二级,可以命令第二级中的LocaSoket,然后根据第一接口的信息中第一接口的名称connect()去查找刚刚查找到的第二级LocaSoket中的第三级,可以命令第三级中的connect(),表示第一接口的信息在第三级链表中能查找到,第一接口为预设接口,从而可以确定第一应用程序执行恶意行为。若第一接口的信息中的第一接口所在的目录的名称、第一接口所在的类的名称、第一接口的名称中至少一个未在三级链表中查找到,则说明第一接口不是预设接口,从而可以确定第一应用程序未执行恶意行为。\n[0054] 其中,根据所述第一接口的信息查找所述三级链表可以通过如下所示的函数来实现:static int match_method(char*classdis,char*method_name)。\n[0055] 本实施例,通过虚拟机来获取应用程序运行时所执行的接口的信息,从而随时分析应用程序运行时是否执行恶意行为,提高检测精确率,解决了现有技术中的问题。\n[0056] 图6为本发明应用程序检测方法实施例三的流程图,如图6所示,本实施例的方法可以由应用程序检测装置来执行,例如:应用程序检测软件,本实施例的方法可以包括:\n[0057] S301、获取Zygote进程的进程号。\n[0058] S302、当第一进程运行时,获取所述第一进程的父进程的进程号。\n[0059] S303、根据所述第一进程的父进程的进程号与所述Zygote进程的进程号相同,确定所述第一进程所在的应用程序为所述第一应用程序。\n[0060] S304、从第一虚拟机中获取所述第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称、所述第一接口所属的库的名称。\n[0061] S305、根据所述第一接口所属的库的名称为安卓本地库,确定所述第一接口为安卓系统的API。\n[0062] 本实施例中,S301-S305的具体实现过程与图2所示的S201-S205的具体实现过程类似,此处不再赘述。\n[0063] S306、根据先入先出的队列形式,将所述第一接口的信息进行存储。\n[0064] 本实施例中,若第一应用程序执行的安卓(英文:Android)系统的API为多个,第一接口为第一应用程序执行的Android系统的API中的任一个,而且检测第一接口的信息与预设接口信息集中一预设接口的信息是否匹配需要耗费一定的时间,因此,在确定第一接口为Android系统的API之后,可以将该第一接口的信息根据先入先出的队列形式进行缓存,其中,该队列形式的实现需要实现如下所述的接口:\n[0065] 队列初始化:detect_queue_init();\n[0066] 队列销毁:detect_queue_des();\n[0067] 入队:detect_queue_in();\n[0068] 出队:detect_queue_out();\n[0069] 判断队列空:detect_queue_empty();\n[0070] 判断队列满:detect_queue_full()。\n[0071] 其中,第一接口的信息可以以如下所述的数据结构进行缓存:\n[0072]\n[0073] 例如,在确定第一接口为Android系统的API后,可以为先入先出队列分配缓存空间,用于缓存第一接口的信息,具体可以通过如下所述的代码实现:\n[0074]\n[0075] S307、根据先入先出的队列形式,获取存储的所述第一接口的信息。\n[0076] 本实施例中,在第一接口根据先入先出的队列形式进行缓存后,在需要对第一接口进行检测埋,根据先入先出的队列形式,获取缓存的第一接口的信息,然后再执行S308。\n[0077] S308、根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。\n[0078] 本实施例中,S308的具体实现过程与图1所示的S102或图2所示的S206-S208的具体实现过程类似,详细可以参见上述方法实施例中的相关记载,此处不再赘述。\n[0079] S309、生成日记记录文件,所述日记记录文件包括:所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息、以及所述第一应用程序执行所述第一接口的时间。\n[0080] 本实施例中,在确定第一接口为预设接口后,生成日记记录文件,日记记录文件包括:第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息、以及所述第一应用程序执行所述第一接口的时间。例如日记记录文件为log文件,该log文件以第一应用程序的名称来命令,即app_name.log文件,对第一应用程序执行的所有Android系统的API进行检测后,可以确定第一应用程序执行的至少一个Android系统的API为预设接口,该至少一个Android系统的API的信息可以记录在app_name.log中,而且相应的Android系统的API的执行时间也可以记录在app_name.log中。为了不影响Android系统的运行速度,这个日记记录文件大多数时间缓存在内存里,只有在特定的时刻,如Android系统空闲、第一应用程序退出才回写到文件系统中。\n[0081] 可选地,图2所示的S206中提到的工作目录(如/data/.security/)还可以存储S309中所生成的日记记录文件,即log文件,该工作目录的初始化过程可以通过如下所示的代码来实现:\n[0082]\n[0083] 可选地,S307-S309的具体过程可以通过如下所示的代码来实现:\n[0084]\n[0085]\n[0086] 本实施例,通过虚拟机来获取应用程序运行时所执行的接口的信息,从而随时分析应用程序运行时是否执行恶意行为,提高检测精确率,解决了现有技术中的问题。\n[0087] 在本发明应用程序检测方法实施例四中,本实施例的方法在图6所示方法实施例的基础上,进一步地,还可以包括:根据所述日记记录文件,显示所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接口的时间。\n[0088] 本实施例中,在对第一应用程序的所有第一接口检测完成之后,生成日记记录文件,然后再根据日记记录文件向用户显示(如在屏幕上显示)第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接口的时间。\n或者,根据用户需要,如获取到用户输入的查看指令,根据日记记录文件显示所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接口的时间。\n[0089] 例如:应用程序检测装置可以扫描工作目录/data/.security/log/里面的文件,读取文件app_name.log中的内容,如第一应用程序的名称、第一应用程序调用的第一接口的信息、调用时间,并将这些内容呈现给用户。该应用程序检测装置的第一应用界面如图7所示,该第一应用界面显示执行了恶意行为的所有应用程序的名称,第一应用界面中是一个纵向列表,每一表项对应一个应用程序检测结果。用户点击每个表项,即点击每个应用程序的名称,即可进入第二应用界面,第二应用界面将显示详细的检测结果,如图8所示,第二应用界面是所选的应用程序的检测结果,里面列出了检测到的应用程序调用预设接口的详细信息,包括各接口所在的目录的名称、各接口所在的类的名称、各接口的名称、各接口调用的时间。\n[0090] 在本发明应用程序检测方法实施例五中,本实施例五在图6所示的方法实施例的基础上,本实施例的应用程序检测装置作为一个插件,将检测后生成的日记记录文件提供给其它的安全检测软件,由其它的安全检测软件向用户显示第一应用程序的恶意行为,使得其它的安全检测软件具有动态检测的能力,且无需对framework层做大量修改。\n[0091] 图9为本发明应用程序检测装置实施例一的结构示意图,如图9所示,本实施例的装置可以包括:第一获取单元11和第一确定单元12,其中,第一获取单元11用于从第一虚拟机(例如Dalvik虚拟机)中获取安卓(英文:Android)系统中第一应用程序运行时所执行的第一接口的信息,所述第一接口的信息包括所述第一接口的名称、所述第一接口所属的类的名称、所述第一接口所属的目录的名称;第一确定单元12用于根据所述获取单元获取的所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为;所述预设接口信息集包括各预设接口的信息,所述预设接口的信息包括预设接口所属的目录的名称、所述预设接口所属的类的名称、所述预设接口的名称。\n[0092] 本实施例的装置,可以用于执行本发明上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。\n[0093] 图10为本发明应用程序检测装置实施例二的结构示意图,如图10所示,本实施例的装置在图9所示装置结构的基础上,进一步地,还可以包括:第一生成单元13,该第一生成单元13用于在第一确定单元12根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,根据所述预设接口信息集,生成三级链表,所述三级链表的第一级存储各预设接口所属的目录的名称,所述三级链表的第二级存储各预设接口所属的类的名称,所述三级链表的第三级存储各预设接口的名称;第一确定单元12具体用于根据所述第一接口的信息,查找所述三级链表;若所述第一接口的信息在所述三级链表中能查找到,则确定所述第一应用程序执行恶意行为。\n[0094] 可选地,本实施例的装置还可以包括:第二确定单元14;上述的第一获取单元11还用于在获取Android系统中第一应用程序运行时所执行的第一接口的信息之前,获取Zygote进程的进程号;以及当第一进程运行时,获取所述第一进程的父进程的进程号;第二确定单元14用于根据所述第一进程的父进程的进程号与所述Zygote进程的进程号相同,确定所述第一进程所在的应用程序为所述第一应用程序。\n[0095] 可选地,本实施例的装置还可以包括:第三确定单元15;所述第一接口的信息还包括所述第一接口所属的库的名称;该第三确定单元15,用于在第一获取单元11获取Android系统中第一应用程序运行时所执行的第一接口的信息之后,根据所述第一接口所属的库的名称为安卓本地库(英文:Landroid),确定所述第一接口为Android系统的API。\n[0096] 可选地,本实施例的装置还可以包括:存储单元16和第二获取单元17,其中,存储单元16用于在第三确定单元15确定所述第一接口为Android系统的应用程序编程接口API之后,根据先入先出的队列形式,将所述第一接口的信息进行存储;第二获取单元17用于在第一确定单元12根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之前,根据先入先出的队列形式,获取存储的所述第一接口的信息。\n[0097] 可选地,本实施例的装置还可以包括:第二生成单元18,该第二生成单元18用于在第一确定单元12根据所述第一接口的信息与预设接口信息集中一预设接口的信息匹配,确定所述第一应用程序执行恶意行为之后,生成日记记录文件,所述日记记录文件包括:所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息、以及所述第一应用程序执行所述第一接口的时间。\n[0098] 可选地,本实施例的装置还可以包括:显示单元19,该显示单元19,用于在第二生成单元18生成日记记录文件之后,根据所述日记记录文件,显示所述第一应用程序的名称、所述第一应用程序执行的所述第一接口的信息以及所述第一应用程序执行所述第一接口的时间。\n[0099] 本实施例的装置,可以用于执行本发明上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。\n[0100] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。\n[0101] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
法律信息
- 2021-02-02
专利权人的姓名或者名称、地址的变更
专利权人由龙芯中科技术有限公司变更为龙芯中科技术股份有限公司
地址由100095 北京市海淀区中关村环保科技示范园龙芯产业园2号楼变更为100095 北京市海淀区中关村环保科技示范园龙芯产业园2号楼
- 2017-05-24
- 2015-02-04
实质审查的生效
IPC(主分类): G06F 21/56
专利申请号: 201410492215.X
申请日: 2014.09.23
- 2015-01-07
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-06-23
|
2008-12-11
| | |
2
| |
2014-06-18
|
2014-03-17
| | |
3
| |
2013-08-07
|
2013-04-03
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |