Requirement content | 需求内容
在安全中心模块中增加开关,禁止 VirusScanJobService 强制撤销第三方应用的无障碍权限。
目前安全中心的 com.miui.securitycenter/com.miui.antivirus.service.VirusScanJobService 会监听 Settings.Secure.enabled_accessibility_services 的变化,检测到特定[长得像病毒的]应用(如 RustDesk)开启无障碍时,通过 PolicyMaker 强制撤销,且没有任何用户可操作的关闭或白名单入口。该行为是强制性的,无法通过系统设置绕过。
Implementation ideas & screenshots | 实现思路 & 截图
通过 logcat 定位到完整的撤销链路:
VirusScanJobService: onChanged: [com.carriez.flutter_hbb/com.carriez.flutter_hbb.InputService]
PolicyMaker: uid=10413 pkg=com.carriez.flutter_hbb reason=accessibility
即 VirusScanJobService 监听无障碍设置变化 → 触发 PolicyMaker 以 reason=accessibility 撤销权限。
建议 Hook 点:VirusScanJobService 的 onChanged 回调,或 PolicyMaker 中 reason=accessibility 的撤销逻辑。
以下方式均已验证无效:
- appops set ACCESS_RESTRICTED_SETTINGS allow(设置成功但不影响撤销)
- pm set-installer 伪造安装来源(安全服务不依赖安装来源判断)
- Hide My Applist 隐藏应用(安全服务直接读取无障碍设置字符串,不查询应用列表)
当前 Workaround:pm disable com.miui.securitycenter/com.miui.antivirus.service.VirusScanJobService,但会同时禁用病毒扫描功能。
也许也可以通过拦截它,不允许非法修改无障碍权限来实现,并且可能更加通用?
Simple example | 简单例子
在 HyperCeiler → 安全中心 中增加一个开关如「禁止撤销无障碍权限」,开启后允许用户自行决定哪些应用可以使用无障碍服务,而不是被系统强制撤销。
Requirement content | 需求内容
在安全中心模块中增加开关,禁止 VirusScanJobService 强制撤销第三方应用的无障碍权限。
目前安全中心的
com.miui.securitycenter/com.miui.antivirus.service.VirusScanJobService会监听Settings.Secure.enabled_accessibility_services的变化,检测到特定[长得像病毒的]应用(如 RustDesk)开启无障碍时,通过 PolicyMaker 强制撤销,且没有任何用户可操作的关闭或白名单入口。该行为是强制性的,无法通过系统设置绕过。Implementation ideas & screenshots | 实现思路 & 截图
通过 logcat 定位到完整的撤销链路:
即 VirusScanJobService 监听无障碍设置变化 → 触发 PolicyMaker 以 reason=accessibility 撤销权限。
建议 Hook 点:VirusScanJobService 的 onChanged 回调,或 PolicyMaker 中 reason=accessibility 的撤销逻辑。
以下方式均已验证无效:
当前 Workaround:pm disable com.miui.securitycenter/com.miui.antivirus.service.VirusScanJobService,但会同时禁用病毒扫描功能。
也许也可以通过拦截它,不允许非法修改无障碍权限来实现,并且可能更加通用?
Simple example | 简单例子
在 HyperCeiler → 安全中心 中增加一个开关如「禁止撤销无障碍权限」,开启后允许用户自行决定哪些应用可以使用无障碍服务,而不是被系统强制撤销。