强制截图开关的边界 — 它能绕过什么、不能绕过什么
什么是 FLAG_SECURE
Android 提供 FLAG_SECURE 窗口标志——设置后:
- 系统截图会返回黑色
MediaProjection(屏幕录制)会跳过这个窗口- 最近任务屏幕缩略图也会是黑色
银行、支付、游戏等敏感应用通常会给自己的 Activity 设置这个标志。
Guise 的「允许强制截图」
这是 Reborn 重写的功能。原版只在参数恰好等于 FLAG_SECURE 时尝试清除,组合标志容易漏过。维护版改为:
- 开关语义 — 不再需要手动算标志位值,直接开/关
- 覆盖范围:
Window.setFlags()— 设置标志Window.addFlags()— 添加标志Window.setAttributes()— 属性修改WindowManager的addView/updateViewLayout路径- Activity 创建和恢复时清理已存在标志
另一个方向:禁止截图
Guise 同时保留「禁止截图」能力——启用时向目标 Activity 添加 FLAG_SECURE。和「允许强制截图」是两个相反的开关,互斥。
它能绕过什么
| 场景 | 结果 |
|---|---|
| 普通 Activity 设了 FLAG_SECURE | ✅ 可以截图 |
| 普通 Dialog 设了 FLAG_SECURE | ✅ 可以截图 |
| 应用主动阻止 MediaProjection | ✅ 可以录屏 |
它不能绕过什么
| 场景 | 原因 |
|---|---|
| DRM 保护的视频(Netflix、Disney+) | Widevine L1 硬件保护,渲染在受保护的显示管线里,FLAG_SECURE 只是其中一层 |
| 厂商私有渲染保护 | 部分 ROM 对全屏安全内容做了硬件级隔离 |
| 应用自行遮挡内容 | 某些应用在后台放一个黑色 View 盖在上面 |
| 硬件级录屏禁止 | 部分设备有物理锁 |
测试建议
开启「允许强制截图」后,拿一个你知道设置了 FLAG_SECURE 的应用测试:
- 打开目标应用
- 按系统截图快捷键(电源 + 音量减)
- 如果截图正常出现在相册里 → Hook 生效
- 如果还是黑屏 → 这个应用有更深层的保护,Guise 覆盖不到
为什么是手动开关
- 默认关闭,不影响目标应用的正常保护行为
- 开启后会主动清除目标应用设置的安全标志,改变了应用的安全意图
- 由你决定是否为了截图便利牺牲安全