Android应用自动化动态测试工具的研究及实现 马红素,郭燕慧** 作者简介:马红素(1987-),女,硕士研究生,主要研究方向:软件安全 通信联系人:郭燕慧(1974-),女,副教授,主要研究方向:内容安全、信息安全管理. E-mail: yhguo@bupt.edu.cn (北京邮电大学信息安全中心,北京 100876) 5 摘要:针对应用商店中出现的大量Android恶意应用程序及人工检测效率低的问题,本文研究并实现了一种自动化动态测试工具。该工具通过自动安装、启动、运行测试应用程序,同时配合其它终端安全监测工具来记录应用后台发送短信、联网等恶意行为,最终以截图报表的方式展示给用户。该工具检测效率高、人工依赖性低,是一种可行性较高的恶意应用程序10 检测技术。 关键词:Android;恶意行为;动态测试;自动化 中图分类号:TP319 Research and development of automated dynamic test tool 15 for Android application Ma Hongsu, Guo Yanhui (Information Security Center,Beijing University of Posts and Telecommunications,Beijing 100876) Abstract: For a large number of Android malicious applications appear in the app-store,this paper 20 develops an automated dynamic test tool in order to improve the efficiency of manual test. The tool can automatically install, start, run the test application and work with other security monitoring softwares to monitor the malicious behavior such as network con-nection and message sending in the actual operation process.Finally a screenshot report will be displayed to the user.With the advantage of high efficiency and low artificial dependence,it proves that the tool is a 25 feasible method to detect the malicious applications. Key words: Android; Malicious behavior; Dynamic test; Automation; 0 引言 随着移动互联网3G技术的成熟,Android这种以Linux为基础的开放源代码的智能终30 端操作系统[1]已经成为了手机市场的主流,Android平台上的apk应用软件数量也急剧增长。Android系统的免费、开源、支持多种编程语言的优势同时也带来了严峻的安全问题,开放的系统接口意味着恶意开发者可以任意制作窃取用户隐私、恶意扣费的应用上传到应用商店。著名安全厂商McAfee发表了今年第一季度的安全报告,报告中指出McAfee收集到了 8000个以上的Android恶意软件,Android平台已经成为了恶意软件的一大目标[2]。 35 我们需要一种对应用商店中的应用程序进行有效安全检测的技术,这是软件管理者面临的一个重要问题。常见的检测方法有基于源代码的静态检测技术和动态检测技术,静态检测技术无法实时地监听捕获应用在运行中的真正恶意行为,存在误报、漏报问题。现有的动态检测技术执行效率较低,无法实现自动化。应用程序的上线前必须要经过测试人员安装、运行应用,对其界面进行逐一审核,以保证能正常安装、启动、运行,同时没有广告插件等恶40 意行为。这种人工审核流程效率低,而且过程繁琐。 基于以上需求,本文研究了针对Android应用程序的相关动态测试技术及其缺陷,设计并实现了一种自动化动态测试工具。该自动化测试工具能自动安装、启动、运行测试应用程序并对该过程截图,配合其它终端安全监测工具来捕获程序动态运行中的恶意行为。测试人员只需查看最终的程序截图及安全日志,即可完成对应用的人工质量审核及安全审核。 45 1 动态测试技术 动态测试技术是根据测试人员编写的测试脚本,模拟执行程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能[3]。Android动态测试技术是指模拟用户执行应用程序,通过动态运行程序来检测质量及安全问题。质量问题包括应用能否正常安装、启动、运行以及界面布局是否规范等,安全问题包括应用运行过程中存在的网络连接、隐私数据读50 取、信息数据发送等恶意行为。在Android SDK开发工具包中的提供的动态测试工具有Monkey、Monkeyrunner,分别对应用程序进行压力测试、功能测试。 1.1 Monkey Monkey是一个命令行工具,其运行在真实设备或者模拟器中,通过向系统发送伪随机的用户事件流来实现对应用程序的压力测试[4]。当启动模拟器或者将真实设备连接到PC端55 后,我们在命令行输入:adb shell monkey –p packagename –v 500,该命令用于向包名为packagename的应用程序发送500个伪随机事件,这些随机事件有按键输入、触屏输入、手势输入等,应用程序将不断对事件做出响应,直到事件结束或者应用程序崩溃,以此来测试应用程序的稳定性和健壮性。Monkey工具虽然能模拟用户发送事件流,但是它测试的对象仅限于应用包的单元测试,而且发送的事件流是随机的,无法进行自定义,存在着一定的局60 限性。 1.2 Monkeyrunner Monkeyrunner工具提供了多个基于Python语法的API,利用这些API编写Python脚本作为Monkeyrunner工具的输入,程序可以模拟用户操控应用程序包,向应用程序发送安装、模拟击键、触屏、截屏、卸载等事件。Monkeyrunner工具API包括三个模块:Monkeyruuner、65 MonkeyDevice、MonkeyImage。Monkeyruuner提供了自身连接模拟器或者真实设备的方法,MonkeyDevice表示一个真实设备或者模拟器,提供了应用程序的安装、卸载、启动及发送模拟击键和触屏事件的方法,MonkeyImage提供了图像转换、存储、复制的方法,通过截图来观察应用程序的质量问题。Monkeyrunner常用的API如表1所示: 表1 Monkeyrunner 常用API 70 Tab. 1 Commonly Used API of Monkeyrunner 类 功能 waitForConnection 与设备进行连接 startActivity 启动Activity,从指定的参数构造Intent touch 在指定的XY坐标位置发送触摸事件 type 向键盘发送字符串消息 takeSnapshot 对屏幕进行截图 Monkeyrunner主要用于功能测试和回归测试,与Monkey工具相比,Monkeyrunner的优势在于能自定义事件流类型,而且能同时针对多个模拟器或者真实设备,通过对应用程序发送按键或触摸事件来测试应用的稳定性。但是由于Python脚本依赖于应用程序包名,脚75 本的编写对于人工依赖性大。对于启动、连接、安装、卸载之类的测试,在测试之前需要人工解析应用的包名,对于多个应用执行效率较低。对于触摸、击键的测试动作由于在逻辑上缺乏关联性,测试结果分析有存在无序性缺陷,而且这些动作基于XY坐标值,由人工定位XY坐标值直接导致测试自动化程度的降低,Monkeyrunner缺乏一种自动获取控件XY坐标值来生成Python脚本的机制。 80 针对Monkeyrunner工具的缺陷,本文设计并实现了一个Android应用程序自动化动态测试工具,该工具通过解析应用程序的配置文件,自动安装、启动、测试、卸载应用,其中具体测试过程中遍历应用各个界面,自动解析定位控件XY坐标值,生成Python脚本来发送触摸点击事件流。工具运行的同时,配合其他安全监控工具,监控捕获运行中的恶意行为,整个测试过程将截图保存,最终作为质量分析报告输出。 85 2 自动化动态测试工具设计与实现 该自动化动态工具运行在PC端,通过Android调试桥(Android Debug Bridge,ADB)命令操控连接至PC端的设备。该工具模拟用户对应用程序进行自动安装、启动、运行测试界面控件、卸载、生成截图报告,整个测试过程中自动生成Python测试脚本,无须人工干预,自动化程度较高。 90 2.1 整体功能架构 自动化动态测试工具的整体功能架构如图1所示,其分为四个部分:预处理、界面节点解析、脚本生成、运行测试。其中预处理、界面节点解析和脚本生成服务于运行测试部分,运行测试为核心模块,负责整个测试流程。 95 图1 整体功能架构 Fig. 1 Framework and function 具体模块功能为: (1) 预处理:判断设备连接状态,解析应用程序的配置文件,获取启动页面的Package和Activity,同时将应用程序push进入终端文件夹。 100 (2) 界面解析:与设备终端进行Socket通信,发送指令获取应用程序界面的窗口列表、界面布局控件元素信息,将控件布局数据流转化成特定的数据结构,得到控件的XY绝对坐标值。 (3) 脚本生成:根据界面节点解析返回的控件信息,自动生成Python脚本,具体包括安装、启动、卸载、触摸、截图脚本。 105 (4) 运行测试:在预处理、界面解析、脚本生成模块的支撑下,调用生成的Python脚本,模拟用户自动安装、启动、测试、卸载Android应用程序。 2.2 预处理 预处理部分负责获取设备连接状态和提取应用程序的包名和MainActivity类。工具首先会通过ADB获取设备的状态、序列号、端口等信息,以确保测试正常进行。若设备连接正110 常,工具将解析apk应用程序的AndroidManifest.xml文件,AndroidManifest.xml是应用的全局配置文件[5],该文件描述了package中的全局数据,包括package、activity、service等。应用程序包中的AndroidManifest.xml文件是经过编译的,工具需要首先将该文件反编译成可读的文本文件,例如,某个应用反编译后的xml文件如下: <?xml version="1.0" encoding="utf-8"?> 115 <manifest xmlns:android="http://schemas.android.com/apk/ res/android" package="com.books.pixiaopang"> <uses-sdk android:minSdkVersion="8"></uses-sdk> <application > <activity android:name=".book_start"> 120 <intent-filter> <action android:name="android.intent.action.MAIN"> </action> <category 125 android:name="android.intent.category.LAUNCHER"> </category> </intent-filter> </activity> <activity>…</ activity> 130 </application> </manifest> xml文件中包括多个activity,每个activity对应于应用的每个界面,其中在intent-filter中支持MAIN操作和LAUNCHER种类的activity为启动应用程序的MainActivity,工具解析上述xml文件得到MainActivity为:com.books.pixiaopang.book_start,该activity用于脚本135 生成模块生成启动脚本。获取MainActivity成功后,工具将利用adb push命令将应用程序apk包上传至手机文件夹,用于运行测试模块安装。 2.3 界面解析 界面解析用于获取手机终端界面的窗口列表及控件布局元素属性信息。工具首先与Android终端建立基于TCP协议的Socket连接,然后向终端发送“LIST”命令,终端会返140 回当前运行程序的窗口列表,每个窗口以唯一的Package/Activity字符串标识[6],通过窗口标识可以判断当前程序是否运行正常。工具向终端发送“DUMP -1”指令,终端会返回当前屏幕窗口的布局控件元素信息。 常见的布局控件元素有Butoon、ImageButton、EditText、TextView,控件基本属性有宽度、高度、左上角相对X坐标、左上角相对Y坐标。“DUMP -1”指令返回的是以“DONE.”145 字符串分界线的数据流,每行代表一个控件元素,程序对数据流进行解析后,会构造一个树 学术论文网Tag:代写硕士论文 代写论文 代写代发论文 代发论文 |