博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用备份技术获取apk本地存储数据
阅读量:6592 次
发布时间:2019-06-24

本文共 2303 字,大约阅读时间需要 7 分钟。

  即使设备没有root,我们也可以通过物理访问设备来获取应用程序的数据,我们还可以通过此方法改变一个应用程序的数据。如果一个应用程序将数据存储在客户端, 使用简单的密码或pin检查,攻击者有可能使用这种方法来绕过这些检查。在本文中,我们将讨论如何在一台没有root的设备上利用这种方法来改变应用程序特定的数据。主要操作步骤如下所示:

  Step 1: 备份目标应用

  Step 2: 去掉头部信息然后保存文件

  Step 3: 做必要的修改

  Step 4: 从原始的”.ab”文件获得头部信息

  Step 5: 把修改过的内容附加在头信息后面

  Step 6: 使用修改过的内容来恢复备份

 

  下面以一个实际apk为例来介绍整个操作过程。

  我们首先需要安装Star命令行工具,下载链接如下:

下载后切换到Star命令行工具的目录,如下所示:

 

然后运行以下命令安装好Star工具。

dpkg -i star_1.5final-2ubuntu2_i386.deb

  在这篇文章中,我们在一个没有root的设备上来尝试修改一个实例程序的内容。我们先给目标应用做一个备份,使用以下命令:

adb backup -f mybackup.ab com.***book.activity

 

  

从以上图片可以看到程序提示我们去确认备份。因此我们需要在设备上点击确认(但是本实例中用到的程序并不需要确认)。

当我们确认之后,它会创建一个”.ab”后缀的安卓备份文件。通常情况下,前24字节是头。因此我们使用dd工具来去除前24字节然后压缩为tar文件,使用以下命令:

dd if=mybackup.ab bs=24 skip=1| openssl zlib -d > mybackup.tar

以上命令从输入读取源文件并跳过了头部的24字节

 

注意,在执行以上命令的时候可能会出现以下错误:

openssl:Error: 'zlib' is an invalid command,

解决方法是安装openssl以及补丁。参考链接:

下载地址:

补丁地址:

编译及安装:

patch -Np1 -i ../openssl-1.0.1k-fix_parallel_build-1.patch &&./config --prefix=/usr         \         --openssldir=/etc/ssl \         --libdir=lib          \         shared                \         zlib-dynamic &&make

测试编译结果:

make test

以root用户安装:

make MANDIR=/usr/share/man MANSUFFIX=ssl install &&install -dv -m755 /usr/share/doc/openssl-1.0.1k  &&cp -vfr doc/*     /usr/share/doc/openssl-1.0.1k

备份完毕后使用tar创建一个”.list”文件,这是为了保证在重新打包备份时保持顺序正确。

tar -tf mybackup.tar >mybackup.list

现在我们得到了以下文件:

  mybackup.ab:从设备导出的备份文件

  mybackup.tar:从dd命令生成的文件

  mybackup.list:从tar文件产生的list文件

我们新建一个文件夹backup,把这几个文件连同abe.jar放到新建文件夹中。

 

我们可以使用以下命令解压tar文件:

tar -xf mybackup.tar

从上图可以看到,生成了一个新文件夹“apps”。我们可以在这个目录中找到应用相关的信息。

 

查看location_preferences.xml文件,其内容如下:

 

我们使用vim把其中的“北京”修改为“American”。

 

接下来我们需要把修改后的文件恢复到设备上。

为了恢复修改后的文件,需要把文件转换成(.ab)格式,并把”.ab”文件头附加回去。具体方法是:

首先,使用star命令创建”.tar”文件,然后把文件头附加回去。

star -c -v -f newbackup.tar -no-dirslash list=mybackup.list

现在我们获得了“newbackup.tar”文件。然后我们把原始的文件头附加在修改后的tar文件前面。

dd if=mybackup.ab bs=24 count=1 of=newbackup.ab

你可以从上图中看到,我们只拷贝了一块文件。文件为”newbackup.ab”

最后一步是把修改后的内容附加在头后面,使用以下命令:

openssl zlib -in newbackup.tar >> newbackup.ab

至此,我们的备份文件准备完成。然后我们使用以下命令把备份文件恢复到设备上:

adb restore newbackup.ab

得到如下信息:

 

在手机root的情况下我们可以直接到应用的路径中去查看shared preferences文件。

在不root的情况下,你可以通过再次备份数据到本地计算机进行查看。

从下图可以看到文件已经被修改:

 

我们应该如何保护我们的应用呢?

如果你的应用中存在敏感信息,你可以停用备份功能。可以修改AndroidManifest.xml文件为:

android:allowBackup=”false”

 

参考文章:

转载地址:http://todio.baihongyu.com/

你可能感兴趣的文章
[LeetCode] 862. Shortest Subarray with Sum at Least K
查看>>
Ajax技术细节
查看>>
nuxt.js部署vue应用到服务端过程
查看>>
删除数组中的指定元素 | JavaScript
查看>>
CSS3+JS实现静态圆形进度条【清晰、易懂】
查看>>
关于树形插件展示中数据结构转换的算法
查看>>
图片加载框架之Fresco
查看>>
高性能web建站规则(将js放在页面底部)
查看>>
Java EnumMap工作原理及实现
查看>>
阐述Spring框架中Bean的生命周期?
查看>>
注水、占坑、瞎掰:起底机器学习学术圈的那些“伪科学”
查看>>
大数据小视角1:从行存储到RCFile
查看>>
第18天:京东网页头部制作
查看>>
好消息:Dubbo & Spring Boot要来了
查看>>
面向对象封装的web服务器
查看>>
南开大学提出新物体分割评价指标,相比经典指标错误率降低 69.23%
查看>>
初创公司MindMaze研发情绪反应VR,让VR关怀你的喜怒哀乐
查看>>
绕开“陷阱“,阿里专家带你深入理解C++对象模型的特殊之处
查看>>
ElasticSearch
查看>>
9-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,C#TCP客户端发信息给单片机控制小灯的亮灭)...
查看>>