apktool反编译之Can't find framework resources报错问题分析

双俊人
2023-12-01

问题背景

在反编译测试中,使用apktool反编译apk报错,如:当我们反编译从华为MATE20 PRO导出的时钟apk时,得到了一条错误信息如下:

$ apktool d com.android.deskclock.apk
I: Loading resource table...
I: Decoding resources...
I: Loading resource table from file: 1.apk
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable
W: Could not decode attr value, using undecoded value instead: ns=android, name=icon
Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.

问题分析

错误提示:该错误原因提示我们不能找到id=2的框架包资源,必须安装正确的框架(framework)文件;

报错原因:我们反编译的apk针对特定的框架(如:华为的framework-res.apk、framework-res-hwext,本文以华为MATE20 PRO为例)做了适配,依赖framework中部分资源文件,在反编译过程中未找到相关的文件所以报错。

解决方案

由上述分析可知,当发生此类错误时,需要我们首先安装依赖的框架资源文件,然后再执行反编译。整个操作流程如下:

        此刻我们返回到问题背景,发现报错信息为Can't find framework resources for package of id: 2.,报错信息中是找不到id=2的framework resources,而当前安装的id=1,说明该framework resources不多,此时执行apktool反编译依然会报错,在framework文件夹中发现还有另外一个framework-res-hwext.apk文件,这里我们继续安装。

  1. 从手机中获取framework resource,这里采用adb pull /system/framework导出整个framework文件;
  2. 在导出中framework中查看以”resources”,”res”,”frame-work”命名的apk,这里找到了framework-res.apk和framework-res-hwext.apk两个apk;
  3. 对framwork-res.apk进行安装,采用的命令为apktool if framework-res.apk,执行结果如下:

    $ apktool if com.htc.resources.apk
    I: Framework installed to: C:\Users\XXX\AppData\Local\apktool\framework\1.apk
  4. 对framework-res-hwext.apk进行,用的命令为apktool if framework-res-hwext.apk,执行结果如下:

    $ apktool if framework-res-hwext.apk
    I: Framework installed to: C:\Users\XXX\AppData\Local\apktool\framework\2.apk

    此时我们现在安装的framework resource与报错信息中的id一致,说明已找到正确的framework resource。

  5. 再一次执行反编译,命令如下apktools  d  com.android.deskclock.apk,结果如下:

    $ apktool d com.android.deskclock.apk
    I:.............
    I: Decoding values */* XMLs.
    I: Baksmaling classes.dex...
    I: Copying assets and libs..
    I: Copying unknown files...
    I: Copying original files...

    反编译成功,反编译文件夹中包含smali文件等内容。

关于查找framework resource的说明:

在大多数情况下,设备上/system/framework中的任何apk都将是一个框架文件(framework resource)。在某些设备上,它们可能位于/data/system framework中,甚至巧妙地隐藏在/system/app或/system/priv app中。通常它们以"resources", "res" 或者"framework"命名。

 类似资料: