三、全局字符串池 数据格式
字符串池混淆注意事项 : 修改 " 全局字符串池 " , " 资源名称字符串池 " 其最终的字符串数据块字节数 必须是 4 44 的整数倍 , 如果最后不足 4 44 字节 , 需要补 0 00 ;
蓝色部分是 全局字符串池 头文件部分 :
1 . RES_STRING_POOL_TYPE : 字符串池类型 , 2 22 字节 ;
2 . 头大小 : 2 22 字节 ;
3 . 块大小 : 4 44 字节 , 如下数据块大小 ;
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、包头 数据格式
包数据中的包头数据格式 :
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、资源类型字符串池 数据格式
资源类型字符串池 与 " 全局字符串池 " 格式相同 , 参考上面的 " 三、全局字符串池 数据格式 " 章节 ;
3、资源名称字符串池 数据格式
资源名称字符串池 与 " 全局字符串池 " 格式相同 , 参考上面的 " 三、全局字符串池 数据格式 " 章节 ;
五、参考资料
参考官方文档 :
缩减、混淆处理和优化应用 : 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
下载地址 :