简介
这篇文章主要讲解Android逆向资源替换,布局修改,resources.arsc文件分析。
资源替换
通过直接解压出来的目录如下:
屏幕快照 2020-01-18 下午2.21.38.png
- 资源直接替换
在res,assets目录下找到需要替换的资源文件,替换,但是要保证文件名一致。 - 布局修改
如果想要在界面上添加UI,那么可以在res下找到相应的布局文件,然后添加代码,修改布局参数等等。 - 添加新的资源
在资源目录下添加新的资源(比如图片,xml资源文件定义新的color,string等)。这些可以在修改布局文件时直接引用。 - 资源局部替换
上面的替换方式,只要资源被替换,所有引用的地方都会被替换,如果资源的引用没有写在xml布局里面,那么我们可以分析smali文件,通过resources.arsc文件拿到对应资源的id,然后找到需要修改的smali文件里对应的资源id赋值的地方,用新的id替换。
resources.arsc分析
接下来对resources.arsc文件结构进行分析,掌握了resources.arsc文件结构,我们能够利用其规则开发出我们想要的工具。比如微信的资源混淆工具。其实就是通过读取resources.arsc文件记录资源相关信息的地方,然后统一替换资源目录名,到达资源混淆的目的。
resources.arsc由各种类型Chunk块组成,Chunk块的头部信息记录块的类型、长度等信息。
resources.arsc整体就是一个Chunk块,块的头部信息记录块的类型、长度等信息。而这个顶级块又由其它类型的Chunk组成,同样在块的头部记录了块的类型、长度等信息。
resources.arsc文件采用小端编码方式.数据应该按字节从低位往高位读,关于存储方式“大端”和“小端”可自行百度。
-
resources.arsc文件结构图
2199790-6b6df646b982bd87.png
图的第一行分别是:头部类型(两个字节),头部大小(两个字节),Chunk块大小(四个字节),package个数(package数指的是resources.arsc里面包含了多少个package的资源,一般只有一个)。其它可以自行百度,我这里不在累述。后面只用第一行来做讲述。
-
resources.arsc数据类型在Android系统层的定义
文件路径:./frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h
截屏2020-01-19下午5.35.24.png -
resources.arsc二进制数据查看
解压apk文件,得到 resources.arsc,用编辑工具查看resources.arsc。我使用的是010 Editor二进制查看工具。
截屏2020-01-19下午8.26.07.png
前两字节:02 00,如果按照小端读取方式,那么前两个字节存储的值是:0002,正是ResourceTypes.h类型定义中的RES_TABLE_TYPE。
第三,四字节值是:000C,十进制为12,从上图可以看出,RES_TABLE_TYPE类型的头大小为12字节。
接下来的4个字节值:0011131C,换算成十进制是:1119004字节,查看 resources.arsc文件属性。
截屏2020-01-19下午8.36.24.png
接下来的两个字节值是:0001,十进制是1。
resources.arsc解析工具
按照上面的resources.arsc上面的文件结构图,可以自己去解析。但是google已经有现成的开源库。
android-arscblamer
这个库支持命令行直接输出resources.arsc存储的信息。解析流程可以查看该库源码。借助该库可以快速读取自己想要的资源信息,开发自己想要的工具。比如资源混淆插件。
网友评论