换了一个apk实验后
apktool b -f -p. xxx
也不行,仍然报资源错误
看了一下可能是鹅厂出的AndResGuard
工具,会将资源文件夹/Res/xxx
重命名为/r/x
类的目录,导致资源解析出错
针对这个混淆有shakaApktool
来对抗,但由于太久没有更新所以已经失修了
于是无奈回归apktool -r
不解析资源文件、原样打包的思路
对于AndroidManifest.xml
的二进制格式虽然有点麻烦,但完全可以进行单独解码和编码,也可以直接编辑
在github上就有不少这样的项目,例如C++的AmBinaryEditor,Java的AXMLEditor
我使用了AmBinaryEditor来编辑,但里面有不少BUG,包括目前使用到的parse和add-tag都需要修233
搞好了以后装上发现连图标都没有,点击一直没反应,对着log看了半天也没发现原因。最后灵光一现跟原包对比发现r
文件夹没被压进去,其实是解包的时候就根本没被拿出来(╯‵□′)╯︵┻━┻
把它压进去以后再次签名运行就正常了
写了一段python自动完成这件事
from zipfile import ZipFile
zApk = ZipFile(apk)
zApkNew = ZipFile(anotherApk, 'a')
lname = zApk.namelist()
for name in lname:
if(name.find("r/")==0):
zApkNew.writestr(name, zApk.open(name).read())
zApk.close()
zApkNew.close()