一、前言
获取 data/data 目录下的文件最简单的方法当然是直接 root,但是有的时候自己的手机可能没有办法 root 或者懒得 root(备份资料太麻烦了)所以就需要用一些比较绕的方法来实现了。这个方法的适用性也不是很广泛,现在很多的软件都会二次校验 apk 的签名,这种方法也就失效了。还有的软件做了很多的加密,你连 AndroidManifest.xml 都看不见所以就更不可能了。
一句话说明方法:解包→添加 debuggable 属性→重新打包→签名→安装→使用 ADB 或者使用 Android Studio 的 Device File Explore 取得所需文件。
二、所需工具
- Apktool(安装与使用请参考官网或者本博客的另外一篇文章)
官网下载地址:https://ibotpeaches.github.io/Apktool/
博主备份地址(2.4.0 版本):http://waternote.ctfile.net/fs/2276132-372991817 - Auto-sign
TT 中文网修改版:http://www.tttabc.com/android/android.html
博主备份地址:http://waternote.ctfile.net/fs/2276132-372991808 - ADB Shell 或者 Android Studio3.0+
ADB Shell 请自行百度或谷歌
Android Studio 下载:https://developer.android.google.cn/studio
博主备份地址(3.2 版本):http://waternote.ctfile.net/fs/2276132-372994612
三、原理
正常情况下没有 root 权限是没有办法查看 data/data 内的内容的,更不用说你是使用cd
命令(错误的方法)还是run-as
命令了(正确的方法)。所以我们需要将 apk 拆包然后找到AndroidManifest.xml
文件,在里面添加android:debuggable="true"
这条属性使程序变为开发 debug 模式,之后我们在使用run-as
命令即可。
- 使用错误的
cd
命令:除非你拥有 root 权限否则即使你写入了 debuggable 也是没有办法进入的
- 使用正确的
run-as
命令:这里我使用的是 Android Studio 的 Device File Explorer 工具(Android Studio 3.0 以上自带)等同于在 ADB Shell 使用run-as
命令。但是由于该 APP 没有打开 debug 模式,所以我们还是不能够查看到里面的文件。
四、使用示例
我们这里以某个国外的日麻小游戏(不是雀魂=。=)作为实际操作的例子。
- 我们使用 apktool 来对软件进行拆包,运行 CMD→进入 apk 所在目录,之后对其进行解包。
apktool d .\雀娘!てんぱい_1.0.1.apk"
进入目录输入命令:
解包完毕:
在解包之后的文件会在与该 apk 同级的目录下:
- 我们打开该文件夹,找到并打开
AndroidManifest.xml
文件,找到 application 字段,并在其后面添加android:debuggable="true"
属性(它里面属性太多了为了方便截图我删了一些,正常在后面添加就好了)。
- 然后我们需要使用 apktool 将其重新打包成 apk,还是在刚才的路径下。
apktool b .\雀娘!てんぱい_1.0.1
进入目录输入命令:
打包完毕:
打包完毕后的 apk 文件会被保存在你打包的那个文件夹的dist
目录下
注意路径:
- 虽然打包完了但是现在这个 apk 是没有签名的,没有签名是不能够安装的,所以我们还需要使用 Auto-sign 来对其进行签名。
将已经打包好的 apk 放到 Auto-sign 的文件夹里面,直接运行auto-sign-tt-v1.1.bat
即可,签名完毕的 apk 会在Signed
文件夹中。
运行签名的程序:
获得一个已经签名过了的 apk:
- 安装,这个不用说了,然后我们可以使用 ADB Shell 或者 Android Studio 里面的 Device File Explorer 对文件进行操作了。
使用 Device File Explorer 已经可以成功的查看到里面的文件了(上面的是没有添加 debuggable 属性的另外一个 apk):
这里强烈推荐 Android Studio 自带的 Device File Explorer 工具,非常的好用。
如果你要使用 ADB Shell 来操作的话需要注意以下几点:首先对于你想要修改的目录你需要先对其赋予额外的权限chmod 777 XXX/
之后才可以去修改里面的文件,并且请不要尝试把修改后的文件先复制到 sdcard 然后再去复制或者移动到里面去,你会发现你还是没有权限=。=所以请直接使用adb pull
和adb push
命令来对文件进行修改操作。当你操作完之后请记得把权限修改回去否则 APP 有可能会出错。
当然最简单的方法绝对是 root。。。。这方法麻烦死了
参考资料:
本文章笔记版本地址:http://ccdd6ec5.wiz03.com/share/s/3cTmX51TMQ-b2QTact03UPg80Yl5A73U7ALk2WfJML1iy4wy