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

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

文章目录

一、resources.arsc 资源映射表文件格式

二、头文件 数据格式

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

四、包数据 数据格式

1、包头 数据格式

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

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

五、参考资料





一、resources.arsc 资源映射表文件格式


上一篇博客 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 ) 对 resources.arsc 资源映射表 的二进制文件格式进行了分析 , 得出如下结论 :


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



全局字符串池中是 资源 的文件路径 , “res/drawable/ic_launcher.png” , 包数据中的 资源名称字符串池 , 存储的文件的名称 “ic_launcher” ;


资源类型字符串池 , 不用进行混淆 , 在根据资源 ID 查找资源时 , 不会用到该数据块中的数据 ;


image.png



使用二进制文件查看器查看 resources.arsc 资源映射表 文件 :


image.png



部分数据列举 : 前 576 576576 字节 ;


02 00 0C 00 B8 BC 05 00 01 00 00 00 01 00 1C 00 98 9E 00 00 0E 03 00 00 00 00 00 00 00 01 00 00 54 0C 00 00 00 00 00 00 00 00 00 00 0B 00 00 00 17 00 00 00 1B 00 00 00 27 00 00 00 15 01 00 00 66 01 00 00 B3 01 00 00 CD 01 00 00 DA 01 00 00 E9 01 00 00 EF 01 00 00 37 02 00 00 7D 02 00 00 BB 02 00 00 FE 02 00 00 4A 03 00 00 96 03 00 00 C6 03 00 00 F7 03 00 00 25 04 00 00 54 04 00 00 6F 04 00 00 8B 04 00 00 B7 04 00 00 D6 04 00 00 F4 04 00 00 23 05 00 00 46 05 00 00 66 05 00 00 8A 05 00 00 AB 05 00 00 CC 05 00 00 EC 05 00 00 2E 06 00 00 70 06 00 00 AB 06 00 00 EF 06 00 00 34 07 00 00 71 07 00 00 AA 07 00 00 E4 07 00 00 23 08 00 00 5B 08 00 00 94 08 00 00 D2 08 00 00 FE 08 00 00 2B 09 00 00 4D 09 00 00 70 09 00 00 9A 09 00 00 C5 09 00 00 F2 09 00 00 22 0A 00 00 53 0A 00 00 8C 0A 00 00 BB 0A 00 00 EA 0A 00 00 2A 0B 00 00 6A 0B 00 00 AA 0B 00 00 EA 0B 00 00 16 0C 00 00 4D 0C 00 00 7A 0C 00 00 A7 0C 00 00 ED 0C 00 00 31 0D 00 00 67 0D 00 00 9D 0D 00 00 D6 0D 00 00 03 0E 00 00 30 0E 00 00 6F 0E 00 00 AC 0E 00 00 E7 0E 00 00 1E 0F 00 00 5B 0F 00 00 98 0F 00 00 D5 0F 00 00 07 10 00 00 38 10 00 00 63 10 00 00 88 10 00 00 AE 10 00 00 D6 10 00 00 FB 10 00 00 25 11 00 00 66 11 00 00 A8 11 00 00 E1 11 00 00 0F 12 00 00 41 12 00 00 74 12 00 00 B0 12 00 00 ED 12 00 00 1C 13 00 00 4C 13 00 00 70 13 00 00 A1 13 00 00 D3 13 00 00 FA 13 00 00 1B 14 00 00 3D 14 00 00 61 14 00 00 82 14 00 00 A8 14 00 00 DB 14 00 00 03 15 00 00 20 15 00 00 41 15 00 00 67 15 00 00 97 15 00 00 D1 15 00 00 08 16 00 00 35 16 00 00 6C 16 00 00 A0 16 00 00 CD 16 00 00 04 17 00 00 38 17 00 00 63 17 00 00 9B 17 00 00 CE 17 00 00 F9 17 00 00 33 18 00 00 68 18 00 00 94 18 00 00 CA 18 00 00 FC 18 00 00 31 19 00 00 5F 19 00 00 93 19 00 00 C5 19 00 00






二、头文件 数据格式


头文件数据 : 数据格式是 小端格式 , 低位存储在低字节中 , 高位存储在高字节中 , 如头文件长度 0C 00 , 低字节 第 0 00 字节存储 0C , 高字节 第 1 11 字节存储 00 数据 ; ( 小端格式可读性差 )


02 00 0C 00 B8 BC 05 00 01 00 00 00





1. RES_TABLE_TYPE : 2 22 字节 , 表示文件类型 , 在 frameworks/base/include/androidfw/ResourceTypes.h 源码文件中定义 ;


enum {
    RES_NULL_TYPE               = 0x0000,
    RES_STRING_POOL_TYPE        = 0x0001,
    RES_TABLE_TYPE              = 0x0002,
    RES_XML_TYPE                = 0x0003,
    // Chunk types in RES_XML_TYPE
    RES_XML_FIRST_CHUNK_TYPE    = 0x0100,
    RES_XML_START_NAMESPACE_TYPE= 0x0100,
    RES_XML_END_NAMESPACE_TYPE  = 0x0101,
    RES_XML_START_ELEMENT_TYPE  = 0x0102,
    RES_XML_END_ELEMENT_TYPE    = 0x0103,
    RES_XML_CDATA_TYPE          = 0x0104,
    RES_XML_LAST_CHUNK_TYPE     = 0x017f,
    // This contains a uint32_t array mapping strings in the string
    // pool back to resource identifiers.  It is optional.
    RES_XML_RESOURCE_MAP_TYPE   = 0x0180,
    // Chunk types in RES_TABLE_TYPE
    RES_TABLE_PACKAGE_TYPE      = 0x0200,
    RES_TABLE_TYPE_TYPE         = 0x0201,
    RES_TABLE_TYPE_SPEC_TYPE    = 0x0202,
    RES_TABLE_LIBRARY_TYPE      = 0x0203
};



2 . 头大小 : " 文件头 " 的大小 , 12 1212 字节 , 文件头范围如下 :

image.png




3 . 文件大小 : 整个 resources.arsc 资源映射表 文件的大小 , 单位 字节 ;



4 . package 数 : 一般情况下 , 一个应用只有一个 package 包 ; 正常情况下 , 该值是 1 11 ;




目录
相关文章
|
5月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
91 20
Android经典面试题之图片Bitmap怎么做优化
|
4月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
90 4
|
3月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
5月前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
116 0
|
9月前
|
存储 算法 安全
AVB数据解析:Android verified boot 2.0 vbmeta 数据结构解析
AVB数据解析:Android verified boot 2.0 vbmeta 数据结构解析
926 0
|
存储 Android开发
【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )
【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )
172 0
【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )
|
机器学习/深度学习 Java Android开发
Android中需要了解的数据结构(一)
Java容器类 Java容器类是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。 Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections) 【文章纯干货 请仔细阅读哦!】   通过上图,可以把握两个基本主体,即Collection和Map。
|
JavaScript Java Android开发
Android中需要了解的数据结构(一)
Java容器类 Java容器类是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)**【文章纯干货 请仔细阅读哦!】** 通过上图,可以把握两个基本主体,即Collection和Map。
|
API Android开发 Java
Android开发之那些好用的数据结构与API(三)
之前的系列文章 Android开发之那些好用的数据结构与API 和Android开发之那些好用的数据结构与API(二)中,已经介绍了一些,趁热打铁,本次介绍的内容很实用哦~~ 1、RoundedBitmapDrawable RoundedBitmapDrawable 是 android.support.v4.graphics.drawable 里面的一个类,但是记得一定得是21+以上的版本。
799 0
|
API Android开发 数据安全/隐私保护
Android开发之那些好用的数据结构与API(二)
在 Android开发之那些好用的数据结构与API 一文中提到了Android中一些好用的数据结构和API,这次继续补充几个我在项目中用到的好用的但是不是人人都知道的东东 ~~ 1、android:digits 在Android开发中,经常要设置EditText为密码显示,但是通常要求密码只能是 **字母和数字 .
675 0

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 7
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 10
    Android 13 SystemUI 启动流程
  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    21
  • 3
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    52
  • 4
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    35
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    70
  • 6
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    111
  • 7
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
    29
  • 8
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
    264
  • 9
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
    75
  • 10
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    36