Android清单文件实战指南
每个Android应用在APK根目录都包含一个“manifest.xml”文件(APK本质是压缩文件)。该文件如同应用指南,描述了所有组件、权限要求及硬件/软件特性。开发者错误配置(如将activity标记为导出)会严重危害应用安全。多数静态分析工具(如MobSF)通过解析此文件获取关键信息。
本文将以社交媒体应用TikTok为例,探讨如何从清单文件中挖掘黑客感兴趣的信息。
解析二进制XML
清单文件采用“二进制XML”格式,直接解压APK后内容不可读。需使用Apktool反编译:
|
|
处理大型应用时可能耗时数分钟,反编译后即可用文本编辑器查看可读版本。
关键配置分析
包名与沙箱
包名package="com.zhiliaoapp.musically"是操作系统识别应用的标识,同时指明应用内部存储路径:/data/data/<PackageName>。若应用共享用户ID(如android:SharedUserId=<UID>),可与系统应用(如android.uid.system)共享数据并获取更高权限。
危险标志
android:allowBackup="true":允许设备访问者备份应用数据,可能导致未加密数据库泄露。android:debuggable="true":禁止在发布版本中启用,否则会暴露敏感信息并允许攻击者以应用权限执行任意代码。
权限声明
应用必须通过<uses-permission>标签声明设备组件访问权限。用户运行时决定是否授予。攻击者可结合代码执行漏洞利用这些权限。安全测试者需识别不必要的权限请求。
TikTok部分权限示例:
|
|
功能要求
<uses-feature>标签声明应用依赖的硬件/软件功能。requires="true"表示缺少该功能时应用无法运行(如蓝牙)。Google Play会根据用户设备功能过滤应用。
应用组件
所有组件(activity、service、content provider、broadcast receiver)必须在清单中声明。类似面向对象语言中的公有/私有类,每个实例可设置为导出或非导出。导出组件可被其他应用访问。
Activity与入口点
Activity通过<activity>标签声明,由“intent”激活(服务和广播接收器同理)。系统通过intent过滤器确定处理组件。以下代码块标识应用入口点:
|
|
该配置指示系统在用户点击应用图标时启动此activity。定位入口点是逆向工程的第一步。
导出Activity风险
若activity设置android:exported="true"或包含<intent-filters>且未设置exported属性,则处于导出状态。测试者需重点关注此类组件。
Service分析
Service无UI组件,常用于后台任务。规则与activity类似。通过intent过滤器可推断组件功能,例如TikTok中的以下service:
|
|
仅通过清单条目和快速搜索即可推断该service负责处理Android推送通知,无需查看源代码。
深入学习
欲深入了解Android清单机制,推荐阅读Android开发者文档。