本发明具体涉及一种安卓应用运行时的数据修改方法。
背景技术
随着智能化技术的飞速发展,智能手机已经成为了人们日常生产和生活中必不可少的工具,给人们的生产和生活带来了无尽的便利。
安卓系统(android)是一种基于linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑。目前,安装有安卓系统的智能设备占据市场上约85%左右的份额,运行在安卓系统上的应用程序更是不计其数。
由于现在人们越来越依赖于智能设备,因此运行在安卓系统上的应用的稳定性和可靠性就显得尤为重要。在安卓应用运行时,测试安卓应用在极端数据情况下的稳定性是测试的必备项目之一。目前针对安卓应用的极端数据测试,往往采用的是日志或者人工构造测试数据的方式。但是,当前的测试方法,不仅非常死板,而且无法快速灵活的得到安卓应用在运行时的测试情况,从而严重影响了测试的效率。
技术实现要素:
本发明的目的在于提供一种能够较好的提高安卓应用的测试效率的安卓应用运行时的数据修改方法。
本发明提供的这种安卓应用运行时的数据修改方法,包括如下步骤:
s1.获取安卓应用的进程的数据访问权限;
s2.运行安卓应用;
s3.读取应用运行时的数据;
s4.搜索指定的需要修改的数据;
s5.修改指定的数据,从而完成安卓应用运行时的数据修改。
步骤s1所述的获取安卓应用的进程的数据访问权限,具体为通过root工具或程序及系统接口获取安卓应用的root权限,然后获取数据的访问权限。
步骤s1所述的获取安卓应用的进程的数据访问权限,具体为通过沙盒启动应用,然后在启动过程中获取数据的访问权限。
步骤s1所述的获取安卓应用的进程的数据访问权限,具体为通过替换应用自带的库文件,然后在安卓应用运行并加载库文件的过程中获取数据的访问权限。
步骤s3所述的读取应用运行时的数据,具体为采用直接读取的方式读取应用运行时的数据。
步骤s3所述的读取应用运行时的数据,具体为依据内存模型,判断内存访问的权限,再读取应用运行时的数据。
步骤s3所述的读取应用运行时的数据,具体为采用如下步骤进行读取:
a.在对内存进行读取前,保存当前的堆栈环境,并标记当前地址;
b.依据内存模型,判断内存访问的权限;
c.读取应用运行时的数据;
d.若在对内存进行访问时出现错误,则根据步骤a保存的堆栈环境和地址对内存数据进行恢复。
步骤s4所述的搜索指定的需要修改的数据,具体为采用简单字符串搜索算法,对字符串进行逐个比对,从而搜索得到指定的需要修改的数据。
步骤s4所述的搜索指定的需要修改的数据,具体为采用字符串搜索算法进行搜索,从而搜索得到指定的需要修改的数据。
步骤s4所述的搜索指定的需要修改的数据,具体为采用如下步骤进行搜索:
a.在内存中获取数据;
b.将步骤a获取的数据的格式转换为长度对齐的字符串型数据并进行存储;
c.根据步骤b进行转换时的记录的数据类型对不同的数据进行比对搜索。
步骤s5所述的修改指定的数据,具体为采用将目标数据直接写入内存的方式对指定的数据进行修改。
步骤s5所述的修改指定的数据,具体为调用系统接口函数对指定的数据进行修改。
步骤s5所述的修改指定的数据,具体为通过安卓应用的内核对象对指定的数据进行修改。
步骤s5所述的修改指定的数据,具体为使用系统接口追加数据写入的权限,然后再对指定的数据进行直接修改。
本发明提供的这种安卓应用运行时的数据修改方法,通过获取安卓应用的修改权限,并在安卓应用运行实时修改安卓应用的数据,从而达到实时检测安卓应用在极端数据情况下的运行性能的目的,因此本发明方法能够较好的提高安卓应用的测试效率。
附图说明
图1为本发明方法的方法流程图。
具体实施方式
如图1所示为本发明方法的方法流程图:本发明提供的这种安卓应用运行时的数据修改方法,包括如下步骤:
s1.获取安卓应用的进程的数据访问权限;
在具体实施时,可以采用如下几个方式获取数据访问权限:
1)通过root工具或程序及系统接口获取安卓应用的root权限,然后获取数据的访问权限;
2)通过沙盒启动应用,然后在启动过程中获取数据的访问权限;
通过沙盒获取应用权限原理是基于linux系统的多用户机制实现:沙盒对一些系统服务进行代理和替换,为在其中运行的应用构造一个虚拟环境,使应用可以无感知运行在沙盒环境中;应用在运行时被分配不同的uid(用户id)和gid(组id),不同id的进程会被android系统隔离,而通过沙盒启动的应用与沙盒本身具有相同的用户id,因此对应用具有root权限;
3)通过替换应用自带的库文件,然后在安卓应用运行并加载库文件的过程中获取数据的访问权限;
s2.运行安卓应用;
s3.读取应用运行时的数据;
在具体实施时,可以采用如下几个方式读取数据:
(1)采用直接读取的方式读取应用运行时的数据;
(2)依据内存模型,判断内存访问的权限,再读取应用运行时的数据;通过对内存地址判断是否拥有读、写的权限,从而规避内存错误,大大提高了内存读取和写入过程中的可靠性;
(3)基于linux信号量的异常捕获处理机制,采用如下步骤进行读取:
a.在对内存进行读取前,保存当前的堆栈环境,并标记当前地址;
b.依据内存模型,判断内存访问的权限;
c.读取应用运行时的数据;
d.若在对内存进行访问时出现错误,则根据步骤a保存的堆栈环境和地址对内存数据进行恢复;
s4.搜索指定的需要修改的数据;
在具体实施时,可以采用如下几个方式搜索需要的数据:
ⅰ.采用简单字符串搜索算法,对字符串进行逐个比对,从而搜索得到指定的需要修改的数据;
ⅱ.采用字符串搜索算法(比如kmp算法、sunday算法等)进行搜索,从而搜索得到指定的需要修改的数据;
ⅲ.采用如下步骤进行搜索:
a.在内存中获取数据;
b.将步骤a获取的数据(一般为无符号整数类型)的格式转换为长度对齐的字符串型数据并进行存储;
c.根据步骤b进行转换时的记录的数据类型对不同的数据进行比对搜索;
s5.修改指定的数据,从而完成安卓应用运行时的数据修改;
在具体实施时,可以采用如下几个方式对数据进行修改:
ⅰ.采用将目标数据直接写入内存的方式对指定的数据进行修改
ⅱ.调用系统接口函数对指定的数据进行修改;
ⅲ.通过安卓应用的内核对象对指定的数据进行修改;
ⅳ.使用系统接口追加数据写入的权限,然后再对指定的数据进行直接修改,例如mprotect函数可修改内存区保护属性:
prot_read:表示可写;
prot_write:表示可读;
prot_exec:表示可执行;
prot_none:表示不允许读或写。
以下结合一个实施例,对本发明方法进行进一步说明:
以某手机应用,极难游戏3为例,在基于沙盒环境下,对本发明的实施过程进行说明:
在手机上正常安装极难游戏3;
在手机上安装沙盒修改器;
在沙盒环境下添加和启动游戏3;
选择游戏3,并在游戏3中进行若干次操作后,暂停游戏。
调出修改器模块,并搜索此时的积分数据(此时为2万多条搜索记录),然后返回游戏;
继续在游戏3中进行若干次操作,待积分数据发生变化后,再次调出修改器界面,搜索现在的积分数据(此时记录为30多条),然后返回游戏;
继续在游戏3中进行若干次操作,积分数据发生变化后,又调出修改器界面,搜索现在的积分数据(此时记录为3条);
依次点击搜索记录,并修改积分值为想要测试的值,比如1000分,然后返回游戏;
继续游戏,发现积分开始从1000开始增加;
完成本关,并观察游戏运行的逻辑是否和程序预计的逻辑是否匹配。
类似的方式可以测试积分为10000分或者4294967295或者2147483647时程序是否能够正常进行。这样可以发现程序在极限情况下,能否正常按照设计时的逻辑运行。
通过测试,我们可以知道以下几点:
①极难游戏3中,积分值在0到2147483647之内时,程序可以正常运行。而一旦超出这个范围,积分显示将不正常(变为负数)。
②游戏的积分数据并不安全,在外部程序修改后,可以直接影响程序的运行结果,给程序安全性和健壮性带来极大的风险隐患。
③不安全的积分数据地址,如搜索结果所示地址,开发人员可以依据此信息定位数据位置。