【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 ;




目录
相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1501 4
|
7月前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
267 3
|
9月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
613 11
|
11月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2690 2
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
416 1
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
921 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
缓存 API Android开发
Android经典实战之Kotlin Flow中的3个数据相关的操作符:debounce、buffer和conflate
本文介绍了Kotlin中`Flow`的`debounce`、`buffer`及`conflate`三个操作符。`debounce`过滤快速连续数据,仅保留指定时间内的最后一个;`buffer`引入缓存减轻背压;`conflate`仅保留最新数据。通过示例展示了如何在搜索输入和数据流处理中应用这些操作符以提高程序效率和用户体验。
412 6
|
编解码 网络协议 前端开发
如何实现Android平台GB28181设备接入模块按需打开摄像头并回传数据
后台采集摄像头,如果想再进一步扩展,可以把android平台gb28181的camera2 demo,都移植过来,实现功能更强大的国标设备侧,这里主要是展示,收到国标平台侧的回传请求后,才打开摄像头,才开始编码打包,最大限度的减少资源的占用
394 3
|
编解码 网络协议 Android开发
Android平台GB28181设备接入模块实现后台service按需回传摄像头数据到国标平台侧
我们在做Android平台GB28181设备对接模块的时候,遇到这样的技术需求,开发者希望能以后台服务的形式运行程序,国标平台侧没有视频回传请求的时候,仅保持信令链接,有发起视频回传请求或语音广播时,打开摄像头,并实时回传音视频数据或接收处理国标平台侧发过来的语音广播数据。
245 3
|
JSON Java Android开发
Android 开发者必备秘籍:轻松攻克 JSON 格式数据解析难题,让你的应用更出色!
【8月更文挑战第18天】在Android开发中,解析JSON数据至关重要。JSON以其简洁和易读成为首选的数据交换格式。开发者可通过多种途径解析JSON,如使用内置的`JSONObject`和`JSONArray`类直接操作数据,或借助Google提供的Gson库将JSON自动映射为Java对象。无论哪种方法,正确解析JSON都是实现高效应用的关键,能帮助开发者处理网络请求返回的数据,并将其展示给用户,从而提升应用的功能性和用户体验。
424 1

热门文章

最新文章