在安卓应用安全评估里,Drozer是一款被广泛使用的开源框架,它运行在电脑端并通过adb与手机或模拟器里的agent通信,从而以普通应用权限去探测目标应用的组件与数据通道。它的核心价值在于把复杂的Binder通信和Intent构造过程封装成简单命令,让测试人员无需编写大量代码就能完成攻击面梳理。

一、Drozer是什么以及为什么适合Android安全测试
Drozer本质上是一个针对安卓系统的安全审计与渗透辅助平台。传统静态扫描工具只能从安装包中反编译出Manifest声明,却难以验证这些声明在真实运行环境中是否可被外部调用。Drozer则直接在设备上模拟一个普通权限的应用,尝试跨越应用边界去启动 activity、绑定 service、查询 content provider 或发送 broadcast,这种动态验证方式能发现静态分析遗漏的实际暴露面。
安卓系统的沙箱机制本意是隔离不同应用,但如果开发者在配置组件时错误使用了 exported 属性,或者依赖隐式 Intent 但未做权限校验,就可能被其他应用越权访问。Drozer 利用这一特点,把四大组件逐一列出来并自动判断其导出状态,测试者只需输入几条指令就能知道哪个登录页 activity 能被外部直接拉起,哪个 provider 泄露了用户数据库。
二、Drozer环境搭建与基本连接
使用 Drozer 前需要在电脑安装 drozer 控制台,并在安卓设备里安装 drozer agent。电脑端通过 pip 安装 drozer 后,用命令 drozer console connect 即可连上已开启端口转发的设备。常见做法是在电脑执行 adb forward tcp:31415 tcp:31415,再在手机打开 agent 并选择 embedded server,这样两端就能建立本地通信。
连接成功后,输入 list 或 run app.package.list 可以查看设备上所有已安装包名。若只关注某一个应用,可用 run app.package.info -a 包名 获取其权限申请与组件数量。这一步是后续精细测试的基础,因为只有明确了目标包名,才能进一步枚举它的暴露组件并构造针对性 Intent。
三、利用Drozer发现组件暴露风险
组件暴露是安卓应用最常见的安全问题之一。通过 run app.activity.info -a 包名 可以列出该应用所有 activity 及其 exported 值。若某个负责身份校验的 activity 被标记为 true,任何外部应用都能用 startActivity 直接调起,绕过登录流程。Drozer 还能用 run app.activity.start 配合 --component 参数真实启动它,验证漏洞是否可利用。
对于 content provider,命令 run app.provider.info -a 包名 会展示哪些数据接口可被外部查询。测试者可以继续用 run app.provider.query 去读取 uri 指向的表,若返回了短信、账号或令牌等敏感信息,就说明存在越权数据泄露。实际项目中,不少金融类 app 因 provider 未加 read_permission 而被 Drozer 直接拖出用户表。
常见组件与对应Drozer检查命令
| 组件类型 | 信息枚举命令 | 常见风险 |
|---|---|---|
| Activity | run app.activity.info -a 包名 | 敏感页面被外部拉起 |
| Service | run app.service.info -a 包名 | 后台服务被恶意绑定 |
| Content Provider | run app.provider.info -a 包名 | 数据库越权读取 |
| Broadcast Receiver | run app.broadcast.info -a 包名 | 伪造广播触发逻辑 |
四、Drozer在权限与数据泄露测试中的实践
除了组件枚举,Drozer 也能辅助做权限提升与数据流向分析。例如运行 run app.package.attacksurface 包名 会综合输出该应用的攻击面评分,指出有多少组件导出、是否可申请危险权限。测试人员结合 run scanner.provider.injection 还能自动探测 provider 是否存在 SQL 注入,这类问题在老旧 ORM 封装中尤为普遍。
在数据泄露场景里,有些应用把密钥放在 shared preferences 或内部存储,却又通过弱保护的 provider 暴露出去。用 Drozer 的 run app.provider.read 可以指定文件路径直接读取内部资源,若成功则说明攻击者无需 root 也能拿到配置文件。这种实测方式比单纯看代码更直观,也更容易向开发团队证明危害。
五、Drozer使用的局限与补充建议
Drozer 虽强,但主要覆盖组件层与部分数据层,对原生层漏洞、业务逻辑绕过或服务器端接口问题无能为力。安卓版本演进后,某些新权限模型或 Scoped Storage 限制会让老命令失效,需要配合 Frida 等动态插桩工具做补充。此外,自动化扫描容易误报,每个疑似暴露点都应人工确认其业务必要性与可利用条件。
建议在持续集成中把 Drozer 脚本化,每次发版前对重点应用跑一遍基础组件检查,把 exported 异常直接阻断上线。同时安全团队应建立组件最小化暴露规范,默认关闭非必要导出,用自定义权限保护跨应用接口。只有这样,Drozer 发现的风险才不会在修复后反复出现。
DrozerAndroid安全测试组件暴露修改时间:2026-08-11 05:42:32