前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

作者头像
韩曙亮
发布2023-03-29 12:22:35
1.7K0
发布2023-03-29 12:22:35
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

资源混淆时 , 需要修改混淆 resources.arsc 资源映射表 的 全局字符串池 和 包数据下的 资源名称字符串池 ;

一、resources.arsc 资源映射表 混淆


在上一篇博客 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 ) 中分析了 Android 应用根据 ID 查找资源的机制 , 是从 resources.arsc 资源映射表 中查找相应资源的路径 ;

资源混淆 的本质就是将 resources.arsc 资源映射表 中的 资源路径 进行混淆 , 并且相应的将对应的 资源移动到对应的混淆后的路径 中 ;

资源混淆步骤 :

① 解析二进制文件 : 解析 resources.arsc 资源映射表混淆 二进制文件 , 获取字符串池中的资源名称字符串 ;

② 混淆资源路径 : 将字符串池中的资源路径使用无意义的字符串替换 ;

③ 修改资源路径 : 根据 ② 步骤中的无意义字符串路径 , 修改 res 中目录中的资源路径 ;

④ 打包 : 使用 7-Zip 工具进行打包 , 对齐 , 签名 , 然后就可以发布了 ;

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

;

Google 给出了解析 resources.arsc 资源映射表 的开源项目 ArscBlamer , 该工具一个命令行工具 , 用于解析 Android 应用的 resources.arsc 资源映射表文件 , 并且可以提取其中的相关信息 ;

借助 ArscBlamer 工具 , 可以输出所有资源的配置信息 , 查看 类型 , 变量 , 大小 , 空实例 , 实例个数 , 屏幕像素密度 等资源信息 ;

Android 源码中也有相关内容 : frameworks/base/include/androidfw/ResourceTypes.h

二、resources.arsc 资源映射表二进制格式分析


resources.arsc 资源映射表 二进制文件结构 :

  • 文件头 : 文件开始是 文件头 , 包含
12

字节的数据 ;

  • 全局字符串池 : 文件头后面是字符串池 , 内容是字符串 , 如 “res/mipmap/ic_launcher.png” , “res/layout/activity_main.xml” 等字符串 ;
  • 包数据 : 字符串池后面是包数据 , 其中包含包名等数据 ;

包数据中包含了 资源类型字符串池 , 资源名称字符串池 , 以及资源分组匹配规范 等数据 , 这里我们关注 资源类型字符串池 和 资源名称字符串池 ;

  • 类型字符串池 : 包含了资源的类型 , “anim” 动画 , “attr” 属性 , “drawable” 图片 , “color” 颜色 , “mipmap” 图片 , “layout” 布局 等类型字符串 ; 是 R.layout.activity_main.xml 中的中间部分组成 ;
  • 名称字符串池 : 资源的名称 , 如 “activity_main” , “ic_launcher” 等资源的名称 , 注意该名称不带后缀 ; 是 R.layout.activity_main.xml 中的后面部分组成 ;
  • Spec 配置表 : 包含资源类型 ID , 指向资源类型字符串池 , 每个资源类型都有对应的一块配置数据块 , 数据块中的内容就是该类型的具体的每个资源的名称 ; drawable 类型有一个配置数据块 , layout 类型也对应有一个配置数据块 ; 每个资源类型数据块都包含以下内容 , Spec 配置表中有若干如下数据块 ;

Spec 配置表 的 drawable 资源类型对应的数据块中存储这资源 ID , 给定一个资源 ID , 如 R.drawable.ic_launcher , 在该 Spec 配置表 中查找到 该 ID , 然后 查找其对应的路径 , 从 资源名称字符串池 找到 ID 对应的字符串 ic_launcher , 则可以得到其最终路径 res/drawable/ic_launcher ;

resources.arsc 资源映射表格式 :

给定一个 int 类型的 ID 常量 , 到 resources.arsc 资源映射表 中查询对应的文件路径 ;

要查找的文件的实际路径在字符串池中 , 如 “res/mipmap/ic_launcher.png” , “res/layout/activity_main.xml” 等字符串文件路径地址 ;

给定的 ID 如 : “kim.hsl.svg.R.layout.activity_main” , 可以分为 3 部分 ,

  • 包数据 “kim.hsl.svg.R” ,
  • 资源类型 “layout” ,
  • 资源名称 “activity_main”

资源混淆时 , 需要修改混淆 resources.arsc 资源映射表 的 全局字符串池 和 包数据下的 资源名称字符串池 ;

三、参考资料


参考官方文档 :

参考之前的博客资源 :

博客资源 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、resources.arsc 资源映射表 混淆
  • 二、resources.arsc 资源映射表二进制格式分析
  • 三、参考资料
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档