某apk通过混淆资源防止反编译总结

Android资源文件编译并打包apk的流程:

Android资源文件分为assets(原始数据放在apk中)和res(需要编译)

Android的res资源文件会编译成二进制格式,因为二进制格式解析速度快,占用空间小。

在编译的过程中,Res的每个资源文件会被赋予一个资源ID,存放在R.java当中,最后胜出一个Resources.arsc文件,该文件包含具有ID的资源的配置信息,作为一个索引表使用。

在编译xml的时候,从根节点遍历整个树,给每个属性都分配一个资源ID,并写入R.java,以后需要用到资源时直接通过资源ID查找。

在resourcesTable中,包含一个package对象,一个package包含多个type对象,而每个type对象包含多个configList,每个configList包含多个entry,entry包含一个key-value,其中key是属性名,value是值。由于系统在查找资源的时候是根据资源ID来查找,所以key的属性其实可以为空或0。

在某apk的混淆处理中,它把大部分entry的key设为0,这样在apktool反编译的时候,由于属性名为空,无法反编译通过,报错为读取资源表时异常。

处理方式是修改一下apktool对key为0的entry抛出异常的方式,把key=0修改为相应的名字或编号即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值