brevent / Brevent

Black prevent without Root
Do What The F*ck You Want To Public License
731 stars 176 forks source link

Xiaomi HyperOS cannot disable system packages #902

Open Angelenx opened 1 month ago

Angelenx commented 1 month ago

在小米最新的澎湃OS(Android 14)中,"停用功能"对于系统应用(如谷歌服务)已失效,而这同时也导致了“动态GMS”功能失效;而已知基于设备管理员的“应用隐藏”和“应用暂停”能够在此环境使用,因此我建议能够加入使用设备管理员权限或者Dhizuku进行对应用进行隐藏和暂停的功能。

vvb2060 commented 1 month ago

使用命令行,pm disable-user com.google.android.gms 输出什么?是否正常禁用

Angelenx commented 1 month ago

使用命令行,pm disable-user com.google.android.gms 输出什么?是否正常禁用

以下是终端输出: Exception occurred while executing 'disable-user': java.lang.SecurityException: Cannot disable system packages. at com.android.server.pm.PackageManagerServiceImpl.canBeDisabled(PackageManagerServiceImpl.java:642) at com.android.server.pm.PackageManagerService.setEnabledSettings(PackageManagerService.java:4061) at com.android.server.pm.PackageManagerService.-$$Nest$msetEnabledSettings(Unknown Source:0) at com.android.server.pm.PackageManagerService$IPackageManagerImpl.setApplicationEnabledSetting(PackageManagerService.java:5928) at com.android.server.pm.PackageManagerShellCommand.runSetEnabledSetting(PackageManagerShellCommand.java:2502) at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:273) at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97) at android.os.ShellCommand.exec(ShellCommand.java:38) at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:6551) at android.os.Binder.shellCommand(Binder.java:1075) at android.os.Binder.onTransact(Binder.java:895) at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4352) at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:6535) at android.os.Binder.execTransactInternal(Binder.java:1351) at android.os.Binder.execTransact(Binder.java:1282)

应用没有被禁用

liudongmiao commented 1 month ago

目前没有计划~有发邮件给小米,他们没有回复。

vvb2060 commented 1 month ago
    void canBeDisabled(String packageName, int newState) {
        int callingUid = Binder.getCallingUid();
        if (newState == COMPONENT_ENABLED_STATE_DEFAULT || newState == COMPONENT_ENABLED_STATE_ENABLED) {
            return;
        }
        try {
            if (Settings.Global.getInt(this.mContext.getContentResolver(), "maintenance_mode_user_id") == 110) {
                return;
            }
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }
        if (callingUid == 2000) {
            if ("com.android.cts.priv.ctsshim".equals(packageName)) {
                return;
            }
            PackageStateInternal ps = this.mPms.snapshotComputer().getPackageStateInternal(packageName);
            if (ps != null && ps.isSystem() && newState == COMPONENT_ENABLED_STATE_DISABLED_USER) {
                throw new SecurityException("Cannot disable system packages.");
            }
        }
        if (ArrayUtils.contains(MIUI_CORE_APPS, packageName)) {
            throw new SecurityException("Cannot disable miui core packages.");
        }
        if ("co.sitic.pp".equals(packageName) && shouldLockAppRegion()) {
            throw new SecurityException("Cannot disable carrier core packages.");
        }
    }
vvb2060 commented 1 month ago

settings put global maintenance_mode_user_id 110 即可修复

Angelenx commented 1 month ago

settings put global maintenance_mode_user_id 110 即可修复

thx

vvb2060 commented 1 month ago

不过这是维修模式,一直保持不好,建议禁用后立刻还原 settings delete global maintenance_mode_user_id

Angelenx commented 1 month ago

不过这是维修模式,一直保持不好,建议禁用后立刻还原 settings delete global maintenance_mode_user_id

好的,谢谢了

Angelenx commented 1 month ago

不过这是维修模式,一直保持不好,建议禁用后立刻还原 settings delete global maintenance_mode_user_id

请问如果长时间保持这个维修模式会有什么负面影响吗?

vvb2060 commented 1 month ago

不清楚,这是一个标识符,系统的一些行为会发生变化,但不知道具体哪些,所以最好删除。 这事在黑阈内做会很方便 @liudongmiao 要做吗?

Angelenx commented 1 month ago

不清楚,这是一个标识符,系统的一些行为会发生变化,但不知道具体哪些,所以最好删除。 这事在黑阈内做会很方便 @liudongmiao 要做吗?

这么说这个方法其实不安全,集成进黑阈会不会不太好?
目前已发现添加此标识符会导致密码和生物识别设置无法设置和修改。

liudongmiao commented 1 month ago

我会考虑一下,即使处理,也是黑阈自动设置,停用后自动退出。

即使用的话,也会是一个 实验性功能。

liudongmiao commented 1 month ago
    .line 643
    const-string v1, "com.lbe.security.miui"
    const-string v2, "com.miui.securitycenter"
    const-string v3, "com.android.updater"
    const-string v4, "com.xiaomi.market"
    const-string v5, "com.xiaomi.finddevice"
    const-string v6, "com.miui.home"
    filled-new-array/range {v1 .. v6}, [Ljava/lang/String;
    move-result-object v0
    sput-object v0, Lcom/android/server/pm/PackageManagerServiceImpl;->MIUI_CORE_APPS:[Ljava/lang/String;
liudongmiao commented 1 month ago

经过测试,进入维修模式之后 maintenance_mode_user_id 为 110,退出后为 -10000。

但是,手动设置 maintenance_mode_user_id 为 110,并不会触发维修模式,其它未知。

(可能需要反编译全部小米系统,才能知道全部使用场景。)

不过,黑阈会加入这个实验性功能,停用系统应用前设置该值,停用后删除该值。

Angelenx commented 1 month ago

经过测试,进入维修模式之后 maintenance_mode_user_id 为 110,退出后为 -1000。

但是,手动设置 maintenance_mode_user_id 为 110,并不会触发维修模式,其它未知。

(可能需要反编译全部小米系统,才能知道全部使用场景。)

不过,黑阈会加入这个实验性功能,停用系统应用前设置该值,停用后删除该值。

手动设置 maintenance_mode_user_id 为 110确实并不会触发维修模式,但是目前发现这会导致系统设置中密码和指纹异常,但不影响正常使用,只是不能更改密码和指纹的相关设置,且会在手动恢复改标识符后恢复正常。

另,我这边测试退出维修模式该值会变为-10000,机型是Redmi K70 Pro。

liudongmiao commented 1 month ago

另,我这边测试退出维修模式该值会变为-10000,机型是Redmi K70 Pro。

嗯,我写错了,我这边也是 -10000

liudongmiao commented 1 month ago

@Angelenx 请测试这个版本:

https://dl.jianyv.com/br/alpha/

  1. 目前还没有实验性选项...临时进入维修模式然后退出,确实需要实验模式
  2. 还没有加 miui 默认的禁止白名单
Angelenx commented 1 month ago

@Angelenx 请测试这个版本:

https://dl.jianyv.com/br/alpha/

  1. 目前还没有实验性选项...临时进入维修模式然后退出,确实需要实验模式
  2. 还没有加 miui 默认的禁止白名单

好的,已安装,目前没有发现问题。

Angelenx commented 1 month ago

目前该alpha版本未出现其他问题,建议将此功能加入实验性选项,加入beta版本,扩大测试范围。

HeslaHeim commented 1 month ago

不过这是维修模式,一直保持不好,建议禁用后立刻还原 settings delete global maintenance_mode_user_id

谢谢大佬.虽然我是小白,但我知道手机设置里可以打开维修模式,然后就可以正常使用了 disable 了

52fhy commented 2 weeks ago

使用命令行,pm disable-user com.google.android.gms 输出什么?是否正常禁用

手动进入维修模式,可以执行这个命令。执行后退出维修模式:

adb shell pm disable-user com.miui.systemAdSolution
Package com.miui.systemAdSolution new state: disabled-user