一种Android应用运行时权限错误动态检测方法

文档序号:33778864发布日期:2023-04-18 23:59阅读:51来源:国知局
一种Android应用运行时权限错误动态检测方法

本发明涉及android应用,更具体的说是涉及一种android应用运行时权限错误动态检测方法。


背景技术:

1、android平台的权限机制会限制应用访问受限数据(如用户联系信息)和执行受限操作(如录制音频),从而保护用户隐私。google在android 6.0(api级别23)及更高版本中引入了android运行时权限(androidruntime permission,arp)机制后,应用可以在运行时向用户请求权限,用户可以在应用运行时随时撤销或授予权限。arp机制的引入极大地改善了对数据隐私的保护和应用的使用体验,同时也给android应用的开发和测试带来了新的挑战。需要在应用频繁更新的同时对应用进行充分测试,以确保应用在任何权限授予情况下都能正常运行。

2、android平台有很多受权限保护的api,如果android应用在调用受权限保护的api前未正确检查或请求相关权限,可能会导致应用行为异常,甚至是应用崩溃,这种android运行时权限问题被称为arp错误。arp错误直接影响了应用可用性,开发人员发布应用前应对其充分测试,以确保应用能在各种权限情境中正常运行,而不会受到用户开启或关闭权限的影响。然而,有研究表明,开发人员在没有自动化工具支持的情况下很难发现arp错误。尽管已有大量工作对android自动化测试进行了研究,但这些自动化测试工具通常未考虑arp机制,无法有效测试android应用内的权限相关行为,因此无法保证android应用在不同权限授予情况下的健壮性。

3、静态分析可用于检测android应用arp错误,但需要开发人员对静态分析的检测结果进行人工确认,开销较大且效率较低。以aper为例,它提取受权限保护api的调用上下文,并结合数据流及其提出的过程内、过程间等4种权限管理模式来定位错误,但是aper的检测结果可能存在大量误报,需通过开发人员手动验证错误。面对android应用所包含的大量复杂事件驱动的gui相关行为,开发人员人工验证的开销较大。如果能将静态分析的结果用于制导自动化测试,可缩小探索范围,将测试资源更多地集中到可能触发arp错误的控件上,提高检测效率。

4、因此,如何快速检测android应用内的arp错误,进而帮助开发人员快速修复错误,提高应用健壮性是本领域技术人员亟需解决的技术问题。


技术实现思路

1、有鉴于此,本发明提供了一种android应用运行时权限错误动态检测方法,考虑到了arp机制,相比其他自动化测试工具,能够更高效地检测android应用内的arp错误。

2、为了实现上述目的,本发明提供如下技术方案:

3、一种android应用运行时权限错误动态检测方法,包括以下步骤:

4、对被测应用的apk文件进行权限误用分析,获取受权限误用影响的api,插桩apk文件内受权限误用影响的api,并对插桩后的apk文件重新签名;

5、将插桩后可安装运行的apk文件安装到android设备上,动态探索被测应用以生成状态转换图,并在动态探索的过程中记录目标控件,即能够调用受权限误用影响的api的控件;

6、自动化探索被测应用,在探索过程中根据状态转换图和目标控件选择控件进行操作,在检测出android运行时权限错误后输出测试报告。

7、上述技术方案达到的技术效果为:结合权限误用分析和动态探索构建状态转换图,使用状态转换图制导自动化测试,以达到快速检测android应用arp错误的目的。

8、可选的,对被测应用的apk文件进行权限误用分析的具体方法为:

9、采用静态权限误用分析工具分析疑似受权限误用影响的api,并将疑似受权限误用影响的api称为可疑api;

10、包括aper在内的静态权限误用分析工具以apk文件为输入,利用被测应用内控件产生的api调用上下文和数据流定位并输出可疑api。

11、可选的,插桩apk文件内受权限误用影响的api的具体方法为:

12、利用包括soot在内的支持android程序字节码分析的工具在调用可疑api的位置插桩,当被测应用运行过程中调用可疑api时,即可通过日志进行监控。

13、可选的,对插桩后的apk文件重新签名的具体方法为:

14、插桩apk文件后,原本的签名被破坏、无法安装运行时,利用包括jarsigner在内的签名工具对插桩后的被测应用apk文件重新签名。

15、可选的,生成状态转换图,具体包括以下步骤:

16、s21:起始状态,输入可安装运行的apk文件;

17、s22:安装apk文件;

18、s23:输出可运行的被测应用;

19、s24:动态探索被测应用,构建状态转换图;

20、s25:输出状态转换图;

21、s26:输出目标控件集合。

22、可选的,s24-s26的具体方法为:

23、使用包括droidbot在内的自动化测试工具动态探索被测应用,在每一步探索过程中,从当前状态si所对应的界面控件集合wi,根据控件位置依次选择一个控件wi,j∈wi操作,操作控件后分析当前界面控件集合wj,若wi≠wj,表明被测应用进入新的状态sj,则将新的状态sj及其对应的界面内所有控件分别加入状态集合s和控件集合w,将操作控件wi,j产生的日志加入日志集合l,其中result(wi,j)=lm,最后将触发状态转换的控件wi,j加入集合wtran,其中from(wi,j)=si∈s,to(wi,j)=sj∈s;若wi=wj,则仅将操作控件wi,j产生的日志加入日志集合l,状态转换图不新增状态节点和状态转换边;不断重复上述步骤,直至达到指定的探索时间,构建状态转换图stg=(s,w,wtran,l);

24、同时,在探索过程中监控日志,当操作控件wp,q后监控到插桩内容,则将控件wp,q加入目标控件集合wtarg。

25、可选的,根据状态转换图和目标控件选择控件进行操作,具体包括以下步骤:

26、s31:输入被测应用;

27、s32:获取当前界面信息;

28、s33:输出当前界面信息;

29、s34:控件识别;

30、s35:输出当前界面所有控件信息;

31、s36:输入状态转换图stg=(s,w,wtran,l);

32、s37:输入目标控件集合wtarg;

33、s38:选择并操作控件;

34、s39:判断是否检测到android运行时权限错误;若是,则输出测试报告,反之则执行s32。

35、可选的,s38中选择并操作控件的具体方法为:

36、对于目标控件wp,q∈wtarg,分阶段使用不同策略选择控件进行操作:第一阶段,分析当前应用界面的控件集合,若当前控件集合与状态转换图stg中的状态节点si∈s对应的界面控件集合wi匹配,则当前状态为si,获取状态si至状态sp需要操作的最短控件序列path(si,sp)={wi,j,wj,k,…,wo,p},并操作序列中的第一个控件wi,j,其中sp=from(wp,q)为目标控件wp,q所在界面对应的状态;不断执行上述过程,直至被测应用当前状态为sp;

37、第二阶段,首先分析可疑api所需危险权限的授予情况,若危险权限已被授予,则在撤销危险权限后操作目标控件wp,q,反之,则直接操作目标控件wp,q;随后,从被测应用当前状态开始基于深度优先遍历策略选择控件,即每次从被测应用当前界面中选择一个控件操作,当执行一条事件序列后,若无法探索到更多状态时,则返回状态sp探索其他路径;

38、状态转换图stg中以状态sp为起点的路径被充分探索后,从目标控件集合wtarg中选择其他控件并重复s38;在探索过程中,达到指定时间或发现运行时权限错误后,停止探索。

39、经由上述的技术方案可知,与现有技术相比,本发明公开提供了一种android应用运行时权限错误动态检测方法,具有以下有益效果:

40、(1)本发明结合权限误用分析和动态探索构建状态转换图,使用状态转换图制导自动化测试,以达到快速检测android应用arp错误的目的,进而帮助开发人员快速修复错误,提高应用健壮性;与其他方法相比,本方法关注可能存在arp错误的控件,从而缩小探索范围,提高检测效率,能够更高效地检测android应用内的arp错误;

41、(2)本发明提出的错误检测方法适用于不同的应用,基于状态转换图,与设备、控件布局无关,可适配于不同版本的android设备。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1