形布局结构,布局结构及应用程序界面如图2所示: 图2 应用程序界面及布局结构树图 Fig. 2 Application interface and layout structure tree 150 图2的左下角是应用程序界面的截图,对应该界面,布局结构中的每个节点代表当前界面的一个元素。“短信发送”程序界面的根节点为PhoneWidow$DecorView,表示屏幕的整个窗口,其子节点LinerLayout表示线性布局,LinerLayout又有两个子节点FrameLayout,这两个子节点表示界面分为标题和主体内容两大矩形块,以此类推,直到TextView、EditText、Button等叶子节点。 155 界面解析的关键技术是获取叶子节点控件的绝对XY坐标值,以供脚本生成模块生成并执行Python脚本,让程序模拟点击控件,达到自动化测试目的。对于布局结构树,采用树的深度优先遍历算法,获取叶子节点控件的绝对XY坐标值。由于子节点所在的矩形区域嵌套在父节点所在的矩形区域中,而叶子节点的相对坐标基于父节点左上角坐标值,父节点还有它自己的父节点,通过深度遍历迭代算法找到最原始的根节点PhoneWidow$DecorView相160 对于屏幕的XY坐标值,所有叶子节点控件的XY坐标值便可以得到,核心算法如下: p = node.parent; while (p 存在) { x += p节点左上角X坐标; y += p节点左上角Y坐标; 165 p = p的父节点; } 2.4 脚本生成 脚本生成利用Monkeyrunner的API动态生成Python脚本,主要有安装脚本、启动脚本、触摸脚本、截图脚本、卸载脚本,其中触摸脚本是核心,通过接收界面解析模块获取到的控170 件的绝对XY坐标值,利用touch API来生成Python脚本,模拟用户向设备发送按钮点击事件。若图2中“发送”按钮的XY坐标值为(200,300),则动态生成的触摸脚本为: from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage device = MonkeyRunner.waitForConnection() device.touch(200,300,DOWN_AND_UP) 175 2.5 运行测试 运行测试是工具的核心部分,该模块在预处理、界面解析、脚本生成的支撑下,负责应用程序的安装、启动、遍历测试、卸载。工具首先调用Monkeyrunner执行安装、启动脚本,启动程序主界面。应用程序安装、启动后,需要依次遍历各层界面,从而才能模拟点击应用程序页面的各个按钮控件。应用程序的各个界面可以组织成如图3所示的树形结构图: 180 图3 应用程序界面层次结构图 Fig. 3 Application interface hierarchy 图3中每个节点代表一个界面,系统采用树的先根遍历算法遍历各个界面。应用程序的Activity唯一的标志一个界面,当启动MainActivity后,应用程序进入主界面,标志该界面185 为根界面,点击根界面的一个控件进入另外一个Activity标志的界面,称为第二层界面,该界面是根界面的子界面。点击第二层界面的控件,进入第三层界面,以此类推。当第二层界面上的所有控件都遍历测试完毕,返回根界面,再依次遍历测试根界面的其他控件。图3中的各个界面遍历次序为:ABEFCD。工具调用Monkeyrunner执行脚本生成模块生成的触摸脚本,对界面的各个控件发送触摸事件流。对于每一个界面,工具同时调用Monkeyrunner190 执行截图脚本,对设备当前界面截图并保存图片文件。当所有界面控件都遍历完毕,测试结束,工具执行卸载脚本卸载应用程序,同时将所有图片最终生成word报表展示给用户。 运行测试的实质在于遍历应用程序的各个界面,让其动态运行,以便触发应用程序运行时潜在的恶意行为,比如后台偷发短信、联网扣费、隐私窃取等行为,从而让其它终端安全监控工具捕获,同时将运行测试过程中各个界面截图保存,供测试人员审核。 195 3 测试结果分析 我们分别用自动化动态测试工具和人工静态分析方法对搜集到的10款Android恶意应用程序进行测试验证。首先在终端设备上安装360安全监测软件,然后在PC端运行动态测试工具,导入Android应用程序,在无人工干预的情况下按顺序运行测试这10款应用。测试完毕,查看截图文档。截图文档记录了应用安装、启动、遍历测试中的界面,截图记录200 360软件对捕获到的动态恶意行为的安全威胁提示以及广告插件。通过对截图文档的整理,得到结果分析数据如表2所示: 表2 自动化动态测试结果分析 Tab. 2 Analysis of automated dynamic testing results 应用 人工静态分析结果 动态测试结果 测试时间/min 手动 自动 3D星空动态壁纸 自动发送短信 安装完毕,后台发送短信 中国科技论文在线 数独 自动发送短信 安装完毕,后台发送短信 5 8 今日中国 启动GPRS进行定位 测试运行时,后台联网 5 8 chompSMS 连接固定网站 启动后,后台联网 5 7 商务管家 自动发送短信 启动后,后台发送短信 6 7 埃及魔石探秘 连接固定网站 启动后,后台发送短信,联网 8 10 shopsavvy 连接固定网站 启动后,后台联网,发送短信,同时存在手机广告 6 9 手机大头 无 运行时,发送短信,收费提示隐蔽,联网 5 8 主题管家 无 安装成功,启动失败 3 5 horoscope 无 运行时,收费提示隐蔽,运行过程出现异常终止 7 9 205 上述人工静态分析方法通过人工检测敏感API来捕获恶意行为,表2中的测试结果表明: (1) 自动化动态测试工具查出了所有的预期恶意行为,包括后台发送短信和自动联网,而且能告知是在那个阶段捕获的,比如安装完毕、启动、测试运行时。 (2) “埃及魔石探秘”、“shopsavvy”、“手机大头”的测试结果显示,对于针对“后210 台发送短信”的同一恶意行为,静态检测存在着漏报,因为针对不同的应用可以有不同的恶意代码形式,代码样本库不能保证涵盖所有恶意规则。 (3) “主题管家”、“horoscope”测试结果显示,对于应用由于内存泄露或者并发错误导致的无法安装、启动、运行终止问题,由于静态分析无法虚拟化执行部分程序,需要动态工具执行程序才能重现。 215 (4) 动态测试工具的平均执行时间远低于人工分析时间,节省了大量的测试时间和人力资源,自动化程度较高。截图报告以安装、启动、运行、卸载的逻辑顺序展示各个阶段的运行测试情况,精确直观地展示了恶意行为以及该行为发生的阶段。 4 结论 自动化测试是目的是为了提高测试效率及质量,大量Android恶意应用涌现的背景下,220 自动化测试显的极为重要,但是传统的人工测试效率低下,现有的Monkey及Monkeyrunner工具存在着无法自定义扩展和测试不连续的局限性,本文在Monkeyrunner的基础上研究实现了一种自动化动态测试工具。该工具能批量自动安装、启动、测试并截图,同时配合其它安全监控软件记录应用运行中的恶意行为。测试结果表明,自动化动态测试工具的检测效率高,人工依赖性低,是一种比较可行的技术。 225 [参考文献] (References) [1] 蔡罗成. Android后台监听实现机制浅析思路[J]. 信息安全与通信保密,2010,(6):39-41. [2] McAfee:Android恶意软件增长了1200%[OL]. [2012-05-24]. http://pcedu.pconline.com.cn/android/1205/2799864.html [3] 管铭. 基于程序分析的软件安全漏洞检测技术研究[D]. 西安:西北工业大学,2007. 230 [4] Android自动测试之Monkey工具[OL]. [2011-03-10]. http://www.cnblogs.com/yyangblog/archive/2011/03/10/1980068.html [5] 王向辉,张国印,沈洁. Android应用程序开发[M]. 北京:清华大学出版社,2010. [6] 赵亮,张维. 基于Android技术的界面设计与研究[J]. 电脑知识与技术,2009,5(29):8183-8185. 235 学术论文网Tag:代写硕士论文 代写论文 代写代发论文 代发论文 |