计算机应用   2016, Vol. 36 Issue (11): 3178-3182  DOI: 10.11772/j.issn.1001-9081.2016.11.3178
0

引用本文 

张胜桥, 尹青, 常瑞, 朱晓东. 基于APK的Android应用程序GUI遍历自动化方法[J]. 计算机应用, 2016, 36(11): 3178-3182.DOI: 10.11772/j.issn.1001-9081.2016.11.3178.
ZHANG Shengqiao, YIN Qing, CHANG Rui, ZHU Xiaodong. APK-based automatic method for GUI traversal of Android applications[J]. Journal of Computer Applications, 2016, 36(11): 3178-3182. DOI: 10.11772/j.issn.1001-9081.2016.11.3178.

通信作者

张胜桥(1990-), 男, 山东菏泽人, 硕士研究生, 主要研究方向:逆向工程、信息安全, zsq9012@163.com

作者简介

尹青(1968-), 女, 江苏徐州人, 教授, 博士, 主要研究方向:信息安全;
常瑞(1981-), 女, 河南郑州人, 副教授, 博士研究生, 主要研究方向:嵌入式系统安全;
朱晓东(1991-), 男, 山东潍坊人, 硕士研究生, 主要研究方向:逆向工程

文章历史

收稿日期:2016-04-18
修回日期:2016-06-27
基于APK的Android应用程序GUI遍历自动化方法
张胜桥, 尹青, 常瑞, 朱晓东    
数学工程与先进计算国家重点实验室(信息工程大学), 郑州 450000
摘要: 为了提高应用程序自动执行技术的图形用户界面(GUI)覆盖率和自动化程度以满足Android应用程序动态安全分析和GUI测试的需求,提出了一种基于应用程序安装包(APK)的Android应用程序GUI遍历自动化方法。该方法通过动态地捕捉目标应用程序GUI并模拟用户行为与之交互,驱动应用程序自动执行。基于开源框架Appium实现了一个能够自动化遍历轻量Android应用程序GUI的跨平台原型工具。实验结果表明,该自动化方法能够获得较高的GUI覆盖率。
关键词: 图形用户界面    图形用户界面遍历    行为模拟    高覆盖率    移动应用程序    Android    
APK-based automatic method for GUI traversal of Android applications
ZHANG Shengqiao, YIN Qing, CHANG Rui, ZHU Xiaodong     
State Key Laboratory of Mathematical Engineering and Advanced Computing(Information Engineering University), Zhengzhou Henan 450000, China
Background: ZHANG Shengqiao, born in 1990, M.S. candidate. His research interests include reverse engineering and information security.
YIN Qing, born in 1968, Ph.D., professor. Her research interests include information security.
CHANG Rui, born in 1981, Ph.D. candidate, associate professor. Her research interests include security of embedded system.
ZHU Xiaodong, born in 1991, M.S. candidate. His research interests include reverse engineering.
Abstract: In order to improve the coverage and automation level of Graphical User Interface (GUI) by automatic execution technology for Android applications, an Android Package (APK)-based automatic traversal method which meets the requirements of dynamic security analysis and GUI testing was proposed. The GUI of the target application was captured dynamically, and the interaction of user actions was simulated with applications running automatically. Based on the open source project of Appium, a platform-crossed prototype tool of automatic traversal method which can automatically traverse GUIs of lightweight Android applications was implemented. The experimental results show that the proposed method with a high coverage is feasible and effective.
Key words: Graphical User Interface (GUI)    GUI traversal    action simulation    high coverage    mobile application    Android    
0 引言

移动终端上各式各样的应用程序数量呈爆炸性增长,其中Android应用程序更是占据了绝对的优势。Android应用程序分析已经成为一个研究热点。通常Android应用程序拥有丰富的图形用户界面(Graphical User Interface, GUI),用户通过与应用程序GUI交互触发一系列的事件运行应用程序。近年来出现了一些基于GUI的方法用以分析、测试Android应用程序的正确性、安全性和性能,例如:文献[1]通过遍历应用程序GUI检测应用程序是否存在隐私泄露、恶意功能以及其他敏感行为;文献[2-4]通过探测和遍历应用程序GUI检测程序漏洞;文献[5]基于受控环境的Android应用程序动态分析框架Appsplayground遍历应用程序GUI、自动化运行应用程序以监控并分析应用程序的运行时行为。探测和遍历应用程序GUI主要有两个途径:一是通过静态分析提取应用程序GUI事件集[6]或Activity转换图[7],然后基于该事件集或转换图遍历应用程序GUI;二是动态探测应用程序GUI并模拟用户行为与之交互实现对应用程序GUI的遍历,如文献[8]。

上述方法[1-8]结果的有效性和实用性很大程度上取决于其遍历方法的GUI覆盖率和自动化程度,而且这些方法还存在一定的限制:文献[1]使用静态分析方法分析应用程序Activity和Function调用图、提取期望的Activity转换路径,然后据此路径遍历应用程序GUI,其覆盖率完全依赖于所提取的Activity转换路径;文献[2-3]根据探测到的应用程序GUI状态发送事件到事件队列,其稳定性有待进一步验证;文献[4]需要一定程度的人工参与,方法自动化程度不高;AppsPlayground[5]使用模糊测试的方法遍历应用程序GUI,难以保证获得较高的GUI覆盖率;文献[6]利用静态分析方法提取应用程序GUI的事件集,然后对运行中的该应用程序系统地执行这些事件集,动态构建应用程序GUI模型,需要应用程序源码;Targeted Exploration[7]通过静态分析技术构建应用程序的Activity转换图,然后基于此转换图遍历应用程序GUI,过程比较复杂;文献[8]只能探测简单的应用程序,实用性不高。另外,这些方法都不支持自动进行WebView交互,只能遍历原生应用。

本文的主要研究内容是针对Android应用程序在不依赖于源码的情况下能够自动化地探测管理应用程序GUI,模拟用户行为与应用程序GUI进行交互以驱动应用程序自动执行,实现了一种基于应用程序APK文件的Android应用程序GUI遍历自动化方法。实验表明,该方法可以有效自动化遍历Android应用程序GUI,具有较高的实用性,能够广泛适用于其他基于GUI的方法研究。

1 方法概述

本文方法的总体架构如图 1所示。该GUI遍历自动化方法主要包括以下4个模块。

图 1 方法架构图

1) 预处理模块通过反编译目标应用程序APK文件,解析其中的AndroidManifest.xml文件获得目标应用的包名和所有Activity名等信息,并在Android模拟器上启动目标应用程序。

2) GUI获取模块自动化地获取应用程序当前GUI并表示为可扩展标记语言(Extensible Markup Language,XML)文件。若发生GUI转换则暂停正在执行的GUI任务,根据GUI转换的结果重启暂停状态的GUI任务或提取当前GUI上的控件信息如控件的层次结构、各控件属性等建立新的GUI任务;否则继续执行当前GUI任务。

3) 遍历引擎模块负责获取当前要执行的GUI任务并依照遍历模型,以近似于程序执行的逻辑产生待模拟用户界面(User Interface,UI)控件交付用户行为模拟模块模拟相应的用户行为。

4) 用户行为模拟模块接收遍历引擎交付的UI控件,模拟该控件相应的用户行为包括简单动作和复杂动作。

2 关键技术 2.1 UI元素的获取

构成Android应用程序GUI的各种UI元素(统称为控件)间天生所具有的层次和嵌套关系,与XML文档中元素之间的关系十分相似,使用XML文件来描述图形用户界面是十分自然和有效的方法。Android提供了一个简单的词汇表,用来对应View类和子类,比如一些按钮和文本编辑框等。一个Activity的用户界面是由一组按层派生的视图类View的视图对象组成。每个视图占据Activity窗口的特定矩形区域监听并响应用户的交互。例如,一个视图可能是一个按钮,当用户点击它时启动一个点击按钮操作。视图是控件的基类,视图组是可以包含其他视图的特殊视图,是用于UI布局和容器的基本类。Android应用程序GUI上的控件树是通过视图和视图组组合形成的。

当探测到一个新GUI如图 2时,首先把这个GUI表述为XML文件,然后解析该XML文件就可以提取包含其中的所有控件的信息,一个控件可以提取的属性信息如下:

图 2 GUI截图

< android.widget.TextView attributes: [

[Attribute: name index value "1"],

[Attribute: name text value "百度一下"],

[Attribute: name class value "android.widget.TextView"],

[Attribute: name package value "com.browser2345"],

[Attribute: name content-desc value ""],

[Attribute: name checkable value "false"],

[Attribute: name checked value "false"],

[Attribute: name clickable value "true"],

[Attribute: name enabled value "true"],

[Attribute: name focusable value "false"],

[Attribute: name focused value "false"],

[Attribute: name scrollable value "false"],

[Attribute: name long-clickable value "false"],

[Attribute: name password value "false"],

[Attribute: name selected value "false"],

[Attribute: name bounds value "[239, 138][311, 183],

[Attribute: name resource-id value

"com.browser2345:id/baidu_button"],

[Attribute: name instance value "0"]

]/>

每个GUI对应一棵控件树,每棵控件树代表一个任务。遍历引擎依据遍历模型和遍历算法操作处理每棵控件树生成待模拟控件交付用户行为模拟模块模拟用户行为如点击、输入、滑动屏幕等。

在很多情况下,控件或内容太多会超出容器或整个屏幕,这些超出容器或屏幕的控件或内容不但不会显示在屏幕上,而且不能与显示的内容一起被获取,是无法预知的。这些被隐藏的控件能否被获取是GUI自动化遍历方法要解决的一个关键问题。另外,对话框和菜单作为一个独立的窗口弹出时它们会获得屏幕焦点,它们与普通GUI有同样的页面结构,但是不同的是它们不能作为一个父GUI被子GUI返回,跳出即关闭。自动化遍历GUI的过程中需要自动识别并处理这类GUI。2.1.1节和2.1.2节分别阐述了本文解决这两类问题的方法。

2.1.1 隐藏元素的获取

在Android应用程序开发的过程中,常常需要在一个界面或容器内放置非常多的控件或内容,开发者们会选择ListView或ScrollView等控件去包裹这些内容使用户可以通过滑动屏幕来浏览和操作这些信息。自动化遍历的过程也就是模拟用户行为与应用程序GUI进行交互的过程。对于类似ListView和ScrollView这类控件的操作难点在于判断能否滚动、滚动方向、何时滚动以及滚动后与滚动前的衔接。

如2.1节所述控件属性信息包含scrollable value和bounds value两个属性,能够滚动的控件的scrollable value的值为true, 否则为false。本文方法设定上下滚动的控件滑动方向为自下而上,左右滚动的控件滑动方向为自右往左,顺序滑动不回退。属性bounds value的值是控件左上和右下顶点在屏幕上的坐标值,本文方法根据滑动方向设定一阈值,当遍历到的内嵌控件的边界与该容器(滚动控件)边界的最小距离小于等于阈值时,滑动屏幕。以滚动ListView为例如图 3,设定阈值为80, 则当遍历到控件n时屏幕向上滑动200。然后重新捕获屏幕,获取当前界面控件信息并更新ListView内嵌控件信息,自控件n继续进行遍历。当控件n接近尾部时, 屏幕向上滑动的距离小于200,但是本方法依然能够从控件n继续遍历,直至所有的被隐藏控件都被获取遍历到。左右滑动方式与上下滑动类似此处不再赘述。

图 3 滑动示意图
2.1.2 对话框和菜单处理

Android中对话框和菜单的设计对于人机交互是非常人性化的。当用户进行一些操作时,对话框可以给出一些操作提示和向导;菜单提供了不同功能分组展示的能力,这些都是非常实用的设计。但是,在GUI遍历的过程中对话框和菜单以弹窗的方式每次呈现都会作为新的GUI获得屏幕焦点而且是不能被返回的。因此,在自动化遍历的过程中需要及时地识别和处理对话框和菜单。

本文方法中,每当探测到一个GUI首先检查其是否覆盖整个手机屏幕,手机屏幕的尺寸可以根据设备型号直接获取,而探测到的GUI边界信息可以通过解析对应的XML文件获得。如果探测到的GUI没有覆盖整个屏幕那么视其为对话框或者菜单,并把该GUI标记为临时GUI。在对话框和菜单关闭之前,所有的GUI任务模拟操作与普通GUI类似。当对话框或菜单关闭时,应用程序会转换到一个新的GUI或返回原GUI,如果转换到一个新的GUI, 那么标记该GUI的父GUI为原GUI,使得新GUI遍历任务在返回或结束时能够返回原GUI任务。

2.2 GUI遍历算法和遍历模型构建

Activity是一个应用程序组件,通常它提供一个用户可以交互完成某项任务的屏幕。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件。在一个Android应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听用户事件并作出响应。一个应用程序通常包含多个Activity,Activity之间的交互可以完成相应的应用程序功能,从这点上讲,Activity之间是一种有向图的关系,GUI之间也是如此。

应用程序GUI探测策略是该自动化遍历方法的核心。当获取到当前GUI控件树后,以怎样的遍历算法和逻辑执行任务决定遍历方法GUI覆盖率的高低。本文方法的GUI遍历过程基于Nilsson[9]提出的一个著名的图搜索过程,它是一个表达能力很强的搜索策略框架。为了尽可能多地遍历到应用程序包含的GUI,在本文方法中没有目标节点也就是没有目标GUI。由于GUI上能够触发GUI转换的控件是事先未知的,所以OPEN表只存放当前要模拟执行用户行为的GUI节点,通过动态换进换出OPEN表内的GUI节点实现深度优先的搜索策略。CLOSE表用于存放已经扩展到的GUI节点,避免发生循环。

算法1  GUI遍历算法。

Input: The launched target APK

1)  GUIList=∅;

2)  TaskList=∅;

3)  curGUI=∅;

4)  obtain the curGUI;

5)  generate Task according to curGUI;

6)  curGUI→fatherGUI=∅;

7)  add the curGUI into GUIList;

8)  add the Task into TaskList;

9)  curGUI→Task.start();

10)  while curGUI not null & & not meet stop condition do

11)    while no GUI transaction & & curGUI→Task

        not completed & & not meet stop condition do

12)      generate an Element from curGUI→Task;

13)      simulate the Element→user-action;

14)      obtain the GUIState when action completed;

15)      curGUI→Task.setState();

16)    end while

17)    if curGUI→Task has completed then

18)      curGUI=curGUI→fatherGUI;

19)      curGUI → Task.start();

20)    else if GUI taken transaction then

21)        if transacted to newGUI then

22)          generate Task according to newGUI;

23)          newGUI → fatherGUI=curGUI;

24)          add the newGUI into GUIList;

25)          add the Task into TaskList;

26)          curGUI=newGUI;

27)          curGUI→Task.start();

28)        else if transacted to GUI in GUIList

             but not backed to its fatherGUI then

29)          simulate press back key of device;

30)          else curGUI=curGUI→fatherGUI;

31)          end if

32)        curGUI→Task.start();

33)      end if

34)    end if

35)  end while

算法1描述了本文GUI遍历算法。本文自动化方法是动态方法,在事先不知道应用程序Activity和GUI转换信息的前提下能够按照深度优先的策略探测应用程序GUI。算法以已启动的目标应用程序作为输入, 首先初始化GUI列表和任务列表(1)~3)),然后探测应用程序启动后的首个GUI添加到GUI列表, 并把该GUI上的控件树作为一个任务添加到任务列表,启动该任务(4)~9))。遍历引擎从当前任务中选择一个控件交付用户行为模拟模块进行用户行为模拟(12)~13)),用户行为模拟结束后暂停当前任务并设置当前GUI状态(14)~15)),随后遍历引擎根据该状态继续执行:如果当前任务已完成, 则返回父GUI, 继续执行父GUI任务(18)~19));如果发生GUI转换并产生新的GUI节点, 则创建新的GUI任务, 并建立当前GUI与新GUI之间的父子关系(22)~23)),添加新GUI和其任务到各自相应的列表后执行新任务(24)~27));如果GUI转换到已拓展的非父GUI节点, 则模拟点击返回键避免循环遍历, 否则返回父GUI(29)~30)),继续执行任务32)。应用程序GUI不停的转换与任务的轮替执行一一对应,遍历引擎不断地从执行状态的任务中选出一个控件交付用户行为模拟模块进行用户行为模拟直到所有任务结束,即任务列表为空或满足终止条件时结束。

一般而言,应用程序启动后,用户根据界面元素的导向会进行一系列的操作,如点击等,这将会导致GUI发生转换,用户不断的操作动作会使GUI不断地转换,转换到新的GUI或者返回前一个GUI。用户访问应用程序GUI的过程近似于深度优先的方式,访问应用程序的过程中会生成一个GUI图,而应用程序的GUI对应图的节点,图的边对应触发GUI转换的用户行为和行为所施于的UI控件。由于深度优先探测方式更加符合应用程序设计逻辑和用户操作应用程序的行为,而且深度优先方式也便于程序的动态分析,所以本文采用深度优先的方式探测遍历应用程序的GUI。当探测到应用程序转换到一个新的GUI时,把新的GUI添加到GUI列表并将该GUI上控件树提取出来生成任务。遍历引擎不断地从执行中的任务中产生一个控件交付用户行为模拟模块模拟用户行为。用户行为的持续模拟会导致GUI的不断更替,返回时则返回父GUI从最近一次引发GUI转换的控件继续往后进行遍历,最终会形成一棵GUI深度优先遍历结果树如图 4

图 4 遍历结果树
2.3 用户行为模拟

在自动化遍历应用程序GUI的过程中,用户行为模拟模块会不断地接收到由遍历引擎模块产生的待模拟控件。用户行为模拟模块在接收到待模拟控件后首先要定位该控件,只有定位了该控件才能针对该控件模拟用户行为。控件被定位后根据该控件的类型如EditText、Button和ImageView等,结合其各属性(如2.1节所述)的值制定并实施相应的用户行为模拟。

2.3.1 控件定位

图 1方法架构图所示,本文方法中用户行为模拟模块首先接收到一个遍历引擎产生的待模拟控件,然后模拟该控件相应的用户行为,遍历引擎根据模拟执行的结果产生下一个待模拟控件,如此循环直至遍历结束。

AppiumDriver[10]提供了许多控件定位的方法如使用ClassName、AccessibilityId、Resource Id等信息定位控件或者通过可扩展标记语言路径语言(Xml Path Language,XPath)定位控件等控件定位方法。利用这些方法,Android应用程序开发或测试人员可以很容易地实现应用程序自动化测试。而本文GUI遍历方法是基于应用程序APK文件不依赖应用程序源码的自动化方法,本文方法可以利用的控件属性信息如2.1节所述。以上控件定位方法很多情况下并不适用于本文自动化方法:使用ClassName定位控件一般情况下获得的控件不止一个,需要遍历一遍得到的结果;利用属性resource-id的值可以实现对控件的定位,但是由于开发人员的习惯或其他原因,很多控件并没有该属性值;Appium[10]的XPath库并不完备等。

本文方法采用属性resource-id和bounds value的值相结合定位控件的方法。对于resource-id属性值不为空的控件直接利用Appium提供的方法进行定位,否则基于bounds value的值对控件进行定位。每个Android控件都是一个矩形区域布局,由bounds value的值可以计算出控件的边界和中心坐标。相对于通过resource-id定位控件的方法,在模拟控件相应的用户行为之前resource-id为空的控件只需要把行为焦点置于该控件区域内,这样就能把模拟动作与控件绑在一起。例如,一个resource-id值为空clickable值为true的ImageButton,模拟点击该控件的区域内的任何一点都与用户点击该控件一样触发ImageButton的点击事件监听程序。

2.3.2 行为模拟

用户与应用程序交互的动作主要包括按键动作和触摸动作两类。一般而言,手机按键包括返回键、HOME、音量键和电源键等按键,在这里把应用软键盘也归类为按键键盘。每一个物理按键和软键盘按键都有一个KEYCODE值,例如返回键KEYCODE_BACK值为4。可以通过KEYCODE来执行按键操作,比较简单。

触摸动作模拟屏幕上的点击、长按、拖动等动作,这些动作需要依据动作所施于的控件对象在屏幕上的区域来模拟具体的动作行为。由上述可知,每个控件都有自己在屏幕上的矩形区域,只需要把与控件相应的模拟动作限定在控件所属矩形区域内即可完成行为动作模拟。

此外,针对输入和点击行为,可以依据获取的控件属性信息、上下文环境信息如数据类型等进行启发式输入和点击操作,而不是随机输入无意义的字符和点击按钮。

3 实现与测试 3.1 工具实现

本文方法基于开源框架Appium[10]使用Java语言实现了一个运行在PC平台的原型工具,目标应用程序运行在Android模拟器上。可以用来遍历Android应用程序GUI的框架或工具还有MonkeyRunner、Robotium和Uiautomator等,用户可以使用这些工具通过编写脚本的方式遍历应用程序GUI。从某种意义上来说,编写脚本的方式与用户直接操作应用程序遍历GUI是等价的。

该原型工具是一个可以跨平台的Android应用程序GUI遍历自动化工具,可用于遍历轻量移动应用程序GUI。该工具发送命令给Appium server,Appium server把命令转换成移动设备可以理解的形式发送给移动设备,移动设备执行完这些命令后会把结果返回给Appium server,Appium server再把执行结果返回给该工具。该工具依据上一命令返回的结果发出下一命令直至满足结束条件结束。

这种架构给我们提供了很好的开放特性,可以把Server放在任意机器甚至是云服务器上。

3.2 测试

为了验证本文方法的可行性和有效性,选择系统为Android4.3的模拟器,只对原生应用或混合应用进行实验。本文方法选取具有清晰的图形用户界面层次结构的轻量移动应用程序作为实验对象,使用原型工具对中国知网客户端手机知网(v1.0.4,CNKI)、知乎(v2.4.4,Zhihu Inc.)和此刻(v1.0,重庆最初科技有限公司)三个Android应用程序进行了实验。该工具运行在操作系统为Windows 7、内存为6 GB的PC平台上。由于应用程序包含的GUI的总数难以统计,因此本文借助可以精确统计的Activity数目近似地对该自动化遍历方法进行评估[7]。实验结果记录了本文方法自动化遍历每个应用程序所探测到的Activity,与应用程序所包含Activity总数进行对比,结果如表 1

表 1 GUI遍历实验结果
3.3 结果分析

遍历过程中访问到的GUI越多意味着更高的GUI覆盖率,换句话说就是能够访问到更多的应用程序的功能或行为,这对基于程序运行时行为特征的Android应用程序动态安全分析具有重要的意义。但是,一般情况下应用程序包含的GUI数目难以统计,因此不能通过GUI数目给出方法的定量评估标准[1-5]。文献[6, 8]实验中选取的应用程序过于简单,最复杂的应用程序仅包含6个Activity[6]或8个GUI[8],虽然它们有较高的GUI覆盖率(56%~92%[6],66.7%~100%[8])但是其结果不具有代表性。尽管大部分情况下应用程序的Activity数量和GUI数量不相等,但是依然能够通过Activity的覆盖率近似地对方法的有效性进行定量的评估[7]。文献[7]基于深度优先的GUI探测方法的平均Activity覆盖率为59.39%,该文献的一项调查报告显示人工方式遍历(7位用户操作应用程序的结合)应用程序的Activity平均覆盖率为30.8%。本文方法对三个应用程序Activity的覆盖率分别为60.7%、77.8%和56.4%,Activity平均覆盖率约为65%,高于文献[7]中自动化方法的59.39%和人工方式的30.8%。分析实验结果可知覆盖率的高低与应用程序的复杂度有一定的关系,应用程序包含的Activity越多意味着应用的功能越多、设计越复杂,这会增加遍历的难度从而影响Activity遍历覆盖率。

对应用程序本身和遍历过程的分析表明,限制Activity覆盖率进一步提高的原因主要包括以下几个方面:对于一些自定义布局和控件等不能精确模拟相应的用户行为,从而影响遍历结果;应用程序对用户身份的限制会对遍历路径产生不同引导,一部分界面或Activity无法遍历到;此外还有一些第三方登录等类似用户行为无法进行模拟。

4 结语

本文提出了一种基于应用程序APK文件的Android应用程序GUI遍历自动化方法,采用深度优先的策略建立遍历模型,自动化地提取GUI控件元素,能够根据控件上下文环境模拟数据输入和点击等简单操作和其他复合操作。该方法基于开源框架Appium实现了一个原型工具,并对三个Android应用程序进行了实验,验证了本文方法的可行性和有效性。未来工作计划主要有两个方面:一方面继续优化本文方法,针对一些特殊和复杂的控件对其关联性进行更详细的探测和解析,从而制定更为具体的用户行为模拟方式而不是简单地模拟点击和滑动等简单动作,为不同类别的应用程序提供不同的模拟策略和遍历算法。另一方面,我们将在Android应用程序动态安全分析方面展开深入的工作,基于本文自动化方法在一个受控的Android模拟器上自动运行待分析应用程序,监控程序运行时行为信息以对应用程序进行安全分析。

参考文献
[1] ZHENG C, ZHU S, DAI S, et al. Smartdroid:an automatic system for revealing UI-based trigger conditions in android applications[C]//Proceedings of the 2nd ACM Workshop on Security and Privacy in Smartphones and Mobile Devices. New York:ACM, 2012:93-104.
[2] YEH C C, HUANG S K, CHANG S Y. A black-box based android GUI testing system[C]//Proceedings of the 11th Annual International Conference on Mobile Systems, Applications, and Services. New York:ACM, 2013:529-530.
[3] JENSEN C S, PRASAD M R, M?LLER A. Automated testing with targeted event sequence generation[C]//Proceedings of the 2013 International Symposium on Software Testing and Analysis. New York:ACM, 2013:67-77. http://dl.acm.org/citation.cfm?id=2483760
[4] YANG S, YAN D, ROUNTEV A. Testing for poor responsiveness in Android applications[C]//Proceedings of the 20131st International Workshop on Engineering of Mobile-Enabled Systems. Piscataway, NJ:IEEE, 2013:1-6.
[5] RASTOGI V, CHEN Y, ENCK W. AppsPlayground:automatic security analysis of smartphone applications[C]//Proceedings of the 3rd ACM Conference on Data and Application Security and Privacy. New York:ACM, 2013:209-220.
[6] YANG W, PRASAD M R, XIE T. A grey-box approach for automated GUI-model generation of mobile applications[C]//Proceedings of the 16th International Conference on Fundamental Approaches to Software Engineering. Berlin:Springer, 2013:250-265. http://link.springer.com/chapter/10.1007%2F978-3-642-37057-1_19
[7] AZIM T, NEAMTIU I. Targeted and depth-first exploration for systematic testing of android apps[J]. ACM SIGPLAN Notices, 2013, 48 (10) : 641-660. doi: 10.1145/2544173
[8] WANG P, LIANG B, YOU W, et al. Automatic Android GUI traversal with high coverage[C]//Proceedinags of the 4th International Conference on Communication Systems and Network Technologies. Piscataway, NJ:IEEE, 2014:1161-1166.
[9] NILSSON N J. Artificial Intelligence:a New Synthesis[M]. San Francisco, CA: Morgan Kaufmann, 1998 : 141 -155.
[10] Appium[EB/OL].[2016-01-20].https://github.com/Appium/Appium.