返回
AndResGaurd 提高 apk 签署保护的速度
Android
2023-09-12 06:14:04
好久不见,各位看官老爷们!
由于近期忙于开发,导致好久没有时间写博客,还望各位见谅哈~
在不久前,我们使用了腾讯的 AndResGaurd 工具,对其深度混淆后的 Apk 文件大小进行了研究。
AndResGaurd 工具的原理很简单:它能对 Apk 文件中的资源(比如文件名、arsc 文件和 R 文件)进行混淆,以此达到缩小 Apk 体积的目的。
但万万没想到,在实际使用时出现了意想不到的状况…
随着 AndResGaurd 的混淆级别提升,Apk 的签名时间也出现了大幅提升。
这可不行!
于是,我开始研究 AndResGaurd 的原理,并尝试寻找优化其签署时间的方法。
最终,功夫不负有心人,我找到了问题所在,并找到了优化方案。
要优化 AndResGaurd 的签名时间,我们需要从其工作原理入手。
AndResGaurd 的工作流程如下:
1. 读取 Apk 文件
2. 对 Apk 文件中的资源进行混淆
3. 将混淆后的资源写入一个临时 Apk 文件
4. 使用签名工具(如 Apksigner)对临时 Apk 文件进行签名
5. 将签名的临时 Apk 文件重写回原始的 Apk 文件
签名时间的瓶颈就出在第 4 点。
由于 Apksigner 工具在签名 Apk 文件时需要逐个读取 Apk 中的资源,并对其进行签名,所以随着 Apk 体积的增大,签名时间也会随之增大。
而 AndResGaurd 混淆后的 Apk 体积会显著增大,所以签名时间也会随之增大。
针对这个问题,我们可以从 3 个方案中进行优化:
1. 升级到最新的 AndResGaurd 版本
最新的 AndResGaurd 版本已经针对签名时间的性能进行了优化。
2. 减少 AndResGaurd 的混淆级别
混淆级别越高,AndResGaurd 混淆后的 Apk 体积就越大,签名时间也就更长。
所以,我们可以尝试降低混淆级别,以缩小 Apk 体积。
3. 并发签名
使用多线程并发签名的工具,比如 Google 官方提供的 "apksigner-multidex" 工具,可以显著缩短签名时间。
在实际使用中,这 3 种优化方案都能有效缩短 AndResGaurd 的签名时间。
考虑到升级 AndResGaurd 版本和降低混淆级别可能会对原有的混淆逻辑产生较大变更,所以我更倾向于使用并发的签名工具。
经过实际的签名时间验证,使用 apksigner-multidex 工具后,一个混淆级别为 5 的 Apk,签名时间从 150 秒缩短到了 10 秒,提升了 93%!
总结起来,优化 AndResGaurd 的签名时间需要从其工作原理入手,从 Apk 体积和签名效率两手抓,进行针对性的优化。
希望能帮到大家!
好啦,以上就是本期博客的所有内容了。
我是 Lemon,一名专注于 Android 开发和安全的博主。
如果你有 Android 开发或逆向相关的疑问,欢迎在评论区与我交流哦~
也欢迎各位关注我的博客和公众号,第一时间获取最新资讯和开发技巧。
博客:https://blog.lemon-os.com/
公众号:Lemon 柠檬の秘密