空白通行证 — 让应用查询联系人、媒体、应用列表时得到空结果
什么是空白通行证
空白通行证(Empty Pass)是 Guise 针对隐私相关数据提供的一组「让应用看到空结果」的 Hook 组。和其他伪装不同——它不是给应用看「假的东西」,而是给它看「什么都没有」。
四个通道
| 通道 | 效果 | 默认模板 |
|---|---|---|
| 联系人 | 应用查询联系人时得到空 Cursor | ✅ 内置默认模板 |
| 图片/视频/音频 | MediaStore 查询返回空 | ✅ 内置默认模板 |
| 应用列表 | PackageManager.getInstalledApplications() 等只能看到自身和系统应用 | — |
联系人 / 媒体空白通行
Guise 同时拦截:
ContentResolver.query()— 标准查询接口ContentProviderClient.query()— 客户端代理接口
按 authority/path 识别联系人、图片、视频和音频,返回保留请求列结构的空 Cursor。这样做比原版只比较固定 URI 更可靠——能适配现代 MediaStore 查询链路。
应用列表空白通行
这是 Reborn 新增的通道。开启后,目标应用通过以下接口只能看到:
- 自身
- 系统应用(含更新后的系统应用)
覆盖范围:
ApplicationPackageManager— 进程内的应用管理器IPackageManagerBinder 代理 — 跨进程代理
但不 Hook system_server,也不扩大模块作用域。原生代码、应用自带 Binder 客户端、厂商私有查询接口可能绕过,设置页会明确提示这一边界。
使用场景
- 通讯录关联推荐类应用 — 不想让它看到你的联系人
- 相册相关应用 — 不想让它扫描你的照片
- 推广/渠道应用 — 不想让它检测你装了哪些竞品
- 游戏防刷检测 — 游戏检测设备上是否有「分身、多开、脚本」等应用
一键模板
空白通行证的四个通道被打包成内置默认模板,名字就叫「空白通行证」。在 模板系统总览 里可以一键应用到多个目标应用。
注意边界
- 不关闭对应权限(权限还是授予的),只是让读取到的结果为空
- 应用如果用原生代码或私有 API 绕过通用 Android API,空白通行证可能不生效
- 目标应用如果依赖这些数据才能正常工作,开启后可能功能异常