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

本文详细介绍了Android资源文件编译并打包成apk的过程。资源文件分为assets和res两种类型,res资源文件会在编译过程中被转换成二进制格式,以提高解析速度并减小占用空间。编译过程中,每个资源都会被赋予一个资源ID,并存储在R.java文件中。此外,还介绍了资源表的结构及如何处理某些特殊情况下的反编译问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、付费专栏及课程。

余额充值