解决JADX反编译无法查看 resource.arsc 配置内容

内容分享3小时前发布
0 0 0

背景

使用 jadx 反编译工具或者是 android studio IDE 都无法查看 Android framework-res.apk 中 resources.arsc 的配置内容详情。

解决JADX反编译无法查看 resource.arsc 配置内容
jadx反编译解析res失败

为什么 jadx 无法:


framework-res.apk
 是 系统资源包,它里边的 
resources.arsc
 很多时候经过了 非标准编译/压缩(Sparse Encoding、二进制优化),跟第三方 App 不太一样(可能还有压缩优化),Jadx 面向的是反编译 App 而不是系统包,所以常失败。Android 10 之后 
resources.arsc
 结构有所变化,很多通用的反编译工具(特別是面向 App 的 Jadx)都不能正确解析系统 framework 资源。它的 
resources.arsc
 结构用 apktool/aapt2 这种专门的资源解析工具可以避免这个坑

代码编译逻辑

framework-res.apk 资源应用介绍:Android device/xxx/system/common/overlay 编译产物介绍与验证解决JADX反编译无法查看 resource.arsc 配置内容https://blog.csdn.net/qq_38666896/article/details/139789004

 Android 源码树里 frameworks/base 模块的资源目录,它是系统 Framework 层的默认资源包的一部分。


frameworks/base/core/res/res/…
 下的 XML/图片等资源会在 Android 编译时被 
aapt
 编进一个专门的 
framework-res.apk
 包里面。这个 
framework-res.apk
 是系统启动时由 
/system/framework/framework-res.apk
 加载的,它包含了所有 
android.R.*
 的字符串、布局、样式等。如 
values-mcc460-mnc01
 是一个带有 MCC/MNC 限定符的资源目录,表示这是一组针对特定国家码 (Mobile Country Code) 460 和网络码 (Mobile Network Code) 01 的资源覆盖文件。比如 MCC 460 对应塞尔维亚等地区,MNC 01 是具体的运营商代码。系统开机检测到 SIM 卡的 MCC/MNC 匹配时,会优先加载这一目录里的资源来替换默认 values/ 里的同名资源。

如需验证,可以解包 
out/target/product/<device>/system/framework/framework-res.apk
 查找 assets/resources.arsc 里对应的字符串内容。这样就能确认修改的内容是否编译进去了。

另外,framework-res.apk是支持模块单编的


make framwork-res #对应模块名
解决JADX反编译无法查看 resource.arsc 配置内容
单编 framwork-res 的 console

解决方案

使用 appt 解包 dump


aapt2 dump resources framework-res.apk | grep -i 目标字符串

Note:


aapt2
 是 AOSP 自带的编译工具,它可以正确解析新格式的 
resources.arsc
。另外也可以使用 apktool 进行解包

Output Example:

解决JADX反编译无法查看 resource.arsc 配置内容
appt dump output console

单独字符串输出的时候,基本看不到 overlay 针对 MCCMNC的配置,那么可以将输出值打印到本地文本便于查看。

比如下面是查找到 config_mobile_mtu 对 SIM 的差异化资源 overlay 整型值:

解决JADX反编译无法查看 resource.arsc 配置内容
appt dump output text

工具匹配

直接在 cmd 桌面路径窗口执行appt会有问题,是因为 appt 并不是全局变量。

解决JADX反编译无法查看 resource.arsc 配置内容
appt2 不是内部命令/可运行的程序
解决JADX反编译无法查看 resource.arsc 配置内容
apktool 不是内部命令/可运行的程序

Q:那么如何找到 appt 呢?

A1:如果有 Android SDK → 在 
build-tools/<版本>/aapt2(.exe)
 
目录里能找到

解决JADX反编译无法查看 resource.arsc 配置内容
appt2 可执行文件路径

A2:如果是自己编译 AOSP → 在 
out/soong/host/linux-x86/bin/aapt2
 里

如果不想配置环境,可以:

1. 将 apk 和 appt2.exe 放置在目录(),直接执行 appt2。

解决JADX反编译无法查看 resource.arsc 配置内容
将 appt2.exe 拷贝到桌面执行

2. 不移动任何apk和exe,使用绝对路径执行 appt 分析apk

总之就是路径和命令相结合。

© 版权声明

相关文章

暂无评论

none
暂无评论...