某apk通过混淆资源防止反编译总结
2014-10-29 19:48
141 查看
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修改为相应的名字或编号即可。
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修改为相应的名字或编号即可。
相关文章推荐
- Android代码混淆防止反编译APK获取源码
- android apk防止反编译混淆
- 反编译Android APK 源代码和资源文件防止反编译详解
- 防止 apk反编译 jocky-- java混淆代码
- 反编译Android APK 源代码和资源文件防止反编译详解
- android APK反编译及混淆学习总结
- Android APK安全: 代码混淆且加壳防止反编译
- 防止 apk反编译 jocky-- java混淆代码
- android学习笔记-Android如何防止apk程序被反编译代码混淆
- Unity3D 导出的apk进行混淆和加固(防止反编译)
- Unity3D 导出的apk进行混淆和加固(防止反编译)
- 防止 apk反编译 jocky-- java混淆代码 (转至:http://my.oschina.net/f839903061/blog/72554)
- Android APK反编译得到Java源代码和资源文件
- apk的打包和反编译一、代码混淆ProGuard
- android学习—— 通过包名访问其他apk下的资源
- 反编译APK获取java代码与图片,字符串资源,xml文件等资源
- 反编译apk、混淆、Proguard机制
- 如何混淆Android项目代码(ProGuard),防止反编译
- 如何混淆Android项目代码(ProGuard),防止反编译
- 利用apktool将APK反编译,生成程序的图片、XML配置、语言资源等文件