CN108090355A - 一种apk自动触发工具 - Google Patents

一种apk自动触发工具 Download PDF

Info

Publication number
CN108090355A
CN108090355A CN201711220729.XA CN201711220729A CN108090355A CN 108090355 A CN108090355 A CN 108090355A CN 201711220729 A CN201711220729 A CN 201711220729A CN 108090355 A CN108090355 A CN 108090355A
Authority
CN
China
Prior art keywords
apk
interfaces
interface
component
components
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201711220729.XA
Other languages
English (en)
Other versions
CN108090355B (zh
Inventor
陶敬
赵琪琪
王平辉
韩婷
曹鹏飞
王铮
张岩
柳哲
孙立远
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian Jiaotong University
Original Assignee
Xian Jiaotong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xian Jiaotong University filed Critical Xian Jiaotong University
Priority to CN201711220729.XA priority Critical patent/CN108090355B/zh
Publication of CN108090355A publication Critical patent/CN108090355A/zh
Application granted granted Critical
Publication of CN108090355B publication Critical patent/CN108090355B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

本发明一种APK自动触发工具,包括:APK分析预处理模块、APK自动安装与启动模块和APK自动化交互模块三部分。APK分析预处理模块自动分析获取APK的MainActivity,PackageName,Activity等信息,为APK自动化交互做准备;APK自动安装与启动模块将目标APK自动安装到模拟器上,并在模拟器中自动启动该APK;APK自动化交互模块基于深度遍历的思想对APK中的所有组件进行自动触发。本发明可以自动安装启动APK,在APK启动运行后,实时获取屏幕中的所有组件,识别不同的UI界面和不同的组件,模拟真实用户,对不同的组件执行相应的交互行为,从而触发APK的恶意代码,暴露恶意APK。

Description

一种APK自动触发工具
技术领域
本发明属于Android应用程序自动化交互技术领域,特别涉及一种APK自动触发工具。
背景技术
随着科学技术的迅速发展,智能手机的市场占有率急速上升,其中Android***自发布以来,得到众多手机厂商和软件厂商的青睐。在Android智能手机给人们带来众多便捷的功能的同时,也带来了很大的安全隐患。而多数恶意APK都需要与用户进行交互才会表现出恶意行为。为了触发APK的恶意行为,在使用之前暴露APK的特征,保护用户的手机安全,需要一个有效的APK自动触发工具。
Monkey是Android***自带的自动化测试工具,可以生成指定数量的随机事件,事件类型包括按键输入、触屏操作、手势输入等。但是Monkey不能自定义事件,只能随机生成事件,而随机生成的事件中,有一定几率产生触发同一个组件的重复事件,而且在产生的事件中,有一些在当前界面没有响应,无需产生,但在Monkey中无法避免。
现在普遍使用的APK自动触发工具除Monkey工具外,还有一些其他工具,这些工具还存在以下缺陷:
1、依赖于APK的源码,有一定的局限性。实际中很难获取APK的源码,即使使用反编译工具,有些源码也已经经过混淆,难以进行有效分析。
2、需要修改Android源码。Android版本不同,源码修改后兼容性方面会存在问题,而且很多APK在修改过源码的Android***中无法正常运行。
3、不能根据要求生成字符串。许多输入组件需要输入格式合适的字符串才能进行下一步操作,而现有工具或者没有生成字符串,或者生成无意义的随机字符串,不能满足要求。
发明内容
为了克服上述现有技术的缺点,本发明的目的在于提供一种APK自动触发工具,避免分析源码,有效模拟用户操作,以期获得更好的触发效果。采用深度优先遍历的思想,逐层逐项提取、识别和遍历UI组件,对应用程序中所有需要进行点击或输入文本的组件,模拟用户操作行为进行交互。而且,对于已经触发过的组件及时记录,避免重复触发同一组件,对应用程序的组件进行更加全面的遍历。本发明提供了UI界面的指纹信息构造方法以及UI界面存储栈和UI回收站来记录UI界面的遍历情况,并且可以自动生成有效的字符串来填写输入框。本发明通过构造UI界面的指纹信息来区分不同UI界面,并对遍历中在各种情况下触发的UI界面的状态进行记录,对需要继续触发的UI界面建立UI界面存储栈存储相关信息,对已经遍历完的UI界面建立UI回收站记录,对于需要填写字符串的组件可以自动生成符合要求格式的字符串。
为了实现上述目的,本发明采用的技术方案是:
一种APK自动触发工具,包括:
APK分析预处理模块,负责启动模拟器,以及分析AndroidManifest.xml文件得到APK的相关信息;
APK自动安装与启动模块,负责将目标APK自动安装到模拟器上,并在模拟器中自动启动该APK;
APK自动化交互模块,按照深度优先遍历的原则,实现模拟用户对UI界面中所获得的组件进行自动触发的功能,包括根据相关需求,自动生成字符串输入到需要输入文本内容的组件中,对需要进行点击操作的组件进行自动点击操作,以及根据组件触发顺序到达不同的UI界面。
APK分析预处理模块,由启动模拟器和分析AndroidManifest.xml两个部分组成,启动模拟器是为此工具使用提供运行环境,使此工具能有效运行,模拟用户自动触发APK;分析AndroidManifest.xml文件可以获得待测APK启动时的包名PackageName和启动时的MainActivity,为下一步启动APK做准备。同时,在分析AndroidManifest.xml文件时还可以获得待测APK的所有有效的Activity的名字,为之后交互过程中判断出现的Activity是否为待测APK的Activity提供参考信息,从而避免因为在无关UI界面进行交互而导致的时间消耗,提高运行效率。
所述APK分析预处理模块获取的APK的相关信息至少包括APK启动时的MainActivity的类名、包名PackageName以及APK中所有的Activity的类名的集合。
APK自动安装与启动模块,分为安装子模块和启动子模块,获取需要测试的APK的位置后,通过adb install命令可以将目标APK安装到模拟器中,然后根据APK分析预处理模块得到的PackageName和MainActivity信息,使用adb shell am start命令来启动这个APK。
所述APK自动安装与启动模块自动安装启动指定的APK,如果APK启动时出现故障,自动重新启动。
APK自动化交互模块,此模块采用深度优先遍历方法实现。遍历一个UI界面时,先获得此界面的所有可触发的UI组件,接着按顺序遍历获得的所有的UI组件,如果触发了某组件的UI事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,先遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历剩余的组件。在遍历过程中,如果某个界面遍历完所有的组件,对此界面执行向下滑动操作,如果界面发生变化,则把滑动后的界面也视为一个新的UI界面,进行遍历交互,如果界面已经遍历完且向下滑动不能改变界面内容,将此界面的信息存入UI回收站,然后查找此界面可以到达前一个界面的路径,按照这条路径回到之前的界面。如果某界面完全遍历完,且没有回到前一个界面的路径,则点击回退键BACK。如果点击BACK后没有回到前一个页面,而是回到了更靠前的页面,则在这个页面再点击相应按钮直到到达目标页面。
所述自动交互方法是基于“层”设计并用到了深度优先遍历算法,这是整个发明的关键。具体地,本发明中所提到的“层”是指各个不同的UI界面,在整个工具运行过程中,每个出现的UI界面必然属于且只属于某一层。在APK启动时,出现的初始UI界面为第一层,如果在第一层的某个组件触发后又出现了一个新的UI界面,那么这个界面为第二层,在第二层的组件触发后出现的之前从来没有出现过的新的UI界面为第三层,以此类推。属于第一层的只有一个UI界面,即启动后出现的第一个UI界面,属于其他层的可能会有多个UI界面。如果触发某个组件后出现的是之前就已经出现过的某层的UI界面,那么这个界面所属的层不会改变,还是原来的层。
所述深度优先遍历算法,具体如下:
1、采用DFS方法,遍历时,先启动应用程序,每遍历一个UI界面,需要先获得此界面的所有可触发的UI组件,接着按顺序遍历所有的UI组件,如果触发了某组件的UI事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,先遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历剩余的组件。
2、在遍历过程中,如果某个界面遍历完所有的组件,对此界面执行向下滑动操作,如果界面发生变化,则把滑动后的界面也视为一个新的UI界面,进行遍历交互,如果界面已经遍历完成且向下滑动不能改变界面内容,则查找此界面可以到达前一个界面的路径,按照这条路径回到之前的界面。如果某界面完全遍历完,且没有回到前一个界面的路径时,可以点击回退键BACK。
3、如果点击BACK后没有回到前一个页面,而是回到了更靠前的页面,则在这个页面再点击相应按钮直到到达目标页面。
在APK工具执行过程中需要判断UI界面是否相同,具体地,本发明通过为各个UI界面构建指纹来唯一标识每个UI界面,而UI界面由多个不同的组件组成,所以在构建UI界面的指纹信息之前,需要先构建不同组件的指纹信息。所述APK自动化交互模块对每个UI界面,根据界面中所有组件的类型、大小、坐标信息和所在的Activity的类名,用Hash算法都生成唯一的指纹值,从而对不同的UI界面进行区分,所述UI界面指纹值的构建方法如下:
先构建组成UI界面的不同组件的指纹信息,一个组件的指纹信息由以下内容构成:
(1)组件的类型;
(2)组件的坐标信息;
(3)组件的大小;
(4)组件所在的Activity的类名;
利用以上信息按照先后顺序进行字符串拼接,最后利用Hash算法得到固定长度的指纹值,UI界面的指纹信息由上述得到的各个组件的指纹值拼接后,再使用一次Hash算法得到。
根据UI界面的指纹值是否相同,判断出UI界面是否相同,具体判断方法为:
步骤1、如果两个UI界面的Activity类名不同,则为不同的UI界面,否则进入下一步;
步骤2、如果两个UI界面里的组件数目不一样,则为不同的UI界面,否则进入下一步;
步骤3、如果两个UI界面的指纹信息不一致,则为不同的UI界面,否则为相同的UI界面。
所述APK自动化交互模块中,为了保证可以将获得的所有UI界面都能按顺序完全遍历,本发明构建了一个UI界面的存储栈,即UI触发栈。
具体地,在对一个APK进行自动触发时,整个程序中有一个UI触发栈,这个栈按顺序存储了所有出现过且没有完全遍历完其中所有组件的UI界面。当某个UI界面正在被遍历时,如果出现了一个新的UI界面,那么就将旧的UI界面的当前信息储存起来,并将这个旧的UI界面压入UI触发栈。当UI触发栈内在这个UI界面之上的各个UI界面都已经出栈且这些UI界面中的组件都被遍历完之后,将此UI界面弹出栈,遍历此UI界面中尚未遍历的组件,如果全部组件都已经遍历完,那么,直接将此UI界面标记为“已经触发完成”,不再入栈。
而对于那些标记为“已经触发完成”的UI界面,在之后的交互过程中可能还会出现,为了避免重复遍历这些UI界面,本发明还构建了一个UI回收站,用于存放那些界面中组件已经完全交互完毕的UI界面。在本工具的运行过程中,如果出现了一个新的UI界面,判断这个界面是否为UI回收站中的界面,如果是则不需要遍历,直接离开此UI界面,否则按照要求对此UI界面进行遍历交互。
所述APK自动化交互模块中,本发明主要对可以点击和需要文本输入的组件进行模拟交互,通过模拟这两种交互操作,模拟用户动作可以与大多数的组件进行交互,覆盖率较高。可点击的组件包括Button,RadioButton,ImageView,TextView,CheckBox等。
对需要点击的组件进行点击操作,对于需要输入字符串的组件,则按照相关需求,生成相应格式的字符串。具体地,对于EditText这类组件,需要用户输入文本信息,而这些文本输入框通常需要输入的是指定格式的文本,例如“用户名”、“密码”、“手机号”等,这些格式信息通常在组件的text属性值注明,为了能够更好地模拟用户来进行文本输入,本发明自动生成符合要求的字符串。本发明中指定了“邮箱”、“手机号”、“验证码”、“用户名”、“密码”这些类型的字符串的生成格式,在进行自动触发时,如果文本输入框需要的字符是这些类型的,则按要求生成符合格式要求的字符串输入,如果需要的字符串类型是发明中没有指定过输入格式的,则生成随机字符串输入。
更加具体地,在工具使用时,首先,根据一个UI界面中各个组件的class属性提取所有需要文本输入的组件,然后根据各个文本输入组件的text属性值,自动生成符合需要的字符串输入,之后再触发其他组件。许多UI界面中的组件需要文本输入后才能有效触发,自动输入有效字符串可以更好地模拟用户操作。
对于可以向下滑动的UI界面,在当前界面中所有组件都触发过后,进行向下滑动操作,获取更多组件,进行更加全面的触发。
所述APK自动化交互模块对APK中的所有UI界面,按照深度优先搜索算法的思想,逐层逐项提取、识别和遍历界面中的UI组件,对识别出来的组件进行全面的触发。
与现有技术相比,本发明的有益效果是:
1、避免重复触发同一组件。
已有的可以用于模拟用户自动触发的工具主要是Monkey工具,然而这类工具在运行时会随机选择事件流,如果需要触发多次,会有很大的几率重复触发一些组件,重复一些事件流,同时,也有一些比较重要的事件流可能在运行时不会被触发,难以暴露APK中存在的问题,对APK的测试不全面。本发明则采用分层次的方式,对每层中的所有组件,可以进行全面的交互,而且已经触发过的组件在之后的运行过程中不会被再次触发,避免重复,节省大量因重复触发同一个组件而消耗的时间。
2、基于层次结构设计发明。
APK以Activity为各个页面的载体,在各个Activity中有多个组件,本发明对应用程序的结构进行划分将每个出现的UI界面定义为一个层,每个UI界面必然属于且只属于某一层。一个Activity可能由于其中的组件的状态不同会形成不同的UI界面,属于不同的层。基于层来遍历所有的组件,遍历的情况更加全面,结构更加清晰明了,也便于编程实现和理解。
3、根据文本框需要生成符合需要的格式的字符串。
很多Android应用程序都有需要输入字符的文本输入框,现有的自动模拟触发工具主要是生成随机字符串输入,然而,许多文本输入框需要输入特定的内容,这些内容都是有固定的格式,如果输入的格式不符合,无法触发下一步的Activity界面。本发明可以根据文本输入框的text属性的内容,对需要输入的内容进行区分,生成符合需要的格式的字符串,可以满足大多数APK的输入框需要的内容。采用这种方式可以触发更多的界面,与更多的组件进行模拟交互。
4、无需APK的源代码即可自动交互。
许多自动交互的工具是基于APK的源代码设计实现的,而在实际情况下,往往很难获得APK的源码,即使使用反编译工具进行反编译,也会因为代码混淆等原因得不到正确的源码。本发明则不需要源码,由于本发明是模拟用户的各种操作对应用程序上的组件进行触发,在运行时只需要获取当前界面上的所有组件的相关信息,再模拟用户对这些组件进行点击或输入字符串等操作,整个过程中都模拟用户的操作,不需要用到源代码,可以省去反编译的步骤,而且更加接近用户的真实交互行为。
5、组件交互更加全面。
对每一层的UI界面中的组件,本发明都会记录在界面信息中,各个组件是否已经被触发过也会记录,在工具运行时,只对未被触发过的组件进行模拟交互,而且只有在一个界面中的所有组件都被触发过后,此界面才被视为已经完全触发过。本发明可以对应用程序中的组件进行更加全面的模拟触发,暴露更多隐藏在组件中的恶意代码。
附图说明
图1为本发明***整体结构图。
图2为本发明APK自动化交互模块流程图。
具体实施方式
下面结合附图和实施例详细说明本发明的实施方式。
如图1所示,APK自动触发工具由三个部分组成,分别是APK分析预处理模块、APK自动安装与启动模块和APK自动化交互模块。
首先需要为APK自动触发工具提供运行环境,并获取APK启动的相关信息。APK分析预处理模块包括启动模拟器和分析AndroidManifest.xml两个部分,启动模拟器为APK自动触发工具提供运行环境;分析APK的AndroidManifest.xml文件可以获得待测APK的包名PackageName和启动时的MainActivity,为下一步启动APK做准备。
然后需要安装并启动APK。应用程序处理模块分为安装子模块和启动子模块。获取需要测试的APK的位置后,通过adb install<APKPath>命令可以将目标APK安装到模拟器中,然后根据预处理模块得到的包名PackageName和MainActivity的类名信息,使用adbshell am start–n<package_name>/<package_name>.<main_activity_name>命令来启动这个APK。
接着,对APK进行全面的触发。应用自动化交互模块负责遍历APK中的所有组件。从启动后的第一个UI界面开始,每得到一个UI界面,先获得此界面的所有可交互的UI组件,接着按顺序遍历所有的UI组件,如果触发了某组件的UI事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,先遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历剩余的组件。在遍历过程中,如果某个界面遍历完所有的组件,对此界面执行向下滑动操作,如果界面发生变化,则把滑动后的界面也视为一个新的UI界面,进行遍历交互,如果界面已经遍历完成且向下滑动不能改变界面内容,将此界面的信息存入UI回收站,然后查找此界面可以到达前一个界面的路径,按照这条路径回到之前的界面。如果某界面完全遍历完,且没有回到前一个界面的路径,则点击回退键BACK。如果点击BACK后没有回到前一个页面,而是回到了更靠前的页面,则在这个页面再点击相应组件直到到达前一个页面。
本发明中关键技术的详细介绍如下:
1、获取APK相关信息
主要是获取APK启动所需的PackageName和MainActivity,以及获得待测APK的所有有效的Activity的名字,为之后交互过程中判断出现的Activity是否为待测APK的Activity提供参考信息从而避免因为在无关UI界面进行交互而导致的时间消耗,提高发明的效率。这些信息都是通过分析AndroidManifest.xml文件得到。
通过aapt dump xmltree<APKPath>AndroidManifest.xml命令得到AndroidManifest.xml的内容。在得到的内容中,根据“A:package=”字符串得到包名,根据“A:android name=”以及“android.intent.action.MAIN”字符串得到主Activity的类名,根据“E:activity”以及“A:android name=”字符串得到Activity的类名。
2、安装启动APK
主要是将指定的APK安装到模拟器中,启动该APK,为下一步遍历交互做准备。安装与启动都是通过adb命令实现。具体如下:
adb install<APKPath>命令将目标APK安装到模拟器中,然后根据APK分析预处理模块得到的信息,使用adb shell am start–n<package_name>/<package_name>.<main_activity_name>命令来启动这个APK。
3、构建组件的指纹信息
获取到UI界面,其中有许多组件,为避免重复触发,需要对每个组件构建一个指纹信息来唯一标识,一个组件的指纹信息由以下内容构成:
(1)组件类型,如RadioButton,ImageView,TextView;
(2)组件的坐标信息;
(3)组件的大小;
(4)组件所在的Activity的类名。
利用以上信息按照先后顺序进行字符串拼接,最后利用Hash算法得到固定长度的指纹值。UI界面的指纹信息由上述得到的各个组件的指纹值拼接后,再使用一次Hash算法得到。
4、自动遍历识别出的所有组件
采用深度优先遍历的方法进行UI遍历,如图2所示,步骤为:
1)初始化,置UI界面存储栈和UI回收站为空,把APK的初始UI界面压入UI界面存储栈中;
2)如果UI界面存储栈为空,则结束;否则,弹出栈顶的UI,作为当前触发的UI,记为UI1,获取UI1中需要触发的组件的集合,对于集合中的每一个组件,执行以下操作:
i.根据组件类型进行点击或输入字符串等操作,之后得到新的UI,记为UI2;
ii.判断UI2与UI1是否相同,如果相同则继续触发此UI中的下一个未触发组件,回到i,否则,进入iii;
iii.如果UI2为UI回收站中已有的UI,则点击回退键回到UI1,继续触发UI1中下一个未触发的组件,回到i,否则,进入iv;
iv.如果UI2为UI界面存储栈中已有的UI,则按照使UI1呈现的组件的触发顺序,在各个UI中依次点击对应的组件,重新回到UI1,然后继续触发下一个未触发的组件,回到i,否则,进入v;
v.把UI1和UI2依次压入UI界面存储栈中,然后回到2),开始触发新的UI中的组件;
3)UI1中的组件触发完后,将UI1存入UI回收站中,回到2)。
综上,本发明按照深度优先搜索的思路实现,即遍历时,先启动APK,接着遍历所有的UI界面。每遍历一个UI界面时,需要先获得此界面的所有有效UI组件,然后遍历所获得的所有的UI组件,并根据UI组件类型的不同,触发不同的UI组件事件。如果触发某组件的UI组件事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,然后遍历新的UI界面,遍历完成之后,再回到原UI界面继续触发其他的组件。
本发明模拟用户的各种操作对APK的组件进行触发,在运行时只需要获取当前界面上的所有组件的相关信息,再模拟用户对这些组件进行点击或输入字符串等操作,整个过程中都模拟用户的操作,更符合用户使用时的情况。
本发明避免了重复触发组件。本发明采用分层的方式,将每个出现的UI界面定义为一个层,基于层来遍历所有的组件。对每层中的组件,可以进行全面交互,已经触发过的组件在***运行过程中不会再次触发,避免重复,节省大量因重复触发组件而消耗的时间。本发明可以对APK中的组件进行更加全面的触发,暴露更多隐藏在组件中的恶意行为。
本发明根据文本框需要生成相应格式的字符串。本发明可以根据文本输入框的text属性的内容,生成相应格式的字符串,满足多数文本输入框的需要。从而触发更多的界面,与更多的组件进行模拟交互。
本发明不需要APK的源代码。由于本发明是模拟用户的各种操作对APK上的组件进行触发,在运行时只需要获取当前界面上的所有组件的相关信息,再模拟用户对这些组件进行点击或输入字符串等操作,不需要用到源代码,免去反编译的步骤,也更加接近用户的真实交互行为。

Claims (10)

1.一种APK自动触发工具,其特征在于,包括:
APK分析预处理模块,负责启动模拟器,以及分析AndroidManifest.xml文件得到APK的相关信息;
APK自动安装与启动模块,负责将目标APK自动安装到模拟器上,并在模拟器中自动启动该APK;
APK自动化交互模块,按照深度优先遍历的原则,实现模拟用户对UI界面中所获得的组件进行自动触发的功能,包括根据相关需求,自动生成字符串输入到需要输入文本内容的组件中,对需要进行点击操作的组件进行自动点击操作,以及根据组件触发顺序到达不同的UI界面。
2.根据权利要求1所述APK自动触发工具,其特征在于,所述APK分析预处理模块由启动模拟器和分析AndroidManifest.xml两个部分组成,启动模拟器为工具使用提供运行环境,使工具能有效运行,模拟用户自动触发APK;分析AndroidManifest.xml文件以获得待测APK启动时的包名PackageName和启动时的MainActivity,为下一步启动APK做准备;同时,在分析AndroidManifest.xml文件时还获得待测APK的所有有效的Activity的名字,为之后交互过程中判断出现的Activity是否为待测APK的Activity提供参考信息;所述APK分析预处理模块获取的APK的相关信息至少包括APK启动时的MainActivity的类名、包名PackageName以及APK中所有的Activity的类名的集合。
3.根据权利要求1所述APK自动触发工具,其特征在于,所述APK自动安装与启动模块,分为安装子模块和启动子模块,获取需要测试的APK的位置后,通过adb install命令将目标APK安装到模拟器中,然后根据PackageName和MainActivity信息,使用adb shell amstart命令来启动这个APK;所述APK自动安装与启动模块自动安装启动指定的APK,如果APK启动时出现故障,自动重新启动。
4.根据权利要求1所述APK自动触发工具,其特征在于,所述APK自动化交互模块采用深度优先遍历方法实现,遍历一个UI界面时,先获得此界面的所有可触发的UI组件,接着按顺序遍历获得的所有的UI组件,如果触发了某组件的UI事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,先遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历剩余的组件,在遍历过程中,如果某个界面遍历完所有的组件,对此界面执行向下滑动操作,如果界面发生变化,则把滑动后的界面也视为一个新的UI界面,进行遍历交互,如果界面已经遍历完且向下滑动不能改变界面内容,将此界面的信息存入UI回收站,然后查找此界面可以到达前一个界面的路径,按照这条路径回到之前的界面,如果某界面完全遍历完,且没有回到前一个界面的路径,则点击回退键BACK,如果点击BACK后没有回到前一个页面,而是回到了更靠前的页面,则在这个页面再点击相应按钮直到到达目标页面。
5.根据权利要求1所述APK自动触发工具,其特征在于,在APK自动化交互过程中:
对需要点击的组件进行点击操作,对于需要输入字符串的组件,则按照相关需求,生成相应格式的字符串,在使用时,首先,根据一个UI界面中各个组件的class属性提取所有需要文本输入的组件,然后根据各个文本输入组件的text属性值,自动生成符合需要的字符串输入,之后再触发其他组件;
对于可以向下滑动的UI界面,在当前界面中所有组件都触发过后,进行向下滑动操作,获取更多组件,进行更加全面的触发。
6.根据权利要求1所述APK自动触发工具,其特征在于,所述APK自动化交互模块对每个UI界面,根据界面中所有组件的类型、大小、坐标信息和所在的Activity的类名,用Hash算法都生成唯一的指纹值,从而对不同的UI界面进行区分,所述UI界面指纹值的构建方法如下:
先构建组成UI界面的不同组件的指纹信息,一个组件的指纹信息由以下内容构成:
(1)组件的类型;
(2)组件的坐标信息;
(3)组件的大小;
(4)组件所在的Activity的类名;
利用以上信息按照先后顺序进行字符串拼接,最后利用Hash算法得到固定长度的指纹值,UI界面的指纹信息由上述得到的各个组件的指纹值拼接后,再使用一次Hash算法得到。
7.根据权利要求6所述APK自动触发工具,其特征在于,根据UI界面的指纹值是否相同,判断出UI界面是否相同,具体判断方法为:
步骤1、如果两个UI界面的Activity类名不同,则为不同的UI界面,否则进入下一步;
步骤2、如果两个UI界面里的组件数目不一样,则为不同的UI界面,否则进入下一步;
步骤3、如果两个UI界面的指纹信息不一致,则为不同的UI界面,否则为相同的UI界面。
8.根据权利要求1所述APK自动触发工具,其特征在于,为了保证将获得的所有UI界面都能按顺序完全遍历,构建一个UI界面的存储栈,即UI触发栈,在对一个APK进行自动触发时,整个程序中有一个UI触发栈,这个栈按顺序存储了所有出现过且没有完全遍历完其中所有组件的UI界面,当某个UI界面正在被遍历时,如果出现了一个新的UI界面,那么就将旧的UI界面的当前信息储存起来,并将这个旧的UI界面压入UI触发栈,当UI触发栈内在这个UI界面之上的各个UI界面都已经出栈且这些UI界面中的组件都被遍历完之后,将此UI界面弹出栈,遍历此UI界面中尚未遍历的组件,如果全部组件都已经遍历完,那么,直接将此UI界面标记为“已经触发完成”,不再入栈。
9.根据权利要求8所述APK自动触发工具,其特征在于,为避免重复遍历所述被标记为“已经触发完成”的UI界面,构建一个UI回收站,用于存放那些界面中组件已经完全交互完毕的UI界面,在运行过程中,如果出现了一个新的UI界面,判断这个界面是否为UI回收站中的界面,如果是则不需要遍历,直接离开此UI界面,否则按照要求对此UI界面进行遍历交互。
10.根据权利要求1所述APK自动触发工具,其特征在于,所述APK自动化交互模块对APK中的所有UI界面,按照深度优先搜索算法的思想,逐层逐项提取、识别和遍历界面中的UI组件,对识别出来的组件进行全面的触发。
CN201711220729.XA 2017-11-28 2017-11-28 一种apk自动触发工具 Active CN108090355B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711220729.XA CN108090355B (zh) 2017-11-28 2017-11-28 一种apk自动触发工具

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711220729.XA CN108090355B (zh) 2017-11-28 2017-11-28 一种apk自动触发工具

Publications (2)

Publication Number Publication Date
CN108090355A true CN108090355A (zh) 2018-05-29
CN108090355B CN108090355B (zh) 2020-10-27

Family

ID=62172352

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711220729.XA Active CN108090355B (zh) 2017-11-28 2017-11-28 一种apk自动触发工具

Country Status (1)

Country Link
CN (1) CN108090355B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112256636A (zh) * 2020-11-10 2021-01-22 国网湖南省电力有限公司 面向移动应用app的数据采集***
CN113360373A (zh) * 2021-05-26 2021-09-07 上海蛮犀科技有限公司 一种移动应用Activity页面全遍历的测试方法
CN114936051A (zh) * 2022-05-31 2022-08-23 金陵科技学院 一种基于Android***多模态生物识别终端进行增值应用的方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101989929A (zh) * 2010-11-17 2011-03-23 中兴通讯股份有限公司 容灾数据备份的方法及***
CN103544100A (zh) * 2012-07-12 2014-01-29 腾讯科技(深圳)有限公司 便携数据处理设备应用程序的测试方法、***和客户端
CN105468733A (zh) * 2015-11-23 2016-04-06 上海爱数信息技术股份有限公司 一种基于源端数据重删的卷复制方法
CN105468529A (zh) * 2015-12-15 2016-04-06 北京奇虎科技有限公司 一种安卓应用ui控件精准遍历方法和装置
CN107133519A (zh) * 2017-05-15 2017-09-05 华中科技大学 一种安卓应用网络通信中隐私泄漏检测方法及***

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101989929A (zh) * 2010-11-17 2011-03-23 中兴通讯股份有限公司 容灾数据备份的方法及***
CN103544100A (zh) * 2012-07-12 2014-01-29 腾讯科技(深圳)有限公司 便携数据处理设备应用程序的测试方法、***和客户端
CN105468733A (zh) * 2015-11-23 2016-04-06 上海爱数信息技术股份有限公司 一种基于源端数据重删的卷复制方法
CN105468529A (zh) * 2015-12-15 2016-04-06 北京奇虎科技有限公司 一种安卓应用ui控件精准遍历方法和装置
CN107133519A (zh) * 2017-05-15 2017-09-05 华中科技大学 一种安卓应用网络通信中隐私泄漏检测方法及***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
田浩等: "基于卫星数据缩减的传输优化技术研究与实现", 《软件》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112256636A (zh) * 2020-11-10 2021-01-22 国网湖南省电力有限公司 面向移动应用app的数据采集***
CN113360373A (zh) * 2021-05-26 2021-09-07 上海蛮犀科技有限公司 一种移动应用Activity页面全遍历的测试方法
CN114936051A (zh) * 2022-05-31 2022-08-23 金陵科技学院 一种基于Android***多模态生物识别终端进行增值应用的方法
CN114936051B (zh) * 2022-05-31 2023-06-09 金陵科技学院 一种基于Android***多模态生物识别终端进行增值应用的方法

Also Published As

Publication number Publication date
CN108090355B (zh) 2020-10-27

Similar Documents

Publication Publication Date Title
CN107193739B (zh) 一种黑盒回归测试方法
Memon Automatically repairing event sequence-based GUI test suites for regression testing
US7801715B2 (en) System and method for block diagram simulation context restoration
EP3745256A1 (en) External code integrations within a computing environment
Kamimura et al. Extracting candidates of microservices from monolithic application code
CN109189469B (zh) 基于反射的安卓应用微服务化方法及***
CN109189374B (zh) 基于对象引用链的对象构造代码生成方法及***
US20050240917A1 (en) Software configuration program for software applications
Navarre et al. A tool suite for integrating task and system models through scenarios
CN109240666B (zh) 基于调用栈和依赖路径的函数调用代码生成方法及***
CN108647147B (zh) 一种利用图谱分析执行自动化测试机器人及其使用方法
CN108399124A (zh) 应用测试方法、装置、计算机设备和存储介质
CN108090355A (zh) 一种apk自动触发工具
CN108415826A (zh) 应用的测试方法、终端设备及计算机可读存储介质
CN108829389A (zh) 基于Appium的安卓应用自动化触发执行方法
CN109801677A (zh) 测序数据自动化分析方法、装置和电子设备
Olszak et al. Remodularizing Java programs for improved locality of feature implementations in source code
Silva et al. Analysis of WIMP and post WIMP interactive systems based on formal specification
CN109240923B (zh) 接口测试脚本的生成方法及计算机可读存储介质
CN109491884A (zh) 代码性能检测方法、装置、计算机设备和介质
CN101976196B (zh) 一种面向“服务质量”的代码自动生成方法
CN112905451A (zh) 应用程序的自动化测试方法及装置
KR20090099977A (ko) 예약된 컴포넌트 컨테이너 기반 소프트웨어 개발 방법 및장치
Cockton et al. Literate development: weaving human context into design specifications
Canny et al. Engineering model-based software testing of WIMP interactive applications: a process based on formal models and the SQUAMATA tool

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant