b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

微信android混淆打包降低安装包大小

电脑杂谈  发布时间:2019-08-24 21:10:06  来源:网络整理

微信java通用版jar_微信jar安装包_maven手动安装jar包

微信中的资源混淆工具主要为了混淆资源ID长度(例如将res/drawable/welcome.png混淆为r/s/a.png),同时借助7z深度压缩,大大减少了安装包体积,同时也提高了档次,提升了反破解难度。本文主要是对此做一个简单剖析。

写在前言

资源混淆工具大约是在2014年4月实现,并在微信5.4中使用,减少了大约1M的空间。然后在8月在公司外部开源,现以推广到QQ邮箱、QQ空间、手机管家等多个产品中使用。

具体源码与使用方式简要在github中:

方案发展

资源混淆简单来说希望推动将res/drawable/icon,png变成res/drawable/a.png,或我们甚至可以将文件模式也同时混淆,改成r/s/a.png。

Proguard  -> Resource Proguard
R.string.name     -> R.string.a   
res/drawable/icon -> res/drawable/a
                         r/s/a

微信jar安装包_微信java通用版jar_maven手动安装jar包

我们可以想到下面几种方案:

最简单的方式,我们依据Proguard的做法,直接在例程级别设置,将代码以及xml的R.string.name中替换到R.string.a,icon.png重命名为a.png 然后再交给Android编译。根据Android的编译流程,所有资源ID已经被编译成32位int值。这说明我们并不需要去修改xml与java,因为在编译过程已经被R.java所替换,我们直接更改resources.arsc的二进制数据,不改变打包流程,只要在生成resources.arsc之后设置它,同时重命名资源文件。但是方案二看起来不错,但是它依旧依赖了编译流程,不利于使用。其实我们可以做到直接处理安装包. 不依赖源码,不依赖编译过程,仅仅输入一个安装包,得到一个混淆包。

几种方案的对比如下:

1

毫无疑问,微信采用的是细则三。现在关键问题是我们能否直接设置resources.arsc文件来达到资源混淆的效果

技术实现

在提问上面的难题之前,我们首先应该对resources.arsc的文件格式有一定的了解。resources.arsc一共有五种chunk类型,分别为TYPETABLE,TYPEPACKAGE,TYPE_STRING ,TYPETYPE,TYPECONFIG。

微信jar安装包_微信java通用版jar_maven手动安装jar包

2

—table,是整个reousces table的开始,它的chunksize即是整个文件的大小。

—package,指的是一个package的开始,其实在resources,arsc是可以有多个package的。而packageID即是资源resID的最高八位,一般来说系统android的是1(0x01),普通的比如com.tencent.mm会是127(0x7f),剩下的是从2开始起步。当然这个我们在aapt也是可以选定的(1-127即八位的合法空间,一些混合编译就是改这个packageID)。

—string, 代表stringblock,我们一共有三种类别的stringblock。分别是table stringblock,typename stringblock, specsname stringblock。

—type,这里讲的是typename stringblock里面我们用到的各种type(用到多少种种类的type,就有多少个type chunk),例如attr, drawable, layout, id, color, anim等,Type ID是紧跟着Package ID。

—config, 即是Android用来表述资源维度,例如横竖屏,屏幕强度,语言等。对于每一种type,它定义了多少种config,它里面就紧跟着多少个config chunk,例如我们定义了drawable-mdpi,drawable-hdpi,那上面就会有两个config。

—entry,尽管没有entry这个chunk,但是每个config里面就会有太多的entry,例如drawable-mdpi中有icon1.png,icon2.png两个drawable,那在mdpi这个config中就存在两个entry。

maven手动安装jar包_微信jar安装包_微信java通用版jar

3

简单来说方案为:

QQ截图20151015111710

与7z极限压缩结合

根据上文安装包知识的文章,7z有着更好的压缩率,同时我们也可以强制压缩类似resources.arsc、png、jpg等Android默认不会打包压缩的文件。

最后把修改后的resources.arsc重打包即可,微信从解压,到混淆,到重打包节省时间,不要799,也不要699微信jar安装包,仅需35秒。具体效果如下图:

4

最后,整体的处理步骤如下:

5

一些应该切记的弊端compress参数对混淆效果的制约

若指定compess 参数.png、.gif以及*.jpg,resources.arsc会大大减少安装包体积。若要支持2.2,resources.arsc需确保压缩前小于1M。操作系统对7z的制约

实验证明,linux与mac的7z效果更好keepmapping方式对增量包大小的制约

影响并不大微信jar安装包,但使用keepmapping方式有利于保持所有版本混淆的一致性渠道包的弊端(建议借助设置zip摘要的方法制造渠道包)

在出渠道包的之后,解压重压缩会破坏7zip的效果,通过repackage命令可用7zip重压缩。若想借助getIdentifier方式取得资源,需要放置白名单中。

部分电脑桌面快捷按钮的推动有问题,务必将程序桌面icon加入白名单

TODO,除了资源混淆,其实我们还可以推动资源加密等其他用途。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-120454-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...