1.前期准备不充分的地方
--没有确认加固操作到底是做了哪些事
优化class.dex,将根目录下的多个class.dex文件加密后放到特定目录下,根目录只保留一个加密相关的class.dex。apk安装的时候再解密并恢复原来的多个class.dex文件。
脚本中完全删除了META-INF文件夹,但实际可根据需要,只删除签名相关的.SF文件
--没有完全了解多渠道打包的原理
content of zip,center of directory,EOCD,这三个目录是zip文件的格式,并不是apk特有的格式。第一次发现加固后取不到渠道号,以为是加固方案的删除操作修改了EOCD,导致多渠道注入失效。但其实加固后,对文件夹重新zip了,最后发现其实是因为签名方案的问题导致多渠道注入失败。(用了29.0.1目录下的apksigner,导致apkverify验证不通过)
2.学到的内容
--签名相关
jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore [*.keystore] -storepass [... ] -signedjar [签名后.apk] [签名前.apk] [keystore别名]
jarsigner -verify 签名后.apk //验证签名
sdk目录\build-tools\28.0.3\apksigner sign --out [签名后文件.apk(不指定则替换原apk)] --ks [*.keystore] --ks-key-alias [别名] --key-pass [签名的keyPassword] --ks-pass [keystore的password]
sdk目录\build-tools\28.0.3\apksigner verify -v [签名后apk] | more
apksigner 不同sdk版本下实现不同,android7.0之前 是v1签名,29之前是v1+v2,29及之后是v1+v2+v3

本文记录了apk加固过程中的关键操作,包括优化class.dex文件加密和处理META-INF文件夹。同时,深入探讨了多渠道打包的原理,强调了V2签名对于渠道信息注入的重要性。在学习过程中,遇到的签名验证问题以及如何通过日志定位和解决问题也进行了分享。
最低0.47元/天 解锁文章
4100

被折叠的 条评论
为什么被折叠?



