【Android源码 栏目提醒】:网学会员,鉴于大家对Android源码 十分关注,论文会员在此为大家搜集整理了“Android应用自动化动态测试工具的研究及实现 - 其它资料”一文,供大家参考学习!
Android 应用自动化动态测试工具的研究及 实现 5 摘要:针对应用商店中出现的大量
Android 恶意应用程序及人工检测效率低的问题,本文研 究并实现了一种自动化动态测试工具。
该工具通过自动安装、启动、运行测试应用程序,同 时配合其它终端安全监测工具来记录应用后台发送短信、联网等恶意行为,最终以截图报表10 的方式展示给用户。
该工具检测效率高、人工依赖性低,是一种可行性较高的恶意应用程序 检测技术。
关键词:
Android;恶意行为;动态测试;自动化 中图分类号:TP31915 Research and development of automated dynamic test tool for
Android application Ma Hongsu Guo Yanhui Information Security CenterBeijing University of Posts and TelecommunicationsBeijing 10087620 Abstract: For a large number of
Android malicious applications appear in the app-storethis paper 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 the25 user.With the advantage of high efficiency and low artificial dependenceit proves that the tool is a feasible method to detect the malicious applications. Key words:
Android Malicious behavior Dynamic test Automation 0 引言30 随着移动互联网 3G 技术的成熟,
Android 这种以 Linux 为基础的开放源代码的智能终 端操作系统1已经成为了手机市场的主流,
Android 平台上的 apk 应用软件数量也急剧增长。
Android 系统的免费、开源、支持多种编程语言的优势同时也带来了严峻的安全问题,开放 的系统接口意味着恶意开发者可以任意制作窃取用户隐私、恶意扣费的应用上传到应用商 店。
著名安全厂商 McAfee 发表了今年第一季度的安全报告,报告中指出 McAfee 收集到了35 8000 个以上的
Android 恶意软件,
Android 平台已经成为了恶意软件的一大目标2。
我们需要一种对应用商店中的应用程序进行有效安全检测的技术,这是软件管理者面临 的一个重要问题。
常见的检测方法有基于源代码的静态检测技术和动态检测技术,静态检测 技术无法实时地监听捕获应用在运行中的真正恶意行为,存在误报、漏报问题。
现有的动态 检测技术执行效率较低,无法实现自动化。
应用程序的上线前必须要经过测试人员安装、运40 行应用,对其界面进行逐一审核,以保证能正常安装、启动、运行,同时没有广告插件等恶 意行为。
这种人工审核流程效率低,而且过程繁琐。
-1- 基于以上需求,本文研究了针对
Android 应用程序的相关动态测试技术及其缺陷,设计 并实现了一种自动化动态测试工具。
该自动化测试工具能自动安装、启动、运行测试应用程 序并对该过程截图,配合其它终端安全监测工具来捕获程序动态运行中的恶意行为。
测试人45 员只需查看最终的程序截图及安全日志,即可完成对应用的人工质量审核及安全审核。
1 动态测试技术 动态测试技术是根据测试人员编写的测试脚本,模拟执行程序,检查运行结果与预期结 果的差异,并分析运行效率和健壮性等性能3。
Android 动态测试技术是指模拟用户执行应 用程序,通过动态运行程序来检测质量及安全问题。
质量问题包括应用能否正常安装、启动、50 运行以及界面布局是否规范等,安全问题包括应用运行过程中存在的网络连接、隐私数据读 取、信息数据发送等恶意行为。
在
Android SDK 开发工具包中的提供的动态测试工具有 Monkey、Monkeyrunner,分别对应用程序进行压力测试、功能测试。
1.1 Monkey Monkey 是一个命令行工具,其运行在真实设备或者模拟器中,通过向系统发送伪随机55 的用户事件流来实现对应用程序的压力测试4。
当启动模拟器或者将真实设备连接到 PC 端 后,我们在命令行输入:adb shell monkey –p packagename –v 500,该命令用于向包名为 packagename 的应用程序发送 500 个伪随机事件,这些随机事件有按键输入、触屏输入、手 势输入等,应用程序将不断对事件做出响应,直到事件结束或者应用程序崩溃,以此来测试 应用程序的稳定性和健壮性。
Monkey 工具虽然能模拟用户发送事件流,但是它测试的对象60 仅限于应用包的单元测试,而且发送的事件流是随机的,无法进行自定义,存在着一定的局 限性。
1.2 Monkeyrunner Monkeyrunner 工具提供了多个基于 Python 语法的 API,利用这些 API 编写 Python 脚本 作为 Monkeyrunner 工具的输入,程序可以模拟用户操控应用程序包,向应用程序发送安装、65 模拟击键、触屏、截屏、卸载等事件。
Monkeyrunner 工具 API 包括三个模块:Monkeyruuner、 MonkeyDevice、MonkeyImage。
Monkeyruuner 提供了自身连接模拟器或者真实设备的方法, MonkeyDevice 表示一个真实设备或者模拟器,提供了应用程序的安装、卸载、启动及发送 模拟击键和触屏事件的方法,MonkeyImage 提供了图像转换、存储、复制的方法,通过截 图来观察应用程序的质量问题。
Monkeyrunner 常用的 API 如表 1 所示:70 表 1 Monkeyrunner 常用 API Tab. 1 Commonly Used API of Monkeyrunner 类 功能 waitForConnection 与设备进行连接 startActivity 启动 Activity,从指定的参数构造 Intent touch 在指定的 XY 坐标位置发送触摸事件 type 向键盘发送字符串消息 takeSnapshot 对屏幕进行截图 Monkeyrunner 主要用于功能测试和回归测试,与 Monkey 工具相比,Monkeyrunner 的 优势在于能自定义事件流类型,而且能同时针对多个模拟器或者真实设备,通过对应用程序75 发送按键或触摸事件来测试应用的稳定性。
但是由于 Python 脚本依赖于应用程序包名,脚 -2- 本的编写对于人工依赖性大。
对于启动、连接、安装、卸载之类的测试,在测试之前需要人 工解析应用的包名,对于多个应用执行效率较低。
对于触摸、击键的测试动作由于在逻辑上 缺乏关联性,测试结果分析有存在无序性缺陷,而且这些动作基于 XY 坐标值,由人工定位 XY 坐标值直接导致测试自动化程度的降低,Monkeyrunner 缺乏一种自动获取控件 XY 坐标 80 值来生成 Python 脚本的机制。
针对 Monkeyrunner 工具的缺陷,本文设计并实现了一个
Android 应用程序自动化动态 测试工具,该工具通过解析应用程序的配置文件,自动安装、启动、测试、卸载应用,其中 具体测试过程中遍历应用各个界面,自动解析定位控件 XY 坐标值,生成 Python 脚本来发 送触摸点击事件流。
工具运行的同时,配合其他安全监控工具,监控捕获运行中的恶意行为, 85 整个测试过程将截图保存,最终作为质量分析报告输出。
2 自动化动态测试工具设计与实现 该自动化动态工具运行在 PC 端,通过
Android 调试桥
Android Debug BridgeADB命令 操控连接至 PC 端的设备。
该工具模拟用户对应用程序进行自动安装、启动、运行测试界面 控件、卸载、生成截图报告,整个测试过程中自动生成 Python 测试脚本,无须人工干预, 90 自动化程度较高。
2.1 整体功能架构 自动化动态测试工具的整体功能架构如图 1 所示,其分为四个部分:预处理、界面节点 解析、脚本生成、运行测试。
其中预处理、界面节点解析和脚本生成服务于运行测试部分, 运行测试为核心模块,负责整个测试流程。
95 图 1 整体功能架构 Fig. 1 Framework and function 具体模块功能为: 1 预处理:判断设备连接状态,解析应用程序的配置文件,获取启动页面的 Package 和100 Activity,同时将应用程序 push 进入终端文件夹。
2 界面解析:与设备终端进行 Socket 通信,发送指令获取应用程序界面的窗口列表、界面 布局控件元素信息,将控件布局数据流转化成特定的数据结构,得到控件的 XY 绝对坐 标值。
3 脚本生成:根据界面节点解析返回的控件信息,自动生成 Python 脚本,具体包括安装、105 启动、卸载、触摸、截图脚本。
-3- 4 运行测试:在预处理、界面解析、脚本生成模块的支撑下,调用生成的 Python 脚本,模 拟用户自动安装、启动、测试、卸载
Android 应用程序。
2.2 预处理 预处理部分负责获取设备连接状态和提取应用程序的包名和 MainActivity 类。
工具首先110 会通过 ADB 获取设备的状态、序列号、端口等信息,以确保测试正常进行。
若设备连接正 常,工具将解析 apk 应用程序的 AndroidManifest.xml 文件,AndroidManifest.xml 是应用的 全局配置文件5,该文件描述了 package 中的全局数据,包括 package、activity、service 等。
应用程序包中的 AndroidManifest.xml 文件是经过编译的,工具需要首先将该文件反编译成 可读的文本文件,例如,某个应用反编译后的 xml 文件如下:115 ltxml versionquot1.0quot encodingquotutf-8quotgt ltmanifest xmlns:androidquothttp://schemas.
android.com/apk/ res/androidquot packagequotcom.books.pixiaopangquotgt ltuses-sdk
android:minSdkVersionquot8quotgtlt/uses-sdkgt ltapplication gt120 ltactivity
android:namequot.book_startquotgt ltintent-filtergt ltaction
android:namequotandroid.intent.action.MAINquotgt lt/actiongt125 ltcategory
android:namequotandroid.intent.category.LAUNCHERquotgt lt/categorygt lt/intent-filtergt lt/activitygt130 ltactivitygt…lt/ activitygt lt/applicationgt lt/manifestgt xml 文件中包括多个 activity,每个 activity 对应于应用的每个界面,其中在 intent-filter 中支持 MAIN 操作和 LAUNCHER 种类的 activity 为启动应用程序的 MainActivity,工具解135 析上述 xml 文件得到 MainActivity 为:com.books.pixiaopang.book_start,该 activity 用于脚本 生成模块生成启动脚本。
获取 MainActivity 成功后,工具将利用 adb push 命令将应用程序 apk 包上传至手机文件夹,用于运行测试模块安装。
2.3 界面解析 界面解析用于获取手机终端界面的窗口列表及控件布局元素属性信息。
工具首先与140
Android 终端建立基于 TCP 协议的 Socket 连接,然后向终端发送“LIST”命令,终端会返 回当前运行程序的窗口列表,每个窗口以唯一的 Package/Activity 字符串标识6,通过窗口 标识可以判断当前程序是否运行正常。
工具向终端发送“DUMP -1”指令,终端会返回当前 屏幕窗口的布局控件元素信息。
常见的布局控件元素有 Butoon、ImageButton、EditText、TextView,控件基本属性有宽145 度、高度、左上角相对 X 坐标、左上角相对 Y 坐标。
“DUMP -1”指令返回的是以“DONE.” 字符串分界线的数据流,每行代表一个控件元素,程序对数据流进行解析后,会构造一个树 -4- 形布局结构,布局结构及应用程序界面如图 2 所示: 图 2 应用程序界面及布局结构树图150 Fig. 2 Application interface and layout structure tree 图 2 的左下角是应用程序界面的截图,对应该界面,布局结构中的每个节点代表当前界 面的一个元素。
“短信发送”程序界面的根节点为 PhoneWidowDecorView,表示屏幕的整 个窗口,其子节点 LinerLayout 表示线性布局,LinerLayout 又有两个子节点 FrameLayout, 这两个子节点表示界面分为标题和主体内容两大矩形块,以此类推,直到 TextView、155 EditText、Button 等叶子节点。
界面解析的关键技术是获取叶子节点控件的绝对 XY 坐标值,以供脚本生成模块生成并 执行 Python 脚本,让程序模拟点击控件,达到自动化测试目的。
对于布局结构树,采用树 的深度优先遍历算法,获取叶子节点控件的绝对 XY 坐标值。
由于子节点所在的矩形区域嵌 套在父节点所在的矩形区域中,而叶子节点的相对坐标基于父节点左上角坐标值,父节点还160 有它自己的父节点,通过深度遍历迭代算法找到最原始的根节点 PhoneWidowDecorView 相 对于屏幕的 XY 坐标值,所有叶子节点控件的 XY 坐标值便可以得到,核心算法如下: p node.parent while p 存在 x p 节点左上角 X 坐标165 y p 节点左上角 Y 坐标 p p 的父节点 2.4 脚本生成 脚本生成利用 Monkeyrunner 的 API 动态生成 Python 脚本,主要有安装脚本、启动脚本、170 触摸脚本、截图脚本、卸载脚本,其中触摸脚本是核心,通过接收界面解析模块获取到的控 件的绝对 XY 坐标值,利用 touch API 来生成 Python 脚本,模拟用户向设备发送按钮点击事 件。
若图 2 中“发送”按钮的 XY 坐标值为200300,则动态生成的触摸脚本为: from com.
android.monkeyrunner import MonkeyRunner MonkeyDevice MonkeyImage device MonkeyRunner.waitForConnection175 device.touch200300DOWN_AND_UP -5- 2.5 运行测试 运行测试是工具的核心部分,该模块在预处理、界面解析、脚本生成的支撑下,负责应 用程序的安装、启动、遍历测试、卸载。
工具首先调用 Monkeyrunner 执行安装、启动脚本, 启动程序主界面。
应用程序安装、启动后,需要依次遍历各层界面,从而才能模拟点击应用180 程序页面的各个按钮控件。
应用程序的各个界面可以组织成如图 3 所示的树形结构图: 图 3 应用程序界面层次结构图 Fig. 3 Application interface hierarchy 图 3 中每个节点代表一个界面,系统采用树的先根遍历算法遍历各个界面。
应用程序的185 Activity 唯一的标志一个界面,当启动 MainActivity 后,应用程序进入主界面,标志该界面 为根界面,点击根界面的一个控件进入另外一个 Activity 标志的界面,称为第二层界面,该 界面是根界面的子界面。
点击第二层界面的控件,进入第三层界面,以此类推。
当第二层界 面上的所有控件都遍历测试完毕,返回根界面,再依次遍历测试根界面的其他控件。
图 3 中的各个界面遍历次序为:ABEFCD。
工具调用 Monkeyrunner 执行脚本生成模块生成的触190 摸脚本,对界面的各个控件发送触摸事件流。
对于每一个界面,工具同时调用 Monkeyrunner 执行截图脚本,对设备当前界面截图并保存图片文件。
当所有界面控件都遍历完毕,测试结 束,工具执行卸载脚本卸载应用程序,同时将所有图片最终生成 word 报表展示给用户。
运行测试的实质在于遍历应用程序的各个界面,让其动态运行,以便触发应用程序运行 时潜在的恶意行为,比如后台偷发短信、联网扣费、隐私窃取等行为,从而让其它终端安全195 监控工具捕获,同时将运行测试过程中各个界面截图保存,供测试人员审核。
3 测试结果分析 我们分别用自动化动态测试工具和人工静态分析方法对搜集到的 10 款
Android 恶意应 用程序进行测试验证。
首先在终端设备上安装 360 安全监测软件,然后在 PC 端运行动态测 试工具,导入
Android 应用程序,在无人工干预的情况下按顺序运行测试这 10 款应用。
测200 试完毕,查看截图文档。
截图文档记录了应用安装、启动、遍历测试中的界面,截图记录 360 软件对捕获到的动态恶意行为的安全威胁提示以及广告插件。
通过对截图文档的整理, 得到结果分析数据如表 2 所示: 表 2 自动化动态测试结果分析 Tab. 2 Analysis of automated dynamic testing results 应用 人工静态分析结果 动态测试结果 测试时间/min 手动 自动 3D 星空动态壁纸 自动发送短信 安装完毕,后台发送短信 7 9 -6- 数独 自动发送短信 安装完毕,后台发送短信 5 8 今日中国 启动 GPRS 进行定位 测试运行时,后台联网 5 8 chompSMS 连接固定网站 启动后,后台联网 5 7 商务管家 自动发送短信 启动后,后台发送短信 6 7 启动后,后台发送短信,联 埃及魔石探秘 连接固定网站 8 10 网 连接固定网站 启动后,后台联网,发送短 shopsavvy 6 9 信,同时存在手机广告 手机大头 无 运行时,发送短信,收费提 5 8 示隐蔽,联网 主题管家 无 安装成功,启动失败 3 5 运行时,收费提示隐蔽,运 horoscope 无 7 9 行过程出现异常终止205 上述人工静态分析方法通过人工检测敏感 API 来捕获.
上一篇:
Android 面试题(1) 共7 其00001
下一篇:
美术教学中网络信息论文