控件遍历方法及装置、分析系统与流程

文档序号:15829094发布日期:2018-11-03 00:17阅读:258来源:国知局

本发明涉及信息安全领域,具体而言,涉及一种控件遍历方法及装置、分析系统。

背景技术

由于功能丰富和携带便捷,智能手机在近年来获得了飞速的发展,已成为人们生活中不可或缺的用品,其中以搭载了安卓系统的智能手机最为受欢迎。根据数据显示,2015年第4季度安卓系统的市场占有率为80.7%,远远超过其他移动设备操作系统。在安卓系统繁荣发展的背后,丰富多彩的安卓应用可谓功不可没。然而安卓应用在丰富人们生活的同时,也给用户带来了各种各样的安全隐患,恶意扣费软件、隐私窃取软件、欺诈软件等恶意软件无时无刻不威胁着用户的隐私和资金安全。为了保证用户使用的安全,各大安全厂商、应用商店提供商、研究机构等都推出了相应的安卓应用安全分析平台,利用静态分析和动态分析等技术分析检测安卓应用中的恶意行为和安全问题。静态分析技术不需要实际运行应用程序,而直接针对程序的源代码或者二进制文件进行数据流、控制流等分析,具有较高的代码覆盖率,然而在分析过程中缺乏实际运行路径和上下文信息,难以判断分析得到的行为是否可以在实际运行中被触发,同时安卓应用中广泛使用的java反射、动态加载代码、加密、混淆等技术也给静态分析技术带来了挑战。与静态分析技术相比,动态分析技术可以保证检测出的行为在实际中可被真实触发,也可以解决java反射、加密、混淆等技术给静态分析带来的困难,因此动态分析技术受到了更多的青睐。

目前,动态分析技术面临的主要问题是如何尽可能多地触发待测应用的行为。安卓应用多以图形用户界面作为核心,通过用户与界面控件的交互行为启动不同的功能模块,不同类型的控件可以接收多种不同类型的交互事件,例如点击、长按、拖拽、滑动、文本输入、屏幕旋转等。灵活的交互形式使得动态分析过程中触发待测应用的行为变得更为复杂。因此,界面控件自动遍历方法的研发,对于尽可能多地触发安卓应用的行为、提高动态分析过程中的代码覆盖率具有重要的意义。

现有的安卓应用自动化测试方案在自动触发被测应用行为方面大致采用两类技术,一类是使用预先设定的触发内容或顺序打开被测应用特定的界面,触发特定的功能模块;一类是解析被测应用展示的每一个界面上的控件,对每一个控件均进行交互操作。使用第一类技术的测试方案更有针对性,然而无法触发被测应用的所有功能,代码覆盖率较低。使用第二类技术的测试方案,部分采用instrumentation框架实现,需要针对每一个应用生成对应的测试app包,效率较低且占用资源较多;而另一些方案采用viewserver或hierarchyviewer等工具获取当前界面布局及其上的控件,通过monkey或monkeyrunner向控件发送交互事件,虽然不需要生成额外的测试包,但是对于控件的操作多集中在点击操作,甚少考虑其他类型的交互操作,因此代码覆盖率依旧不高。此外,绝大多数测试方案会存在已分析过的界面和控件可能会被再次分析,造成分析效率低下的问题。

针对相关技术中的上述技术问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种控件遍历方法及装置、分析系统,以至少解决相关技术中应用界面控件分析方法代码覆盖率不高的问题。

根据本发明的一个实施例,提供了一种控件遍历方法,包括:对应用运行时当前界面上的控件进行遍历处理,其中,遍历处理包括:遍历当前界面上的控件,并获取遍历过程中当前控件的控件类型;将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理;在当前界面中的控件均已完成分析处理的情况下,将除当前界面之外的其他界面作为待遍历的当前界面,并对待遍历的当前界面上的控件进行遍历处理。

可选地,在将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理之后,方法还包括:保存当前控件的分析状态;其中,当前控件的分析状态包括:已分析完成的交互事件。

可选地,在将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理之后,方法还包括:在应用退出桌面或跳转到其他应用程序或跳转到其他界面时,保存当前界面的分析状态,其中,当前界面的分析状态包括:当前界面上的未完成分析处理的控件。

可选地,保存当前控件的分析状态包括:将当前控件的分析状态保存在与当前控件对应的控件状态列表中;保存当前界面的分析状态包括:将当前界面的分析状态保存在与当前界面对应的控件列表中。

可选地,在保存当前界面的分析状态之后,方法还包括:在当前界面被再次打开的情况下,获取控件列表,得到当前界面上的未完成分析处理的控件;获取未完成分析处理的控件的控件状态列表;将未完成分析处理的控件的指定交互事件发送给未完成分析处理的控件进行处理;其中,指定交互事件未包含在未完成分析处理的控件的控件状态列表中;在指定交互事件都已完成的情况下,将未完成分析处理的控件从控件列表中删除。

可选地,在获取控件列表之后,方法还包括:判断控件列表是否为空;在判断结果为空的情况下,将当前界面返回;在判断结果为否的情况下,得到当前界面上的未完成分析处理的控件。

可选地,在对应用运行时当前界面上的控件进行遍历处理之前,方法还包括:将当前界面压入状态栈;在当前界面中的控件均已完成分析处理的情况下,将当前界面从状态栈中弹出;其中,状态栈用于保存有所述应用运行中已打开且未退出的界面。

可选地,在将当前界面压入状态栈之后,方法还包括:保存当前界面的启动参数,其中,启动参数用于在应用软件非正常跳出时启动状态栈中的栈顶元素对应的界面;其中,应用软件非正常跳出为不是由在应用软件运行过程中展示的各个界面的控件的各类交互事件所导致的应用软件的跳出。

可选地,在获取遍历过程中当前控件的控件类型之后,方法还包括:根据控件类型生成所有交互事件。

可选地,对应用运行时当前界面上的控件进行遍历处理包括:通过深度优先遍历算法对当前界面上的控件进行遍历处理。

可选地,将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理包括:通过uiautomator提供的接口将所有交互事件发送给当前控件进行处理。

根据本发明的一个实施例,提供了一种控件遍历装置,包括:第一处理模块,用于对应用运行时当前界面上的控件进行遍历处理,其中,遍历处理包括:遍历当前界面上的控件,并获取遍历过程中当前控件的控件类型;将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理;第二处理模块,用于在当前界面中的控件均已完成分析处理的情况下,将除当前界面之外的其他界面作为待遍历的当前界面,并对待遍历的当前界面上的控件进行遍历处理。

可选地,装置还包括:保存模块,用于保存当前控件的分析状态;其中,当前控件的分析状态包括:已分析完成的交互事件。

可选地,保存模块,还用于在应用退出桌面或跳转到其他应用程序或跳转到其他界面时,保存当前界面的分析状态,其中,当前界面的分析状态包括:当前界面上的未完成分析处理的控件。

根据本发明的一个实施例,提供了一种分析系统,包括:界面控件自动遍历模块,用于对应用运行时当前界面上的控件进行遍历处理,其中,遍历处理包括:遍历当前界面上的控件,并获取遍历过程中当前控件的控件类型;将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理;以及在当前界面中的控件均已完成分析处理的情况下,将除当前界面之外的其他界面作为待遍历的当前界面,并对待遍历的当前界面上的控件进行遍历处理;数据收集模块,用于收集遍历过程中应用的运行数据;数据分析模块,用于对运行数据进行分析。

可选地,界面控件自动遍历模块,还用于保存当前控件的分析状态;其中,当前控件的分析状态包括:已分析完成的交互事件。

可选地,界面控件自动遍历模块,还用于在应用退出桌面或跳转到其他应用程序或跳转到其他界面时,保存当前界面的分析状态,其中,当前界面的分析状态包括:当前界面上的未完成分析处理的控件。

根据本发明的一个实施例,提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述任一项所述的控件遍历方法。

根据本发明的一个实施例,提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述任一项所述的控件遍历方法。

通过本发明,由于在对应用运行时当前界面上的控件进行遍历处理的过程中,能够将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理,即考虑了各种交互事件,进而提高了代码覆盖率,因此,可以解决相关技术中应用界面控件分析方法代码覆盖率不高的问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的一种控件遍历方法的移动终端的硬件结构框图;

图2是根据本发明实施例的控件遍历方法的流程图;

图3是根据本发明实施例的控件遍历装置的结构框图;

图4是根据本发明实施例的分析系统的结构框图;

图5是根据本发明优选实施例提供的分析系统的结构框图;

图6是根据本发明优选实施例提供的界面控件自动遍历模块的运行流程示意图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

实施例1

本申请实施例1所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的一种控件遍历方法的移动终端的硬件结构框图。如图1所示,移动终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,移动终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的控件遍历方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

在本实施例中提供了一种运行于上述移动终端的控件遍历方法,图2是根据本发明实施例的控件遍历方法的流程图,如图2所示,该流程包括如下步骤:

步骤s202,对应用运行时当前界面上的控件进行遍历处理,其中,遍历处理包括:遍历当前界面上的控件,并获取遍历过程中当前控件的控件类型;将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理;

步骤s204,在当前界面中的控件均已完成分析处理的情况下,将除当前界面之外的其他界面作为待遍历的当前界面,并对待遍历的当前界面上的控件进行遍历处理。

通过上述步骤,由于在对应用运行时当前界面上的控件进行遍历处理的过程中,能够将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理,即考虑了各种交互事件,进而提高了代码覆盖率,因此,可以解决相关技术中应用界面控件分析方法代码覆盖率不高的问题。

需要说明的是,上述应用可以是安卓系统的应用,但并不限于此,比如ios系统的应用。

需要说明的是,在上述步骤s202中的获取遍历过程中当前控件的控件类型之后,上述方法还可以包括:根据控件类型生成所有交互事件。

需要说明的是,根据控件类型生成所有交互事件可以表现为:根据控件类型,使用uiautomator提供的接口函数生成所有可对该控件进行操作的交互事件。比如一个button类型的控件,会使用uiautomator提供的click()函数生成对其的点击操作,使用longclick()函数对其进行长按操作等。由于控件类型和可操作交互事件类型都是有限的,所以可以根据判断出来的控件类型直接写出了使用的uiautomator的接口函数。

需要说明的是,上述步骤s202还可以表现为:通过深度优先遍历算法对当前界面上的控件进行遍历处理;通过深度优先遍历算法遍历界面上的控件,可进一步提高界面控件元素的覆盖率,从而提高分析过程中的代码覆盖率。

需要说明的是,当前界面上的控件可以以控件树的方式来体现,也可以表的方式来体现,并不限于此。

在本发明的一个实施例中,上述步骤s202中的将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理可以表现为:通过uiautomator提供的接口将所有交互事件发送给当前控件进行处理。

在本发明的一个实施例中,在上述步骤s202中的将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理之后,上述方法还可以包括:保存当前控件的分析状态;其中,当前控件的分析状态包括:已分析完成的交互事件。通过保存控件的分析状态使得当再次跳回该当前界面时在分析上述当前控件时已经分析完成的交互事件不再分析,进而可以提高分析效率。

在本发明的一个实施例中,在上述步骤s202中的将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理之后,上述方法还可以包括:在应用退出桌面或跳转到其他应用程序或跳转到其他界面时,保存当前界面的分析状态,其中,当前界面的分析状态包括:当前界面上的未完成分析处理的控件。通过保存当前界面的分析状态,使得当再次跳回或打开该当前界面时,不用再对上述当前界面中已经完成分析处理的控件进行分析,进一步提高分析效率。

需要说明的是,保存当前控件的分析状态可以表现为:将当前控件的分析状态保存在与当前控件对应的控件状态列表中;保存当前界面的分析状态可以表现为:将当前界面的分析状态保存在与当前界面对应的控件列表中。

需要说明的是,在保存当前界面的分析状态之后,上述方法还可以包括:在当前界面被再次打开的情况下,获取控件列表,得到当前界面上的未完成分析处理的控件;获取未完成分析处理的控件的控件状态列表;将未完成分析处理的控件的指定交互事件发送给未完成分析处理的控件进行处理;其中,指定交互事件未包含在未完成分析处理的控件的控件状态列表中;在指定交互事件都已完成的情况下,将未完成分析处理的控件从控件列表中删除。

需要说明的是,在获取控件列表之后,上述方法还可以包括:判断控件列表是否为空;在判断结果为空的情况下,将当前界面返回;在判断结果为否的情况下,得到当前界面上的未完成分析处理的控件。

在本发明的一个实施例中,在对应用运行时当前界面上的控件进行遍历处理之前,上述方法还可以包括:将当前界面压入状态栈;在当前界面中的控件均已完成分析处理的情况下,将当前界面从状态栈中弹出;其中,状态栈保存有所述应用运行中已打开且未退出的界面。

需要说明的是,对状态栈的压栈操作对应于上述应用中的界面的跳转操作,对状态栈的出栈操作对应于上述应用中的界面的返回操作,比如将当前界面压入状态栈相当于是对状态栈的压栈操作,因而其对应于界面跳转到当前界面,将当前界面从状态栈中弹出相当于是对状态栈的出栈操作,因而其对应于从当前界面返回另一个界面,但并不限于此。

需要说明的是,上述状态栈实际上一个栈结构,该站结构用于记录应用运行中界面跳转和界面返回的操作。根据栈结构的先进后出的操作特点适当匹配界面跳转及返回的操作。在每一次跳转到新界面时进行压栈操作,当由当前界面返回之前界面时进行出栈操作,保证状态栈的栈顶元素始终对应应用的当前界面。

需要说明的是,在将当前界面压入状态栈之后,上述方法还可以包括:保存当前界面的启动参数,其中,启动参数用于在应用软件非正常跳出时启动状态栈中的栈顶元素对应的界面;其中,应用软件非正常跳出为不是由在应用软件运行过程中展示的各个界面的控件的各类交互事件所导致的应用软件的跳出。

可选地,上述步骤的执行主体可以为终端,比如计算机终端、移动终端等,但不限于此,比如专门的分析系统。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

实施例2

在本实施例中还提供了一种控件遍历装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图3是根据本发明实施例的控件遍历装置的结构框图,如图3所示,该装置包括:

第一处理模块32,用于对应用运行时当前界面上的控件进行遍历处理,其中,遍历处理包括:遍历当前界面上的控件,并获取遍历过程中当前控件的控件类型;将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理;

第二处理模块34,与上述第一处理模块32连接,用于在当前界面中的控件均已完成分析处理的情况下,将除当前界面之外的其他界面作为待遍历的当前界面,并对待遍历的当前界面上的控件进行遍历处理。

通过上述装置,由于在对应用运行时当前界面上的控件进行遍历处理的过程中,能够将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理,即考虑了各种交互事件,进而提高了代码覆盖率,因此,可以解决相关技术中应用界面控件分析方法代码覆盖率不高的问题。

需要说明的是,上述应用可以是安卓系统的应用,但并不限于此,比如ios系统的应用。

需要说明的是,上述第一处理模块32,还可以用于根据控件类型生成所有交互事件。

需要说明的是,上述第一处理模块32还可以用于根据控件类型,使用uiautomator提供的接口函数生成所有可对该控件进行操作的交互事件。比如一个button类型的控件,会使用uiautomator提供的click()函数生成对其的点击操作,使用longclick()函数对其进行长按操作等。由于控件类型和可操作交互事件类型都是有限的,所以可以根据判断出来的控件类型直接写出了使用的uiautomator的接口函数。

需要说明的是,上述第一处理模块32,还可以用于通过深度优先遍历算法对当前界面上的控件进行遍历分析处理。通过深度优先遍历算法遍历界面上的控件,可进一步提高界面控件元素的覆盖率,从而提高分析过程中的代码覆盖率。

需要说明的是,当前界面上的控件可以以控件树的方式来体现,也可以表的方式来体现,并不限于此。

在本发明的一个实施例中,上述第一处理模块32通过uiautomator提供的接口将所有交互事件发送给当前控件进行处理。

在本发明的一个实施例中,上述装置还包括:保存模块,与上述处理模块32连接,用于保存当前控件的分析状态;其中,当前控件的分析状态包括:已分析完成的交互事件。通过保存控件的分析状态使得当再次跳回该当前界面时在分析上述当前控件时已经分析完成的交互事件不再分析,进而可以提高分析效率。

需要说明的是,上述保存模块,还可以用于在应用退出桌面或跳转到其他应用程序或跳转到其他界面时,保存当前界面的分析状态,其中,当前界面的分析状态包括:当前界面上的未完成分析处理的控件。通过保存当前界面的分析状态,使得当再次跳回或打开该当前界面时,不用再对上述当前界面中已经完成分析处理的控件进行分析,进一步提高分析效率。

需要说明的是,上述保存模块,还可以用于将当前控件的分析状态保存在与当前控件对应的控件状态列表中;以及将当前界面的分析状态保存在与当前界面对应的控件列表中。

需要说明的是,上述第一处理模块32还可以用于在当前界面被再次打开的情况下,获取控件列表,得到当前界面上的未完成分析处理的控件;获取未完成分析处理的控件的控件状态列表;将未完成分析处理的控件的指定交互事件发送给未完成分析处理的控件进行处理;其中,指定交互事件未包含在未完成分析处理的控件的控件状态列表中;以及在指定交互事件都已完成的情况下,将未完成分析处理的控件从控件列表中删除。

需要说明的是,上述第一处理模块32,还可以用于将当前界面压入状态栈;在当前界面中的控件均已完成分析处理的情况下,将当前界面从状态栈中弹出;其中,状态栈保存有所述应用运行中已打开且未退出的界面。

需要说明的是,对状态栈的压栈操作对应于上述应用中的界面的跳转操作,对状态栈的出栈操作对应于上述应用中的界面的返回操作,比如将当前界面压入状态栈相当于是对状态栈的压栈操作,因而其对应于界面跳转到当前界面,将当前界面从状态栈中弹出相当于是对状态栈的出栈操作,因而其对应于从当前界面返回另一个界面,但并不限于此。

需要说明的是,上述状态栈实际上一个栈结构,该站结构用于记录应用运行中界面跳转和界面返回的操作。根据栈结构的先进后出的操作特点适当匹配界面跳转及返回的操作。在每一次跳转到新界面时进行压栈操作,当由当前界面返回之前界面时进行出栈操作,保证状态栈的栈顶元素始终对应应用的当前界面。

需要说明的是,上述装置的上述保存模块还可以用于保存当前界面的启动参数,其中,启动参数用于在应用软件非正常跳出时启动状态栈中的栈顶元素对应的界面;其中,应用软件非正常跳出为不是由在应用软件运行过程中展示的各个界面的控件的各类交互事件所导致的应用软件的跳出。

可选地,上述装置可以位于终端,比如计算机终端、移动终端等,但不限于此,比如专门的分析系统。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。

实施例3

本发明实施例提供了一种分析系统,图4是根据本发明实施例的分析系统的结构框图,如图4所示,该装置包括:

界面控件自动遍历模块42,用于对应用运行时当前界面上的控件进行遍历处理,其中,遍历处理包括:遍历当前界面上的控件,并获取遍历过程中当前控件的控件类型;将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理;以及在当前界面中的控件均已完成分析处理的情况下,将除当前界面之外的其他界面作为待遍历的当前界面,并对待遍历的当前界面上的控件进行遍历处理;

数据收集模块44,与上述界面控件自动遍历模块42连接,用于收集遍历过程中应用的运行数据;

数据分析模块46,与上述数据收集模块44连接,用于对运行数据进行分析。

通过上述分析系统,由于在对应用运行时当前界面上的控件进行遍历处理的过程中,能够将可被当前控件接收的与控件类型对应的所有交互事件发送给当前控件进行处理,即考虑了各种交互事件,进而提高了代码覆盖率,因此,可以解决相关技术中应用界面控件分析方法代码覆盖率不高的问题。

需要说明的是,上述应用可以是安卓系统的应用,但并不限于此,比如ios系统的应用。

需要说明的是,上述界面控件自动遍历模块42,还用于根据控件类型生成所有交互事件。

需要说明的是,上述界面控件自动遍历模块42,还用于根据控件类型,使用uiautomator提供的接口函数生成所有可对该控件进行操作的交互事件。比如一个button类型的控件,会使用uiautomator提供的click()函数生成对其的点击操作,使用longclick()函数对其进行长按操作等。由于控件类型和可操作交互事件类型都是有限的,所以可以根据判断出来的控件类型直接写出了使用的uiautomator的接口函数。

需要说明的是,上述界面控件自动遍历模块42,还用于通过深度优先遍历算法对当前界面上的控件进行遍历分析处理。通过深度优先遍历算法遍历界面上的控件,可进一步提高界面控件元素的覆盖率,从而提高分析过程中的代码覆盖率。

需要说明的是,当前界面上的控件可以以控件树的方式来体现,也可以表的方式来体现,并不限于此。

在本发明的一个实施例中,上述界面控件自动遍历模块42通过uiautomator提供的接口将所有交互事件发送给当前控件进行处理。

在本发明的一个实施例中,上述界面控件自动遍历模块42,还可以用于保存当前控件的分析状态;其中,当前控件的分析状态包括:已分析完成的交互事件。通过保存控件的分析状态使得当再次跳回该当前界面时在分析上述当前控件时已经分析完成的交互事件不再分析,进而可以提高分析效率。

需要说明的是,上述界面控件自动遍历模块42,还可以用于在应用退出桌面或跳转到其他应用程序或跳转到其他界面时,保存当前界面的分析状态,其中,当前界面的分析状态包括:当前界面上的未完成分析处理的控件。通过保存当前界面的分析状态,使得当再次跳回或打开该当前界面时,不用再对上述当前界面中已经完成分析处理的控件进行分析,进一步提高分析效率。

需要说明的是,上述界面控件自动遍历模块42,还可以用于将当前控件的分析状态保存在与当前控件对应的控件状态列表中;以及将当前界面的分析状态保存在与当前界面对应的控件列表中。

需要说明的是,上述界面控件自动遍历模块42还可以用于在当前界面被再次打开的情况下,获取控件列表,得到当前界面上的未完成分析处理的控件;获取未完成分析处理的控件的控件状态列表;将未完成分析处理的控件的指定交互事件发送给未完成分析处理的控件进行处理;其中,指定交互事件未包含在未完成分析处理的控件的控件状态列表中;以及在指定交互事件都已完成的情况下,将未完成分析处理的控件从控件列表中删除。

需要说明的是,上述界面控件自动遍历模块42,还可以用于将当前界面压入状态栈;在当前界面中的控件均已完成分析处理的情况下,将当前界面从状态栈中弹出;其中,状态栈保存有所述应用运行中已打开且未退出的界面。

需要说明的是,对状态栈的压栈操作对应于上述应用中的界面的跳转操作,对状态栈的出栈操作对应于上述应用中的界面的返回操作,比如将当前界面压入状态栈相当于是对状态栈的压栈操作,因而其对应于界面跳转到当前界面,将当前界面从状态栈中弹出相当于是对状态栈的出栈操作,因而其对应于从当前界面返回另一个界面,但并不限于此。

需要说明的是,上述状态栈实际上一个栈结构,该站结构用于记录应用运行中界面跳转和界面返回的操作。根据栈结构的先进后出的操作特点适当匹配界面跳转及返回的操作。在每一次跳转到新界面时进行压栈操作,当由当前界面返回之前界面时进行出栈操作,保证状态栈的栈顶元素始终对应应用的当前界面。

需要说明的是,上述界面控件自动遍历模块42还可以用于保存当前界面的启动参数,其中,启动参数用于在应用软件非正常跳出时启动状态栈中的栈顶元素对应的界面;其中,应用软件非正常跳出为不是由在应用软件运行过程中展示的各个界面的控件的各类交互事件所导致的应用软件的跳出。

实施例4

本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行实施例1中的方法的步骤的程序代码。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行实施例1中的方法的步骤。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

为了更好地理解本发明,以下解决优选的实施例对本发明做进一步解释。

本发明优选实施例提供了一种界面元素覆盖率高且分析效率较高的安卓应用界面控件自动遍历方法:通过深度优先遍历算法遍历目标手机软件运行过程中所展示界面上的控件元素,生成相应的用户交互事件,触发目标手机软件中不同功能模块的运行,以提高动态分析过程中的代码覆盖率,同时在分析过程中记录界面和控件的分析状态,避免重复分析,提高分析效率。

本发明优选实施例还提供了一种分析系统,以目标手机软件为例,将目标手机软件安装于手机模拟器中,启动目标手机软件,启动界面控件自动遍历模块,自动遍历当前界面中的可操作控件,根据控件类型生成相应的用户交互事件传递给目标控件,并实时保存当前界面及当前控件的分析状态,待再一次运行到该界面时恢复之前的分析状态,从而保证界面上的控件均可被触发分析,同时防止同一控件被重复分析。在所有界面的所有控件分析完成后,结束目标手机软件的运行。

本发明优选实施例提供的一种安卓应用界面控件自动遍历方法,其步骤为:

分析系统将目标手机软件安装于手机模拟器中并启动;

针对目标手机软件运行过程中展示的每一个界面,根据其进入和退出的操作,在状态栈中进行相应的压栈和弹出操作;

通过uiautomator获取当前界面的控件树,按深度优先遍历算法遍历控件树中的可操作控件,判断当前控件类型,使用uiatutomator提供的接口向该控件依次发送其可接收的各类交互事件,遍历过程中保存控件的分析状态,以便于之后判断当前界面的分析是否结束;

当前界面的控件均已交互完成后,将当前界面从状态栈中弹出,并将目标手机软件从当前界面返回;

当目标手机软件所有界面的所有控件都交互完成后,结束当前软件的运行。

可选地,分析系统通过栈结构保存界面跳转状态信息,称为状态栈,栈结构先进后出的操作特点可恰当匹配界面跳转及返回的操作,在每一次跳转到新界面时进行压栈操作,当由当前界面返回之前界面时进行出栈操作,从而保证栈顶元素始终对应目标手机软件在手机模拟器中的当前操作界面,若目标手机软件退出到桌面或跳转到其他应用程序时,需要重新打开目标手机软件,若此时目标手机软件的当前界面与状态栈顶元素不相符,要重新打开栈顶元素对应的目标界面;

可选地,分析系统需要根据目标手机软件包名实时检测当前界面是否属于目标手机软件,当目标手机软件退出到桌面或跳转到其他应用程序时,需要重新打开目标软件之前分析的界面;

可选地,所述当前界面为目标手机软件当前展示给用户进行操作的界面,在android应用中对应一个activity实例;

可选地,所述界面可操作控件为当前界面上可接收用户交互事件的控件,例如一个可接收用户屏幕点击事件的按钮控件;

可选地,分析系统通过哈希表结构保存界面的启动参数、未分析控件列表及其状态,称为控件哈希表,其中数据项键值(key)对应一个activity实例,数据项值(value)包含该界面的启动参数和该界面上尚未进行分析操作的可操作控件列表及其状态,界面启动参数用于在目标应用非正常跳出时启动状态栈中的栈顶界面;控件状态用于保存当前控件已分析完成的用户交互事件,例如针对一个按钮控件的用户交互事件可包括单击、长按、拖拽等,在单击事件处理完成后,将单击事件标识符加入该控件的状态信息中,当再次分析该控件时将不再进行单击事件的操作。

本发明优选实施例通过深度优先遍历算法遍历android应用界面上的控件元素,可以有效提高界面元素覆盖率,从而提高动态分析过程中的代码覆盖率;

本发明优选实施例使用状态栈保存界面跳转状态信息,可准确记录界面跳转及返回的操作;

本发明优选实施例在分析过程中保存界面和控件的分析状态,可有效避免同一界面同一控件元素被重复分析,提高分析效率;

本发明优选实施例在目标手机软件运行过程中不慎跳转到设备主界面或者其他应用界面时,可再次打开目标手机软件之前正在被分析的界面,继续之前的分析;

本发明优选实施例根据当前控件类型,生成其可接收的所有交互事件并进行触发,代码覆盖率更高;

本发明优选实施例基于uiautomator获取当前界面的控件树,并生成不同类型控件对应的交互事件,不需要额外开发测试app包。

安卓应用界面控件自动遍历方法可用于安卓应用的动态分析系统中,以提高动态分析的自动化程度及代码覆盖率。图5是根据本发明优选实施例提供的分析系统的结构框图,如图5所示,分析系统在手机模拟器上安装运行目标手机软件,使用界面控件自动遍历方法触发界面控件相应操作,推动目标软件的自动运行,在目标软件运行过程中收集运行数据,目标软件运行完成后根据预先设计的规则对收集到的数据进行分析并向用户展示分析结果。分析系统由总控模块、界面控件自动遍历模块、数据收集模块、数据分析模块和数据展示模块五部分构成,其中本发明所述安卓应用界面控件自动遍历方法应用于界面控件自动遍历模块中。

总控模块负责接收分析人员传递的目标应用和预设规则文件,将预设规则文件传递给数据分析模块解析,将目标应用安装并启动,提取目标应用包名信息,启动界面控件自动遍历模块,在分析结束后启动数据分析模块,并启动结果展示模块展示分析结果;

界面控件自动遍历模块负责解析目标应用界面及其上的控件元素,生成相应的用户交互事件并执行,同时处理界面跳转带来的分析状态保存和恢复;

数据收集模块负责收集目标应用在运行过程中的敏感函数调用及资源使用等信息;

数据分析模块负责对数据收集模块收集的数据进行分析,根据预先设立的规则判断目标应用是否存在敏感行为或安全问题;

结果展示模块负责对数据分析模块的分析结果进行展示,以可读形式展示给分析人员,帮助分析人员理解目标应用中存在的安全问题。

整个系统的运行流程如下:

分析系统接收分析人员传递的目标手机软件及预设规则文件,将目标手机软件安装于手机模拟器中并启动;

获取目标手机软件包名传递给界面控件自动遍历模块,启动界面控件自动遍历模块,界面控件自动遍历模块解析目标手机软件当前界面上的可操作控件,根据控件类型生成相应用户交互事件发送给目标控件,触发目标控件相应处理流程,并在发生界面跳转时保存跳转前界面的分析状态,用于后续继续分析;

目标手机软件运行过程中,数据收集模块持续收集目标手机软件的函数调用信息及资源使用等信息;

当界面控件自动遍历模块判断再无新的界面和控件需要进行分析时,结束目标手机软件的运行,启动数据分析模块,解析分析人员传递的预设规则,对数据收集模块收集的数据进行分析;

数据分析模块将分析结果传递给结果展示模块进行展示。

图6是根据本发明优选实施例提供的界面控件自动遍历模块的运行流程示意图,如图6所示,其包括:

1)获取手机模拟器上当前展示界面的activity信息压入状态栈中;

2)若控件哈希表中不存在当前activity对应的信息,则获取当前activity可操作控件列表存入控件哈希表中,同时获取当前activity的启动参数存入哈希表中或更新哈希表中的对应数据;

3)从状态栈中取出栈顶元素,检测是否与手机模拟器上的当前界面对应;若不对应,则从哈希表中获取栈顶元素对应的启动参数,启动栈顶元素对应的activity界面;

4)从控件哈希表中获取当前界面的未分析完成控件列表(相当于图6中所述的控件列表);

5)若步骤4)中获取的列表为空,则将当前界面返回,并将状态栈中的栈顶元素弹出;

6)若步骤4)中获取的列表不为空,从中提取一个控件,判断控件类型,提取控件状态,生成未在控件状态中包含的用户交互事件发送给该控件进行执行,并将该交互事件标识符存入控件状态中;若当前控件对应的用户交互事件均已分析完成,则将当前控件从未分析完成控件列表中删除;

7)若步骤6)中生成的用户交互事件引起界面跳转到新界面,则获取跳转后activity的信息压入状态栈中,重复从步骤2)开始的操作;若步骤6)中生成的用户交互事件导致当前界面返回,则将状态栈中的栈顶元素弹出;

8)重复步骤6)到步骤7),直至当前界面的未分析控件列表为空,则将当前界面返回,并将状态栈中的栈顶元素弹出;

9)重复步骤3)到步骤8),直至状态栈为空;

10)若控件哈希表中含有未分析完成控件列表不为空的元素,则从中提取一个元素,以保存的启动参数启动对应的activity界面,重复从步骤2)开始的操作,直至控件哈希表中所有元素的未分析完成控件列表为空,分析结束。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1