使用 apktool 反编译的 APK 在 AndroidManifest 中具有十六进制数字.xml

Decompiled APK with apktool has hex digits in AndroidManifest.xml

提问人:TaihouKai 提问时间:11/16/2023 更新时间:11/20/2023 访问量:38

问:

我尝试使用 apktool 反编译 apk,对其进行一些修改,然后重新构建 apk。

这是我尝试过的:

  1. apktool d viber.apk
  2. 修改和res/xml/android_backup_rules_api31.xmlres/xml/android_backup_rules.xml
  3. apktool b viber

...由于以下错误,步骤 3 无法继续:

W: /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml:1076: error: '@2114715648' is incompatible with attribute theme (attr) reference.
W: /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml:1077: error: '@2114715648' is incompatible with attribute theme (attr) reference.
W: /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml:1078: error: '@2114715648' is incompatible with attribute theme (attr) reference.
W: /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml:1083: error: '@2114846720' is incompatible with attribute resource (attr) reference.
W: error: failed processing manifest.
brut.androlib.exceptions.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/var/folders/rt/1rw6721917xbtnmtznd812hx3873hr/T/brut_util_Jar_79656065772315295564857961138440605910.tmp, link, -o, /var/folders/rt/1rw6721917xbtnmtznd812hx3873hr/T/APKTOOL17872764973844080976.tmp, --package-id, 127, --min-sdk-version, 21, --target-sdk-version, 33, --version-code, 651217, --version-name, 21.3.2.0, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, --allow-reserved-package-id, --no-compile-sdk-metadata, -e, /var/folders/rt/1rw6721917xbtnmtznd812hx3873hr/T/APKTOOL13620375907382818829.tmp, -0, arsc, -I, /Users/<USERNAME>/Library/apktool/framework/1.apk, --manifest, /Users/<USERNAME>/Desktop/APK_RE/viber/AndroidManifest.xml, /Users/<USERNAME>/Desktop/APK_RE/viber/build/resources.zip

...我检查了相关行(即 1076、1077、1078、1083),并注意到:

<activity android:exported="false" android:name="com.snap.camerakit.LegalPromptActivity" android:theme="@2114715648"/>
<activity android:exported="false" android:name="com.snap.camerakit.LegalPrePromptVariantGActivity" android:theme="@2114715648"/>
<activity android:exported="false" android:name="com.snap.camerakit.diagnostics.DiagnosticsExportActivity" android:theme="@2114715648"/>
...
<meta-data android:name="com.android.vending.splits" android:resource="@2114846720"/>

它们都带有这个 @+digits 字符串。我以为这是一些解码错误,所以我用ClassyShark.jar检查了原始APK,它们看起来像:

    <activity
        theme='@res/0x7E0C0000'
        name='com.snap.camerakit.LegalPromptActivity'
        exported='false'>
    </activity>
    <activity
        theme='@res/0x7E0C0000'
        name='com.snap.camerakit.LegalPrePromptVariantGActivity'
        exported='false'>
    </activity>
    <activity
        theme='@res/0x7E0C0000'
        name='com.snap.camerakit.diagnostics.DiagnosticsExportActivity'
        exported='false'>
    </activity>
...
    <meta-data
        name='com.android.vending.splits'
        resource='@res/0x7E0E0000'>
    </meta-data>

为什么这些字段用十六进制数字填充?有什么方法可以修复它们,或者我可以忽略它们吗?(实际上,我并不真正关心这些功能,我只想做一些备份测试,如您在步骤2中看到的那样)

安卓 APK Android-Manifest APKtool

评论

0赞 Robert 11/16/2023
通常十六进制值属于被引用但未被 apktool 找到的字符串资源。如果您不想修改 AndroidManifest.xml,我会这样做:从 AndroidManifest.xml 中删除失败的属性,构建 apk,从原始 APK 中提取 AndroidManifest.xml 并将其插入到重建的 APK 中。
0赞 Robert 11/16/2023
我建议用于反编译。这不会反编译 DEX 文件,从而节省大量时间,因为您只想修改一些 xml 文件。此外,它还减少了您可能遇到的潜在问题列表。apktool d -s viber.apk
0赞 TaihouKai 11/18/2023
@Robert 感谢您的回复。通过“从原始APK中提取AndroidManifest.xml并将其插入到重建的APK中”,您的意思是使用zip(例如.7z)打开原始apk并以相同的方式将清单文件复制到新的apk?让我试试...
0赞 TaihouKai 11/20/2023
罗伯特的解决方案奏效了。谢谢你的帮助。

答:

0赞 TaihouKai 11/20/2023 #1

罗伯特在评论中的回答奏效了:

  1. 删除关联属性

  2. 构建 apk

  3. 使用一些 zip 实用程序(例如 .7z)提取原始文件并替换重建的 apk 中的相同文件AndroidManifest.xml