跳过内容

MASTG-TECH-0117: 从 AndroidManifest 获取信息

AndroidManifest.xml 文件是任何 Android 应用程序的关键组成部分,它提供了关于应用程序的结构、权限、组件和配置的重要信息。在安全评估期间,分析 manifest 文件可以发现潜在的漏洞或错误配置,这些漏洞或错误配置可能会被攻击者利用。

AndroidManifest 以二进制 XML 格式存储,不能简单地通过解压缩 APK 来提取。要正确分析 manifest 文件,您首先需要提取它并将其解码为人类可读的 XML 格式。

不同的工具以不同的格式提取 manifest 文件,有些工具保留更多的原始结构,而另一些工具在解码过程中会解释或修改它。

使用 jadx

使用 jadx CLI,加上 --no-src 参数,只提取资源而不反编译所有源代码

jadx --no-src -d out_dir MASTG-DEMO-0001.apk

jadx 将完整的 manifest 文件输出到 out_dir/resources/AndroidManifest.xml,包括 <uses-sdk> 元素,而使用其他工具(如 apktool)则不包含该元素。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
    <uses-sdk
        android:minSdkVersion="29"
        android:targetSdkVersion="35" />

使用 Apktool

可以使用 apktool 提取 AndroidManifest 文件

$ apktool d -s -f -o output_dir MASTG-DEMO-0001.apk
I: Using Apktool 2.11.1 on MASTG-DEMO-0001.apk with 8 threads
I: Copying raw classes.dex file...
...
I: Loading resource table...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Decoding AndroidManifest.xml with resources...

-s 跳过 baksmaliing dex 文件,速度更快。

AndroidManifest.xml 被提取并解码到 output_dir/AndroidManifest.xml,您可以在其中简单地打开并查看它。

当您使用 apktool 解码 APK 时,您可能会注意到,在反编译的 AndroidManifest.xml 中缺少 <uses‑sdk> 元素(其中包含 minSdkVersiontargetSdkVersion)。这是预期的行为。

Apktool 将这些值移动到一个名为 apktool.yml 的单独文件中,而不是将它们插入到解码后的 XML manifest 文件中。在该文件中,您会看到类似的内容

sdkInfo:
  minSdkVersion: 29
  targetSdkVersion: 35

使用 aapt2

如果您只对 manifest 文件中的特定值感兴趣,可以使用 aapt2。

请注意,输出不是 XML 文件

$ aapt2 d badging MASTG-DEMO-0001.apk
package: name='org.owasp.mastestapp' versionCode='1' versionName='1.0' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15'
sdkVersion:'29'
targetSdkVersion:'35'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='org.owasp.mastestapp.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION'
application-label:'MASTestApp'
...