diff --git a/native/jni/magiskhide/hide_policy.cpp b/native/jni/magiskhide/hide_policy.cpp index be7b6e36d..20a865bac 100644 --- a/native/jni/magiskhide/hide_policy.cpp +++ b/native/jni/magiskhide/hide_policy.cpp @@ -12,13 +12,13 @@ using namespace std; static const char *prop_key[] = { "ro.boot.vbmeta.device_state", "ro.boot.verifiedbootstate", "ro.boot.flash.locked", "ro.boot.veritymode", "ro.boot.warranty_bit", "ro.warranty_bit", "ro.debuggable", - "ro.secure", "ro.build.type", "ro.build.tags", "ro.build.selinux", + "ro.secure", "ro.build.type", "ro.build.tags", "ro.vendor.boot.warranty_bit", "ro.vendor.warranty_bit", nullptr }; static const char *prop_val[] = { "locked", "green", "1", "enforcing", "0", "0", "0", - "1", "user", "release-keys", "0", + "1", "user", "release-keys", "0", "0", nullptr }; static const char *late_prop_key[] = @@ -38,22 +38,23 @@ void hide_sensitive_props() { // Hide that we booted from recovery when magisk is in recovery mode auto bootmode = getprop("ro.bootmode"); - if (!bootmode.empty() && str_contains(bootmode, "recovery")) { + if (!bootmode.empty() && str_contains(bootmode, "recovery")) setprop("ro.bootmode", "unknown", false); - } bootmode = getprop("ro.boot.mode"); - if (!bootmode.empty() && str_contains(bootmode, "recovery")) { + if (!bootmode.empty() && str_contains(bootmode, "recovery")) setprop("ro.boot.mode", "unknown", false); - } + // Xiaomi cross region flash auto hwc = getprop("ro.boot.hwc"); - if (!hwc.empty() && str_contains(hwc, "CN")) { + if (!hwc.empty() && str_contains(hwc, "CN")) setprop("ro.boot.hwc", "GLOBAL", false); - } auto hwcountry = getprop("ro.boot.hwcountry"); - if (!hwcountry.empty() && str_contains(hwcountry, "China")) { + if (!hwcountry.empty() && str_contains(hwcountry, "China")) setprop("ro.boot.hwcountry", "GLOBAL", false); - } + + auto selinux = getprop("ro.build.selinux"); + if (!selinux.empty) + delprop("ro.build.selinux"); } void hide_late_sensitive_props() { @@ -64,24 +65,24 @@ void hide_late_sensitive_props() { if (!value.empty() && value != late_prop_val[i]) setprop(prop_key[i], late_prop_val[i], false); } + auto bootmode = getprop("vendor.boot.mode"); - if (!bootmode.empty() && str_contains(bootmode, "recovery")) { + if (!bootmode.empty() && str_contains(bootmode, "recovery")) setprop("vendor.boot.mode", "unknown", false); - } } -static inline void lazy_unmount(const char* mountpoint) { +static void lazy_unmount(const char* mountpoint) { if (umount2(mountpoint, MNT_DETACH) != -1) LOGD("hide_policy: Unmounted (%s)\n", mountpoint); } void hide_daemon(int pid) { - run_finally fin([=]() -> void { + if (fork_dont_care() == 0) { + hide_unmount(pid); // Send resume signal kill(pid, SIGCONT); _exit(0); - }); - hide_unmount(pid); + } } #define TMPFS_MNT(dir) (mentry->mnt_type == "tmpfs"sv && \ diff --git a/native/jni/magiskhide/proc_monitor.cpp b/native/jni/magiskhide/proc_monitor.cpp index 2a67b75c8..e249c14fe 100644 --- a/native/jni/magiskhide/proc_monitor.cpp +++ b/native/jni/magiskhide/proc_monitor.cpp @@ -247,8 +247,7 @@ static bool check_pid(int pid) { PTRACE_LOG("target found\n"); LOGI("proc_monitor: [%s] PID=[%d] UID=[%d]\n", cmdline, pid, uid); detach_pid(pid, SIGSTOP); - if (fork_dont_care() == 0) - hide_daemon(pid); + hide_daemon(pid); return true; } }