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

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

文章目录

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

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

三、参考资料



资源混淆时 , 需要修改混淆 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 1212 字节的数据 ;


全局字符串池 : 文件头后面是字符串池 , 内容是字符串 , 如 “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 配置表中有若干如下数据块 ;

image.png



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



resources.arsc 资源映射表格式 :


image.png



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


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


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


包数据 “kim.hsl.svg.R” ,

资源类型 “layout” ,

资源名称 “activity_main”


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






三、参考资料


参考官方文档 :


缩减、混淆处理和优化应用 : 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


目录
相关文章
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
311 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
309 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
9月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
2453 77
|
7月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
314 1
|
XML Java Android开发
【Android】正确使用资源res文件
首先有的UI改颜色,没用,发现无法更改按钮背景颜色。 我的AS下载的是最新版本,Button按钮的背景颜色一直都是亮紫色,无法更改。 为什么呢? 首先在你的清单文件中看你应用的是哪个主题。
649 0
|
安全 Android开发
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(三)
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(三)
497 0
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(三)
|
安全 数据安全/隐私保护 Android开发
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(二)
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(二)
463 0
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(二)
|
安全 Android开发 数据安全/隐私保护
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(一)
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(一)
640 0
【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )(一)
|
XML Java Android开发
安卓开发学习笔记(二):如何用Android Stuidio在res资源下创建xml视图文件
笔者在看了相关的教程之后发现教程当中的资源已经过时了。当我们在创建了一个新的空白的工程之后,会发现其文件夹下面的分文件夹目录和官方的教程文件结构完全不同,因此会引起很多误解。笔者使用的是最新版的Android Stuidio,其目录结构如下图所示:   一.创建主活动(First活动) 从中我们可以得到,空的工程文件夹下具有四个主文件夹,分别是app/java/res/gradle scipts.首先我们为了能够创建一个能够被编写界面,就需要创建一个活动,活动是在java文件夹下的com.example文件上进行右键创建,创建完活动之后,就可以开始进行xml布局文件了。
1228 0

热门文章

最新文章