吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6057|回复: 10
收起左侧

[Android 分享] app不能备份数据,更改allowBackup为true,并重新打包apk

  [复制链接]
mlyde 发表于 2022-2-25 22:23

将apk中AndroidManifest.xml中的allowBackup属性改为true,重新打包并签名,便于adb备份数据

有个手机单机游戏的安装包,想通关后保存游戏的本体和数据,就可以卸掉,来节省手机空间,若再想玩就不用从头开始,但手机没有备份应用数据的功能,于是尝试用adb备份。  

文中用到的工具 android-studio 的 SDK 中大多都有,其他使用到的工具也有下载链接。

备份测试

先将手机连接电脑后,打开USB调试。 (下载adb工具 for windows
查看adb连接的设备
adb devices
查看所有包名
adb shell pm list package
找到包名后备份应用数据
adb backup -f appbackup.ab -noapk 包名
备份下来的appbackup.ab为1KB的文件,显然没有成功。
尝试备份其他应用数据可以正常备份,说明是app的问题。

查看并修改 AndroidManifest

apk 下 AndroidManifest.xml 中有个属性 allowBackup 是否允许 adb 备份。
AndroidManifest.xml 为二进制文件,不能直接查看修改内容。
用aapt工具可以查看。 (下载aapt工具
aapt dump xmltree AndroidManifest.xml > AndroidManifest.txt
但不知什么原因,我使用这条命令一直报错,便干脆寻找使用其他工具解决。
可以使用 AndroidManifest.xml 解码小工具md。 (去原网页下载:androidmanifest.xml 解码工具又来一发 md_v1.1.zip)
使用方法在命令行中输入 (会在命令行中输出解码后的 xml):
md.exe AndroidManifest.xml  

可以看到allowBackup="false"

allowBackup="false"

allowBackup="false"

使用 AXMLEditor.jar 直接对二进制的 AndroidManifest.xml 进行修改,作者网页中有使用方法。  

直接使用
java -jar AXMLEditor.jar -attr -r application allowBackup AndroidManifest.xml AndroidManifest_out.xml
删除属性失败,经过各种尝试后发现,只能修改最后一个属性。
删除 resizeableActivity
java -jar AXMLEditor.jar -attr -r application package resizeableActivity AndroidManifest.xml AndroidManifest_out.xml
修改 allowBackup
java -jar AXMLEditor.jar -attr -m application package allowBackup true AndroidManifest.xml AndroidManifest_out.xml
再把 resizeableActivity 插入就行了
java -jar AXMLEditor.jar -attr -i application package resizeableActivity true AndroidManifest.xml  

allowBackup="true" 成功修改。
allowBackup_true.png

二次签名,并对齐优化

将 AndroidManifest.xml 直接替换是不能安装的,需要对修改后的 apk 文件进行二次签名。  

首先使用 apktool 工具生成签名文件 my.keystore 。
下载apktool工具
keytool -genkey -alias alias.keystore -keyalg RSA -validity 30000 -keystore my.keystore  

-alias alias.keystore 为签名文件的别名,后面会用到
-keyalg RSA 使用RSA算法对签名加密
-validity 30000 有效期限30000天
-keystore my.keystore 文件名  

然后根据提示填写密码等即可。
查看签名文件:
keytool -list -v -keystore my.keystore -storepass password  

删除apk中的 META-INF 目录,然后使用 apksigner.jar 工具,my.keystore 对 apk 签名
jarsigner -keystore my.keystore -storepass password -signedjar demo_signed.apk demo.apk alias.keystore  

alias.keystore 为签名文件的别名,不是签名文件的名称,否则会出现找不到证书链的错误。  

最后,用 zipalign 做对齐优化,不这么做也能用,影响不大。
zipalign -v 4 源文件名 生成的文件名  

再次测试备份

更改后的app不能与原app同时安装,将原app使用 adb shell pm uninstall -k 包名 保留数据卸载后,也会安装失败,将原app完全卸载后才可安装。
备份数据
adb backup -f appbackup.ab -noapk 包名
恢复数据
adb restore appbackup.ab  

参考资料

androidmanifest.xml 解码工具又来一发
AndroidManifest ARSC 二进制文件原始修改器
Android中对apk文件进行二次签名

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
hrdom + 2 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
cmbslgn 发表于 2022-2-25 23:08
提示: 作者被禁止或删除 内容自动屏蔽
慕容复123 发表于 2022-2-25 23:23
icq168 发表于 2022-2-26 08:31
梦想成真2020 发表于 2022-2-26 10:22
这个好。。。。。。
小木曾雪菜 发表于 2022-2-26 10:58
安卓13,adb backup都deprecated了,该怎么看?
 楼主| mlyde 发表于 2022-2-26 18:53
小木曾雪菜 发表于 2022-2-26 10:58
安卓13,adb backup都deprecated了,该怎么看?

不知道哎,我现在还用的安卓9.。..
侃遍天下无二人 发表于 2022-2-27 17:16
小木曾雪菜 发表于 2022-2-26 10:58
安卓13,adb backup都deprecated了,该怎么看?

啥,现在安卓13都出来了吗
kamong2022 发表于 2022-3-22 10:19
楼主,这样一番操作下来,原App的数据还有吗?是一定要完全卸载原App才能安装上hack过的?谢谢!
死磕安卓逆向 发表于 2022-6-22 21:55
kamong2022 发表于 2022-3-22 10:19
楼主,这样一番操作下来,原App的数据还有吗?是一定要完全卸载原App才能安装上hack过的?谢谢!

蛮久之前测试过,如果本地有数据,是无法正常安装修改后的应用,-k 保留数据,影响了安装,还是要完全卸载的。无法保存历史的数据。我的测试是这样。不知道楼主具体测试结果是啥,我看楼主也提到需要完全卸载才能安装
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表