Skip to content

💡 [需求] 禁止安全服务 VirusScanJobService 强制撤销第三方应用无障碍权限 #1603

@AESisverystrong

Description

@AESisverystrong

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 → 安全中心 中增加一个开关如「禁止撤销无障碍权限」,开启后允许用户自行决定哪些应用可以使用无障碍服务,而不是被系统强制撤销。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions