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>
元素(其中包含 minSdkVersion
和 targetSdkVersion
)。这是预期的行为。
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'
...