一种Android系统中程序行为与界面操作映射方法

文档序号:6486722阅读:159来源:国知局
一种Android系统中程序行为与界面操作映射方法
【专利摘要】本发明涉及一种Android系统中程序行为与界面操作映射方法,其步骤包括:1)程序UI动态探测;2)程序行为静态探测;3)根据Activity调用图和触发Activity组件,找出主Activity到所述触发Activity结点的路径,输出该路径的界面操作信息,完成映射。本发明用动态探测的方法获取所有可能的界面跳转关系及所需要的界面操作信息,然后用静态分析的方法分析出与程序行为相关联的界面,因此,就可以从动态探测出的界面跳转关系中知道触发行为所需要经过的界面执行路径,以及执行这些路径所需要的界面操作信息,实现程序行为与界面操作的映射。
【专利说明】一种Android系统中程序行为与界面操作映射方法
【技术领域】
[0001]本发明涉及一种Android软件的映射方法,特别涉及一种Android系统中程序行为与界面操作的映射方法,属于软件分析与测试领域。
【背景技术】
[0002]随着智能手机的快速发展和普及,移动互联网已经通过大量的应用软件改变了人们在娱乐、社交和工作等方面的方式。Android系统的智能手机在移动互联网市场中占据了大量的市场份额,根据EnfoDesk易观智库的报告发布的《2011年第4季度中国移动终端市场季度监测》调研数据显示,2011年第四季中国市场Android系产品市场份额占整体智能机市场的68.4%。这最近一年中,Android应用软件数量以惊人的速度增长。据Google官方数据,Android应用软件下载量从2011年3月时的30亿增长到2011年12月时的100亿。此外,Google官方电子市场中的Android应用软件数量已于2012年3月初增长到45万。由于Android系统的开放性,使得除Google官方电子市场外还存在许多第三方的电子市场,例如AmazonAppstore和Samsung Apps,特别是在中国地区,第三方的电子市场数量多达100多家。
[0003]Android系统为用户提供了友好的W,但这些n会给开发者在软件测试时带来困难,自动化测试比较麻烦。另外,有些开发者把n引入到他们编写的Android恶意软件中去,利用UI来躲避现在的Android恶意软件检测技术。例如:一个Android软件需要用户对某个界面上的特定按钮点击后才能触发某个行为。因此,无论是在测试还是安全检测方面,都很难自动化地点击到正确的按钮以此来触发出行为。在Andro i d系统中,Act iVi ty是一个系统组件,用来显示每个界面的内容,并且让用户与之交互。目前,Android白盒测试技术,仅仅只能自动化地对当前Activity中的所有元素进行遍历,当需要测试由某个特定Activity中的n控件所触发的行为时,需要测试人员手工编写测试脚本来完成。同样地,在Android软件恶意行为检测技术上,自动化地操作n控件来触发相应的恶意行为也尤为困难,一个简单做法是生成随机用户事件来操作界面,但效率不到40%。这些困难的根本原因是,由于n操作逻辑的复杂性,很难将程序行为映射到界面操作上去。
[0004]面对当前大量的Android软件,无论是在软件测试,还是在恶意软件检测领域,都非常有必要设计出一种Android软件的程序行为与界面操作的自动映射方法,来解决自动化软件测试和自动化恶意软件检测中的难题。

【发明内容】

[0005]鉴于以上的问题,本发明的目的是提供一种Android软件的程序行为与界面操作的映射方法,程序行为是需要界面操作来完成的。融合动态和静态分析技术,将程序行为自动化地映射到其对应的界面操作信息。
[0006]本发明是通过动态遍历的方法得到所有Activity的调用关系,以及Activity调用所需的用户操作信息。然后通过静态分析方法找到程序行为所对应的API,进一步逆向搜索函数调用关系获取可能的程序执行路径,针对每个执行路径,分析得到触发Activity。最后,我们在所有Activity的调用关系里找出可到达触发Activity的路径,因此我们能得到触发程序行为所需要的界面操作信息。
[0007]本发明提出一种Android系统中程序行为与界面操作映射方法,其步骤包括:
[0008]I)程序UI动态探测;
[0009]1-1)启动Android系统中待测软件,遍历该软件的一个主Activity组件上每个用户界面UI元素,保存并维持当前系统内存状态;
[0010]1-2)遍历该软件上所有Activity组件并记录Activity组件之间跳转关系和用户操作信息,反复此步骤;
[0011]1-3)根据遍历的所有Activity组件,以每个Activity为结点、每个具有Activity跳转关系和用户操作信息作为边,建立Activity调用图;
[0012]1-4)输出Activity调用图对应的界面操作信息;
[0013]2 )程序UI静态探测;
[0014]2-1)对待测软件进行反汇编;
[0015]2-2)根据反汇编提取用户指定程序行为所对应的API函数调用路径;
[0016]2-3)从路径中提取出触发Activity组件,输出触发Activity组件所对应的界面操作信息;
[0017]3)根据Activity调用图和触发Activity组件,找出主Activity到所述触发Activity结点的路径,输出该路径的界面操作信息,完成映射。
[0018]遍历所述UI元素时,若触发新的Activity启动,则该Activity组件遍历结束后恢复系统内存。
[0019]遍历所述Activity组件时,产生新Activity,保存当前系统内存。
[0020]所述的保存当前系统内存状态,可通过dump方式把模拟器中的内存dump后写入到文件中,所述恢复系统内存,将内存dump文件重新加载到模拟器中。
[0021]所述遍历Activity组件上每个用户界面UI元素方法是:通过遍历当前Activity中的UI树,得到每个n元素;再根据UI元素的类型,执行不同类型的用户操作。
[0022]所述反汇编使用APK工具得到待测软件的smali代码或Dalvik代码。
[0023]更进一步,所述的UI元素包括按钮、视图、适配器视图和组合按钮。
[0024]更进一步,所述用户操作信息包括:UI信息和用户操作类型;所述UI信息是指被操作的n元素的坐标以及n类型;所述用户操作类型,指上一次操作时的用户事件函数类型。
[0025]更进一步,所述从路径中提取出触发Activity组件的方法为:分析出所有可能执行到该API的函数调用路径,对每条路径上第一个函数进行分析,找出触发Activity。
[0026]更进一步,所述Activity组件之间跳转关系根据一个Activity结点跳转到另一个Activity结点及该两结点之间的边关系来决定。
[0027]与现有技术相比,本发明的积极效果为:
[0028]本发明能够自动化地获取与某一个行为对应的界面操作信息,现有的技术只能人工手动地去分析后得到,或者通过成功率很低的随机测试方法来得到。本发明用动态探测的方法获取所有可能的界面跳转关系及所需要的界面操作信息,然后用静态分析的方法分析出与程序行为相关联的界面,因此,就可以从动态探测出的界面跳转关系中知道触发行为所需要经过的界面执行路径,以及执行这些路径所需要的界面操作信息。本发明为现有的Android软件测试技术和Android恶意软件检测技术提供了有力的支持。
【专利附图】

【附图说明】
[0029]图1是本发明Android系统中程序行为与界面操作映射方法的架构图;
[0030]图2Android系统中程序行为与界面操作映射方法动态探测方法的逻辑流程图;
[0031]图3Android系统中程序行为与界面操作映射方法动态探测方法静态分析方法的逻辑流程图;
[0032]图4Android系统中程序行为与界面操作映射方法动态探测方法生成界面操作信息的逻辑流程图。
【具体实施方式】
[0033]本发明可至少包含三个部分:通过动态探测方法构造的动态探测器、通过静态探测方法构造的静态分析器和基于界面操作信息的界面操作信息生成器。动态探测器主要负责提取Activity之间的跳转关系和所需的用户操作信息。它在每个Activity上操作其所有的UI元素,若当前Activity跳转到另一个Activity,则能得到这两个Activity之间的跳转关系,以及产生这个跳转的界面操作信息。当动态遍历完所有的Activity之后,就能得到Activity调用图。静态分析器主要是对Android软件进行反汇编后,获取程序行为所对应API的函数调用路径,每个函数调用路径上的第一个函数所属的Activity就是触发Activity。界面操作信息生成器在Activity调用图中选取所有从主Activity到触发Activity的Activity调用路径,输出每条路径及执行该路径所需要的用户操作信息。
[0034]以下参照附图对一种Android程序行为与界面操作自动映射方法及系统进行详细说明,但本发明不局限于下面的实施方式。
[0035]本发明的整体架构如图1所示,本发明从结构上主要包含三个部分:动态探测器、静态分析器和界面操作信息生成器。动态探测器是基于Android模拟器的,它修改了模拟器底层的代码,可以遍历和操作当前Activity中的每个n元素。在动态探测器中安装Android软件并且只启动,然后开始遍历所有的Activity。为了节省遍历的时间开销,动态探测器会在开始遍历当前Activity的所有n元素之前都会先保存内存状态,若操作一个UI元素后启动了新的Activity,则会将之前保存的内存恢复,接着操作下一个n元素。最后,动态探测器将所分析到的所有Activity调用图发送给界面操作信息生成器。静态分析器利用APKtool工具将Android应用软件的APK文件反汇编后得到smali代码,然后从smali代码中找到与用户指定程序行为所对应的API,分析出所有可能执行到该API的函数调用路径。接着,对每条路径上的第一个函数进行分析,找出它所属于的Activity,即为触发Activity,并也发送给界面操作信息生成器。界面操作信息生成器从在Activity调用图中提取出从主Activity到触发Activity的所有Activity调用路径,最后输出这些调用路径,以及这些路径所代表的界面操作信息。
[0036]动态探测器的工作流程如图2所示,首先安装我们要测试或检测的Android软件并启动运行。然后,保存当前内存状态,即把当前系统内存dump到指定文件中去。接着取当前Activity的UI树,对UI树中的每个UI元素进行操作,执行它的所有用户事件函数。当操作完所有的UI元素后,并且发现已经遍历完所有Activity,动态探测器会停止探测,且输出Activity调用图到指定文件中。如果在操作完所有n元素后且还未遍历完所有Activity,动态探测器会启动下一个Activity,接着按同样方法继续分析。当对UI元素进行操作时,发现有新的Activity生成,则记录下当前执行的用户操作信息,包括UI元素的坐标和用户操作类型,然后对内存状态进行恢复后操作下一个UI元素。
[0037]静态分析器的工作流程如图3所示,首先将Android软件进行反汇编后得到smali代码或者Dalvik代码,然后根据用户指定的程序行为找出所对应的API。为了得到执行该API所需经过的函数调用路径,我们在smali代码中提取出所有函数调用,然后再利用递归的方法找出该API的函数调用路径。对API的函数调用路径中的第一个函数进行分析,若其属于一个Activity的成员函数,那么这个Activity就为触发Activity。若其属于一个控件的事件函数,贝1J分析该控件所绑定的Activity,即为触发Activity。最后,将触发Activity列表输出到指定文件中去。
[0038]界面操作信息生成器的工作流程如图4所示,首先从指定的文件中读取Activity调用图和触发Activity,然后应用图搜索算法(例如深度优先搜索算法),在Activity调用图中找出从主Activity到触发Activity的所有Activity调用路径。最后,把这些Activity调用路径上所代表的界面操作信息输出。
[0039]尽管为说明目的公开了本发明的具体实施例和附图,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
【权利要求】
1.一种Android系统中程序行为与界面操作映射方法,其步骤包括: 1)程序Π动态探测; 1-1)启动Android系统中待测软件,遍历该软件的一个主Activity组件上每个用户界面UI元素,保存并维持当前系统内存状态; 1-2)遍历该软件上所有Activity组件并记录Activity组件之间跳转关系和用户操作信息,反复此步骤; 1-3)根据遍历的所有Activity组件,以每个Activity为结点、每个具有Activity跳转关系和用户操作信息作为边,建立Activity调用图; 1-4)输出Activity调用图对应的界面操作信息; 2)程序UI静态探测; 2-1)对待测软件进行反汇编; 2-2)根据反汇编提取用户指定程序行为所对应的API函数调用路径; 2-3)从路径中提取出触发Activity组件,输出触发Activity组件所对应的界面操作信息;
3)根据Activity调用图和触发Activity组件,找出主Activity到所述触发Activity结点的路径,输出该路径的界面操作信息,完成映射。
2.如权利要求1所述的Android系统中程序行为与界面操作映射方法,其特征在于,遍历所述UI元素时,若触发新的Activity启动,则该Activity组件遍历结束后恢复系统内存。
3.如权利要求1所述的Android系统中程序行为与界面操作映射方法,其特征在于,遍历所述Activity组件时,产生新Activity,保存当前系统内存。
4.如权利要求2或3所述的Android系统中程序行为与界面操作映射方法,其特征在于,所述的保存当前系统内存状态,可通过dump方式把模拟器中的内存dump后写入到文件中,所述恢复系统内存是指将内存dump文件重新加载到模拟器中。
5.如权利要求1所述的Android系统中程序行为与界面操作映射方法,其特征在于,所述遍历Activity组件上每个用户界面UI元素方法是:通过遍历当前Activity中的UI树,得到每个Π元素;再根据UI元素的类型,执行不同类型的用户操作。
6.如权利要求1所述的Android系统中程序行为与界面操作映射方法,其特征在于,所述反汇编使用APK工具得到待测软件的smali代码或Dalvik代码。
7.如权利要求1所述的Android系统中程序行为与界面操作映射方法,其特征在于,所述的UI元素包括按钮、视图、适配器视图和组合按钮。
8.如权利要求1所述的Android系统中程序行为与界面操作映射方法,其特征在于,所述用户操作信息包括=UI信息和用户操作类型;所述UI信息是指被操作的UI元素的坐标以及Π类型;所述用户操作类型,指上一次操作时的用户事件函数类型。
9.如权利要求1所述的Android系统中程序行为与界面操作映射方法,其特征在于,所述从路径中提取出触发Activity组件的方法为:分析出所有可能执行到该API的函数调用路径,对每条路径上第一个函数进行分析,找出触发Activity。
10.如权利要求1所述的Android系统中程序行为与界面操作映射方法,其特征在于,所述Activity组件之间跳转关系根据一个Activity结点跳转到另一个Activity结点及该两结点之间的边关系来决 定。
【文档编号】G06F11/36GK103530221SQ201210228718
【公开日】2014年1月22日 申请日期:2012年7月2日 优先权日:2012年7月2日
【发明者】郑聪, 朱诗雄, 龚晓锐, 丁羽, 戴帅夫, 邹维 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1