【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(二)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(二)

三、全局字符串池 数据格式


字符串池混淆注意事项 : 修改 " 全局字符串池 " , " 资源名称字符串池 " 其最终的字符串数据块字节数 必须是 4 44 的整数倍 , 如果最后不足 4 44 字节 , 需要补 0 00 ;



蓝色部分是 全局字符串池 头文件部分 :

image.png




1 . RES_STRING_POOL_TYPE : 字符串池类型 , 2 22 字节 ;



2 . 头大小 : 2 22 字节 ;



3 . 块大小 : 4 44 字节 , 如下数据块大小 ;

image.png




4 . 字符串数 : 4 44 字节 , 字符串个数 ; 包括所有的 图片, 布局 等类型的资源对应的文件路径 , 定义的 strings 字符串资源 , value 值 资源 等 ;



5 . style 数 : 4 44 字节 , 字符串的样式 , 全局字符串池中的字符串样式一般为空 ;



6 . 标记 : 4 44 字节 , 用于标记字符串存储在 resources.arsc 资源映射表 文件中的编码方式 , UTF-8 或 UTF-16 两种编码方式 ;



7 . 字符串起始位置 : 4 44 字节 , 标记 全局字符串池 中的字符串开始位置 , 0 00 索引位置是 RES_STRING_POOL_TYPE 第一个字节位置 ;



8 . style 起始位置 : 4 44 字节 , 标记 全局字符串池 中的字符串风格数据的开始位置 , 0 00 索引位置是 RES_STRING_POOL_TYPE 第一个字节位置 ;



9 . 字符串偏移数组 : int 类型数组 , 每个 index 索引的 int 数组的元素值是 对应 index 索引的 字符串 对应的 首元素位置下标 ;






四、包数据 数据格式




1、包头 数据格式


包数据中的包头数据格式 :


image.png


1 . RES_TABLE_PACKAGE_TYPE : 资源包类型格式 , 2 22 字节 ;



2 . 头大小 : 2 22 字节 ;



3 . 块大小 : 4 44 字节 ;



4 . 包 ID : 4 44 字节 , 包名对应的 ID 常量标识 ;



5 . 包名 : 256 256256 字节 , 解析出来就是对应的再清单文件中配置的包名 , “kim.hsl.svg” ;



6 . 资源类型字符串池偏移 : 4 44 字节 , 从 RES_TABLE_PACKAGE_TYPE 的首字节作为 0 00 位置开始计数 , 到 " 资源类型字符串池 " 的首字节的字节索引值 , 如 : 整个包头占 2000 字节 , 那么包头索引值是 0 00 ~ 1999 19991999 , " 资源类型字符串池 " 的首字节偏移就是 2000 20002000 ;



7 . lastPublicType : 4 44 字节 , 默认为 0 00 , 无意义 ;



8 . 资源关键字字符串池偏移 : 4 44 字节 , 就是 " 资源名称字符串池 " 的偏移 , 从 RES_TABLE_PACKAGE_TYPE 的首字节作为 0 00 位置开始计数 , 中间隔着 包头数据 和 资源类型字符串池 两个数据块 ;



9 . lastPublicType : 4 44 字节 , 默认为 0 00 , 无意义 ;



10 . typeIdOffset : 4 44 字节 ;




2、资源类型字符串池 数据格式


资源类型字符串池 与 " 全局字符串池 " 格式相同 , 参考上面的 " 三、全局字符串池 数据格式 " 章节 ;


image.png




3、资源名称字符串池 数据格式


资源名称字符串池 与 " 全局字符串池 " 格式相同 , 参考上面的 " 三、全局字符串池 数据格式 " 章节 ;



image.png





五、参考资料


参考官方文档 :


缩减、混淆处理和优化应用 : https://developer.android.google.cn/studio/build/shrink-code

APK 构建流程 : https://developer.android.google.cn/studio/build

AAPT2 工具官方文档 : https://developer.android.google.cn/studio/command-line/aapt2?hl=zh_cn

ArscBlamer 开源项目 : https://github.com/google/android-arscblamer

;

Android 源码中资源类型相关内容 : frameworks/base/include/androidfw/ResourceTypes.h

参考之前的博客资源 :


【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )

【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )

【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 )

【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )


博客资源 :


GitHub 项目源码 : https://github.com/han1202012/SVG


下载地址 :


目录
相关文章
|
3月前
|
监控 Java 开发工具
### 绝招揭秘!Android平台GB28181设备接入端如何实现资源占用和性能消耗的极限瘦身?
【8月更文挑战第14天】本文介绍在Android平台优化GB28181标准下设备接入的性能方法,涵盖环境搭建、SDK集成与初始化。重点讲解内存管理技巧如软引用、按需加载资源,以及通过硬件加速解码视频数据和图像缩放来减轻CPU与GPU负担。同时采用线程池异步处理视频流,确保UI流畅性。这些策略有助于提高应用效率和用户体验。
46 0
|
5月前
|
XML Java API
54. 【Android教程】图片资源:Drawable
54. 【Android教程】图片资源:Drawable
80 0
|
6月前
|
Android开发
Android源代码定制:Overlay目录定制|调试Overlay资源是否生效
Android源代码定制:Overlay目录定制|调试Overlay资源是否生效
225 0
|
Java Android开发
Android 保存资源图片到相册最新写法适用于Android10.0及以上
Android 保存资源图片到相册最新写法适用于Android10.0及以上
824 0
|
编解码 监控 前端开发
Android平台GB28181设备接入端如何降低资源占用和性能消耗
Android平台GB28181设备接入端如何降低资源占用和性能消耗?
|
6月前
|
XML JSON Java
Android Studio App开发之网络通信中移动数据格式JSON的讲解以及实战(附源码 超详细必看)
Android Studio App开发之网络通信中移动数据格式JSON的讲解以及实战(附源码 超详细必看)
184 0
|
Android开发
Hbuilder打包android安装包流程
Hbuilder打包android安装包流程
|
Java Android开发
Android 中使用数组资源文件定义数组
Android 中使用数组资源文件定义数组
158 0
|
Android开发 Java
如何在Android Studio中导入包:android-support-v4/Fragment
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/48710143 ...
3335 0
|
3天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。