From cd21a5125b409c70c19cebb45b0bfbe861195ded Mon Sep 17 00:00:00 2001 From: zzv002dbot Date: Thu, 21 May 2026 19:13:04 +0800 Subject: [PATCH 1/5] Hook android.os.SELinux.checkSELinuxAccess_avc --- loader/src/injector/module.cpp | 105 +++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/loader/src/injector/module.cpp b/loader/src/injector/module.cpp index 64aa2b6..94baad1 100644 --- a/loader/src/injector/module.cpp +++ b/loader/src/injector/module.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -20,6 +21,106 @@ using namespace std; +using CheckSELinuxAccessFn = jboolean (*)(JNIEnv *, jclass, jstring, jstring, jstring, jstring); + +static CheckSELinuxAccessFn orig_check_selinux_access = nullptr; + +struct ScopedUtfChars { + JNIEnv *env = nullptr; + jstring str = nullptr; + const char *value = nullptr; + + ScopedUtfChars(JNIEnv *env, jstring str) : env(env), str(str) { + if (env != nullptr && str != nullptr) value = env->GetStringUTFChars(str, nullptr); + } + + ~ScopedUtfChars() { + if (env != nullptr && str != nullptr && value != nullptr) { + env->ReleaseStringUTFChars(str, value); + } + } + + const char *c_str() const { return value; } +}; + +static bool contains_app_zygote(const char *value) { + return value != nullptr && strstr(value, "app_zygote") != nullptr; +} + +static const char *safe_str(const char *value) { + return value != nullptr ? value : "(null)"; +} + +static bool context_type_eq(const char *context, const char *type) { + if (context == nullptr || type == nullptr) return false; + if (strcmp(context, type) == 0) return true; + + const char *p = strchr(context, ':'); + if (p == nullptr) return false; + p = strchr(p + 1, ':'); + if (p == nullptr) return false; + + const char *type_start = p + 1; + const char *type_end = strchr(type_start, ':'); + size_t type_len = type_end ? static_cast(type_end - type_start) : strlen(type_start); + return strlen(type) == type_len && strncmp(type_start, type, type_len) == 0; +} + +static bool is_dirty_selinux_rule(const char *scon, const char *tcon, const char *tclass, + const char *perm) { + if (tclass == nullptr || perm == nullptr) return false; + + if (strcmp(tclass, "process") == 0 && strcmp(perm, "transition") == 0 && + context_type_eq(scon, "shell") && context_type_eq(tcon, "su")) { + return true; + } + + if (strcmp(tclass, "binder") == 0 && strcmp(perm, "call") == 0 && + context_type_eq(scon, "adbd") && context_type_eq(tcon, "adbroot")) { + return true; + } + + if (strcmp(tclass, "capability") == 0 && strcmp(perm, "sys_admin") == 0 && + context_type_eq(scon, "fsck_untrusted") && context_type_eq(tcon, "fsck_untrusted")) { + return true; + } + + return false; +} + +static jboolean new_check_selinux_access(JNIEnv *env, jclass clazz, jstring scon, jstring tcon, + jstring tclass, jstring perm) { + ScopedUtfChars source(env, scon); + ScopedUtfChars target(env, tcon); + ScopedUtfChars klass(env, tclass); + ScopedUtfChars permission(env, perm); + + if (is_dirty_selinux_rule(source.c_str(), target.c_str(), klass.c_str(), permission.c_str())) { + LOGI("filtered SELinux.checkSELinuxAccess %s %s %s %s", safe_str(source.c_str()), + safe_str(target.c_str()), safe_str(klass.c_str()), safe_str(permission.c_str())); + return JNI_FALSE; + } + + if (orig_check_selinux_access == nullptr) return JNI_FALSE; + return orig_check_selinux_access(env, clazz, scon, tcon, tclass, perm); +} + +static void hook_selinux_check_access(JNIEnv *env) { + JNINativeMethod method = { + "checkSELinuxAccess", + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", + reinterpret_cast(new_check_selinux_access), + }; + + g_hook->hook_jni_methods(env, "android/os/SELinux", {&method, 1}); + orig_check_selinux_access = reinterpret_cast(method.fnPtr); + if (orig_check_selinux_access != nullptr) { + LOGI("hooked android.os.SELinux.checkSELinuxAccess for app_zygote"); + } else { + LOGW("failed to hook android.os.SELinux.checkSELinuxAccess"); + } +} + ZygiskModule::ZygiskModule(int id, void *handle, void *entry) : id(id), handle(handle), entry{entry}, api{}, mod{nullptr} { // Make sure all pointers are null @@ -362,6 +463,10 @@ void ZygiskContext::app_specialize_pre() { } flags |= APP_SPECIALIZE; + if ((args.app->is_child_zygote != nullptr && *args.app->is_child_zygote) || + contains_app_zygote(process)) { + hook_selinux_check_access(env); + } if (!skip_zygiskd) run_modules_pre(); } From 12d9ee6a27b0b95e8dd8ff43a2ea66bee01354cc Mon Sep 17 00:00:00 2001 From: zzv002dbot Date: Thu, 21 May 2026 19:34:21 +0800 Subject: [PATCH 2/5] Hook android.os.SELinux.checkSELinuxAccess_avc use UTF-16 ASCII --- .../libnative-platform-curses.so | Bin 0 -> 24816 bytes .../libnative-platform-curses.so.lock | 1 + .../linux-amd64/libnative-platform.so | Bin 0 -> 34496 bytes .../linux-amd64/libnative-platform.so.lock | 1 + .../native/jansi/1.18/linux64/libjansi.so | Bin 0 -> 109048 bytes .../8.14.3/release-features.rendered | 0 loader/src/injector/module.cpp | 127 +++++++++++------- 7 files changed, 84 insertions(+), 45 deletions(-) create mode 100644 .gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so create mode 100644 .gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so.lock create mode 100644 .gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64/libnative-platform.so create mode 100644 .gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64/libnative-platform.so.lock create mode 100644 .gradle-user/native/jansi/1.18/linux64/libjansi.so create mode 100644 .gradle-user/notifications/8.14.3/release-features.rendered diff --git a/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so b/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so new file mode 100644 index 0000000000000000000000000000000000000000..017f10b160af7f386401f98267b5ba5bdb611e19 GIT binary patch literal 24816 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 literal 0 HcmV?d00001 diff --git a/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so.lock b/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so.lock new file mode 100644 index 0000000..6b2aaa7 --- /dev/null +++ b/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so.lock @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64/libnative-platform.so b/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64/libnative-platform.so new file mode 100644 index 0000000000000000000000000000000000000000..a8138bc1f881d69fa0f9ddc924da93f27fe56b48 GIT binary patch literal 34496 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, nullptr); + ScopedStringChars(JNIEnv *env, jstring str) : env(env), str(str) { + if (env != nullptr && str != nullptr) { + length = env->GetStringLength(str); + value = env->GetStringChars(str, nullptr); + } } - ~ScopedUtfChars() { + ~ScopedStringChars() { if (env != nullptr && str != nullptr && value != nullptr) { - env->ReleaseStringUTFChars(str, value); + env->ReleaseStringChars(str, value); } } - const char *c_str() const { return value; } + bool valid() const { return value != nullptr; } }; static bool contains_app_zygote(const char *value) { return value != nullptr && strstr(value, "app_zygote") != nullptr; } -static const char *safe_str(const char *value) { - return value != nullptr ? value : "(null)"; -} - -static bool context_type_eq(const char *context, const char *type) { - if (context == nullptr || type == nullptr) return false; - if (strcmp(context, type) == 0) return true; +static bool chars_equal_ascii(const jchar *chars, jsize length, const char *ascii) { + if (chars == nullptr || ascii == nullptr) return false; - const char *p = strchr(context, ':'); - if (p == nullptr) return false; - p = strchr(p + 1, ':'); - if (p == nullptr) return false; + size_t ascii_len = strlen(ascii); + if (ascii_len != static_cast(length)) return false; - const char *type_start = p + 1; - const char *type_end = strchr(type_start, ':'); - size_t type_len = type_end ? static_cast(type_end - type_start) : strlen(type_start); - return strlen(type) == type_len && strncmp(type_start, type, type_len) == 0; + for (jsize i = 0; i < length; ++i) { + if (chars[i] != static_cast(ascii[i])) return false; + } + return true; } -static bool is_dirty_selinux_rule(const char *scon, const char *tcon, const char *tclass, - const char *perm) { - if (tclass == nullptr || perm == nullptr) return false; +static bool string_equals_ascii(const ScopedStringChars &str, const char *ascii) { + return str.valid() && chars_equal_ascii(str.value, str.length, ascii); +} - if (strcmp(tclass, "process") == 0 && strcmp(perm, "transition") == 0 && - context_type_eq(scon, "shell") && context_type_eq(tcon, "su")) { - return true; - } +static bool context_type_eq_ascii(const ScopedStringChars &context, const char *type) { + if (!context.valid() || type == nullptr) return false; + if (string_equals_ascii(context, type)) return true; - if (strcmp(tclass, "binder") == 0 && strcmp(perm, "call") == 0 && - context_type_eq(scon, "adbd") && context_type_eq(tcon, "adbroot")) { - return true; + int colons = 0; + jsize type_start = -1; + for (jsize i = 0; i < context.length; ++i) { + if (context.value[i] != ':') continue; + if (++colons == 2) { + type_start = i + 1; + break; + } } + if (type_start < 0 || type_start >= context.length) return false; - if (strcmp(tclass, "capability") == 0 && strcmp(perm, "sys_admin") == 0 && - context_type_eq(scon, "fsck_untrusted") && context_type_eq(tcon, "fsck_untrusted")) { - return true; + jsize type_end = type_start; + while (type_end < context.length && context.value[type_end] != ':') { + type_end++; } - return false; + return chars_equal_ascii(context.value + type_start, type_end - type_start, type); } static jboolean new_check_selinux_access(JNIEnv *env, jclass clazz, jstring scon, jstring tcon, jstring tclass, jstring perm) { - ScopedUtfChars source(env, scon); - ScopedUtfChars target(env, tcon); - ScopedUtfChars klass(env, tclass); - ScopedUtfChars permission(env, perm); - - if (is_dirty_selinux_rule(source.c_str(), target.c_str(), klass.c_str(), permission.c_str())) { - LOGI("filtered SELinux.checkSELinuxAccess %s %s %s %s", safe_str(source.c_str()), - safe_str(target.c_str()), safe_str(klass.c_str()), safe_str(permission.c_str())); - return JNI_FALSE; + ScopedStringChars klass(env, tclass); + ScopedStringChars permission(env, perm); + + enum DirtyRule { + DIRTY_NONE, + DIRTY_SHELL_SU_TRANSITION, + DIRTY_ADBD_ADBROOT_BINDER, + DIRTY_FSCK_SYS_ADMIN, + } rule = DIRTY_NONE; + + if (string_equals_ascii(klass, "process") && string_equals_ascii(permission, "transition")) { + rule = DIRTY_SHELL_SU_TRANSITION; + } else if (string_equals_ascii(klass, "binder") && string_equals_ascii(permission, "call")) { + rule = DIRTY_ADBD_ADBROOT_BINDER; + } else if (string_equals_ascii(klass, "capability") && + string_equals_ascii(permission, "sys_admin")) { + rule = DIRTY_FSCK_SYS_ADMIN; + } + + if (rule != DIRTY_NONE) { + ScopedStringChars source(env, scon); + ScopedStringChars target(env, tcon); + bool filtered = false; + + switch (rule) { + case DIRTY_SHELL_SU_TRANSITION: + filtered = context_type_eq_ascii(source, "shell") && context_type_eq_ascii(target, "su"); + break; + case DIRTY_ADBD_ADBROOT_BINDER: + filtered = + context_type_eq_ascii(source, "adbd") && context_type_eq_ascii(target, "adbroot"); + break; + case DIRTY_FSCK_SYS_ADMIN: + filtered = context_type_eq_ascii(source, "fsck_untrusted") && + context_type_eq_ascii(target, "fsck_untrusted"); + break; + case DIRTY_NONE: + break; + } + + if (filtered) { + LOGI("filtered SELinux.checkSELinuxAccess rule %d", rule); + return JNI_FALSE; + } } if (orig_check_selinux_access == nullptr) return JNI_FALSE; From 4b3ba89d60fcf99e80e2e0a41f3566df01bf00c4 Mon Sep 17 00:00:00 2001 From: zzv002dbot Date: Thu, 21 May 2026 20:45:10 +0800 Subject: [PATCH 3/5] Hook android.os.SELinux.checkSELinuxAccess_avc full --- loader/src/injector/module.cpp | 151 +-------------- loader/src/injector/selinux_filter.cpp | 244 +++++++++++++++++++++++++ loader/src/injector/selinux_filter.hpp | 10 + 3 files changed, 264 insertions(+), 141 deletions(-) create mode 100644 loader/src/injector/selinux_filter.cpp create mode 100644 loader/src/injector/selinux_filter.hpp diff --git a/loader/src/injector/module.cpp b/loader/src/injector/module.cpp index 5fa1058..237ea56 100644 --- a/loader/src/injector/module.cpp +++ b/loader/src/injector/module.cpp @@ -17,147 +17,11 @@ #include "files.hpp" #include "logging.hpp" #include "misc.hpp" +#include "selinux_filter.hpp" #include "zygisk.hpp" using namespace std; -using CheckSELinuxAccessFn = jboolean (*)(JNIEnv *, jclass, jstring, jstring, jstring, jstring); - -static CheckSELinuxAccessFn orig_check_selinux_access = nullptr; - -struct ScopedStringChars { - JNIEnv *env = nullptr; - jstring str = nullptr; - const jchar *value = nullptr; - jsize length = 0; - - ScopedStringChars(JNIEnv *env, jstring str) : env(env), str(str) { - if (env != nullptr && str != nullptr) { - length = env->GetStringLength(str); - value = env->GetStringChars(str, nullptr); - } - } - - ~ScopedStringChars() { - if (env != nullptr && str != nullptr && value != nullptr) { - env->ReleaseStringChars(str, value); - } - } - - bool valid() const { return value != nullptr; } -}; - -static bool contains_app_zygote(const char *value) { - return value != nullptr && strstr(value, "app_zygote") != nullptr; -} - -static bool chars_equal_ascii(const jchar *chars, jsize length, const char *ascii) { - if (chars == nullptr || ascii == nullptr) return false; - - size_t ascii_len = strlen(ascii); - if (ascii_len != static_cast(length)) return false; - - for (jsize i = 0; i < length; ++i) { - if (chars[i] != static_cast(ascii[i])) return false; - } - return true; -} - -static bool string_equals_ascii(const ScopedStringChars &str, const char *ascii) { - return str.valid() && chars_equal_ascii(str.value, str.length, ascii); -} - -static bool context_type_eq_ascii(const ScopedStringChars &context, const char *type) { - if (!context.valid() || type == nullptr) return false; - if (string_equals_ascii(context, type)) return true; - - int colons = 0; - jsize type_start = -1; - for (jsize i = 0; i < context.length; ++i) { - if (context.value[i] != ':') continue; - if (++colons == 2) { - type_start = i + 1; - break; - } - } - if (type_start < 0 || type_start >= context.length) return false; - - jsize type_end = type_start; - while (type_end < context.length && context.value[type_end] != ':') { - type_end++; - } - - return chars_equal_ascii(context.value + type_start, type_end - type_start, type); -} - -static jboolean new_check_selinux_access(JNIEnv *env, jclass clazz, jstring scon, jstring tcon, - jstring tclass, jstring perm) { - ScopedStringChars klass(env, tclass); - ScopedStringChars permission(env, perm); - - enum DirtyRule { - DIRTY_NONE, - DIRTY_SHELL_SU_TRANSITION, - DIRTY_ADBD_ADBROOT_BINDER, - DIRTY_FSCK_SYS_ADMIN, - } rule = DIRTY_NONE; - - if (string_equals_ascii(klass, "process") && string_equals_ascii(permission, "transition")) { - rule = DIRTY_SHELL_SU_TRANSITION; - } else if (string_equals_ascii(klass, "binder") && string_equals_ascii(permission, "call")) { - rule = DIRTY_ADBD_ADBROOT_BINDER; - } else if (string_equals_ascii(klass, "capability") && - string_equals_ascii(permission, "sys_admin")) { - rule = DIRTY_FSCK_SYS_ADMIN; - } - - if (rule != DIRTY_NONE) { - ScopedStringChars source(env, scon); - ScopedStringChars target(env, tcon); - bool filtered = false; - - switch (rule) { - case DIRTY_SHELL_SU_TRANSITION: - filtered = context_type_eq_ascii(source, "shell") && context_type_eq_ascii(target, "su"); - break; - case DIRTY_ADBD_ADBROOT_BINDER: - filtered = - context_type_eq_ascii(source, "adbd") && context_type_eq_ascii(target, "adbroot"); - break; - case DIRTY_FSCK_SYS_ADMIN: - filtered = context_type_eq_ascii(source, "fsck_untrusted") && - context_type_eq_ascii(target, "fsck_untrusted"); - break; - case DIRTY_NONE: - break; - } - - if (filtered) { - LOGI("filtered SELinux.checkSELinuxAccess rule %d", rule); - return JNI_FALSE; - } - } - - if (orig_check_selinux_access == nullptr) return JNI_FALSE; - return orig_check_selinux_access(env, clazz, scon, tcon, tclass, perm); -} - -static void hook_selinux_check_access(JNIEnv *env) { - JNINativeMethod method = { - "checkSELinuxAccess", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", - reinterpret_cast(new_check_selinux_access), - }; - - g_hook->hook_jni_methods(env, "android/os/SELinux", {&method, 1}); - orig_check_selinux_access = reinterpret_cast(method.fnPtr); - if (orig_check_selinux_access != nullptr) { - LOGI("hooked android.os.SELinux.checkSELinuxAccess for app_zygote"); - } else { - LOGW("failed to hook android.os.SELinux.checkSELinuxAccess"); - } -} - ZygiskModule::ZygiskModule(int id, void *handle, void *entry) : id(id), handle(handle), entry{entry}, api{}, mod{nullptr} { // Make sure all pointers are null @@ -193,6 +57,7 @@ bool ZygiskModule::RegisterModuleImpl(ApiTable *api, long *module) { api->v2.getModuleDir = [](ZygiskModule *m) { return m->getModuleDir(); }; api->v2.getFlags = [](auto) { return ZygiskModule::getFlags(); }; } + // API v3 intentionally reuses the v2 table layout. if (api_version >= 4) { api->v4.pltHookCommit = []() { return lsplt::CommitHook(g_hook->cached_map_infos); }; api->v4.pltHookRegister = [](dev_t dev, ino_t inode, const char *symbol, void *fn, @@ -367,6 +232,10 @@ void ZygiskContext::sanitize_fds() { // Close all forbidden fds to prevent crashing auto dir = open_dir("/proc/self/fd"); + if (!dir) { + LOGW("failed to open /proc/self/fd: %s", strerror(errno)); + return; + } int dfd = dirfd(dir.get()); for (dirent *entry; (entry = readdir(dir.get()));) { int fd = parse_int(entry->d_name); @@ -458,7 +327,7 @@ void ZygiskContext::run_modules_post() { if (m.tryUnload()) modules_unloaded++; } - if (modules.size() > 0) { + if (!modules.empty()) { LOGV("modules unloaded: %zu/%zu", modules_unloaded, modules.size()); if (modules.size() == modules_unloaded) clean_libc_trace(); clean_linker_trace("jit-cache-zygisk", modules.size(), modules_unloaded, true); @@ -500,9 +369,9 @@ void ZygiskContext::app_specialize_pre() { } flags |= APP_SPECIALIZE; - if ((args.app->is_child_zygote != nullptr && *args.app->is_child_zygote) || - contains_app_zygote(process)) { - hook_selinux_check_access(env); + if (selinux_filter::is_app_zygote_process( + process, args.app->is_child_zygote != nullptr && *args.app->is_child_zygote)) { + selinux_filter::hook_check_access(env); } if (!skip_zygiskd) run_modules_pre(); } diff --git a/loader/src/injector/selinux_filter.cpp b/loader/src/injector/selinux_filter.cpp new file mode 100644 index 0000000..00a94cb --- /dev/null +++ b/loader/src/injector/selinux_filter.cpp @@ -0,0 +1,244 @@ +#include "selinux_filter.hpp" + +#include + +#include + +#include "logging.hpp" +#include "module.hpp" + +namespace selinux_filter { + +using CheckSELinuxAccessFn = jboolean (*)(JNIEnv *, jclass, jstring, jstring, jstring, jstring); + +static std::atomic_bool hook_in_progress{false}; +static std::atomic orig_check_selinux_access{nullptr}; + +struct ScopedStringChars { + JNIEnv *env = nullptr; + jstring str = nullptr; + const jchar *value = nullptr; + jsize length = 0; + + ScopedStringChars(JNIEnv *env, jstring str, jsize known_length = -1) : env(env), str(str) { + if (env != nullptr && str != nullptr) { + length = known_length >= 0 ? known_length : env->GetStringLength(str); + value = env->GetStringChars(str, nullptr); + if (value == nullptr && env->ExceptionCheck()) env->ExceptionClear(); + } + } + + ~ScopedStringChars() { + if (env != nullptr && str != nullptr && value != nullptr) { + env->ReleaseStringChars(str, value); + } + } + + bool valid() const { return value != nullptr; } +}; + +static bool same_cached_ref(JNIEnv *env, jstring str, const std::atomic &cached) { + jobject ref = cached.load(std::memory_order_acquire); + return ref != nullptr && env->IsSameObject(str, ref); +} + +static void cache_ref(JNIEnv *env, jstring str, std::atomic &cached) { + if (cached.load(std::memory_order_acquire) != nullptr) return; + + jobject global = env->NewGlobalRef(str); + if (global == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + return; + } + + jobject expected = nullptr; + if (!cached.compare_exchange_strong(expected, global, std::memory_order_release, + std::memory_order_relaxed)) { + env->DeleteGlobalRef(global); + } +} + +bool is_app_zygote_process(const char *process, bool is_child_zygote) { + return is_child_zygote || (process != nullptr && strstr(process, "app_zygote") != nullptr); +} + +static bool chars_equal_ascii(const jchar *chars, jsize length, const char *ascii, + jsize ascii_len) { + if (chars == nullptr || ascii == nullptr) return false; + if (ascii_len != length) return false; + + for (jsize i = 0; i < length; ++i) { + if (chars[i] != static_cast(static_cast(ascii[i]))) return false; + } + return true; +} + +struct CachedAsciiMatcher { + const char *ascii; + jsize length; + std::atomic cached; + + CachedAsciiMatcher(const char *ascii, jsize length) + : ascii(ascii), length(length), cached(nullptr) {} + + bool matches(JNIEnv *env, jstring str, jsize known_length = -1) { + if (env == nullptr || str == nullptr) return false; + if (same_cached_ref(env, str, cached)) return true; + + jsize str_len = known_length >= 0 ? known_length : env->GetStringLength(str); + if (str_len != length) return false; + + ScopedStringChars chars(env, str, str_len); + if (!chars.valid() || !chars_equal_ascii(chars.value, chars.length, ascii, length)) { + return false; + } + + cache_ref(env, str, cached); + return true; + } +}; + +struct ContextTypeMatcher { + const char *type; + jsize length; + std::atomic cached; + + ContextTypeMatcher(const char *type, jsize length) + : type(type), length(length), cached(nullptr) {} + + bool matches(JNIEnv *env, jstring context, jsize known_length = -1); +}; + +static bool context_type_eq_ascii(const ScopedStringChars &context, const char *type, + jsize type_len) { + if (!context.valid() || type == nullptr) return false; + if (chars_equal_ascii(context.value, context.length, type, type_len)) return true; + + int colons = 0; + jsize type_start = -1; + for (jsize i = 0; i < context.length; ++i) { + if (context.value[i] != ':') continue; + if (++colons == 2) { + type_start = i + 1; + break; + } + } + if (type_start < 0 || type_start >= context.length) return false; + + jsize type_end = type_start; + while (type_end < context.length && context.value[type_end] != ':') { + type_end++; + } + + return chars_equal_ascii(context.value + type_start, type_end - type_start, type, type_len); +} + +bool ContextTypeMatcher::matches(JNIEnv *env, jstring context, jsize known_length) { + if (env == nullptr || context == nullptr) return false; + if (same_cached_ref(env, context, cached)) return true; + + jsize context_len = known_length >= 0 ? known_length : env->GetStringLength(context); + if (context_len < length || (context_len != length && context_len < length + 7)) { + return false; + } + + ScopedStringChars chars(env, context, context_len); + if (!context_type_eq_ascii(chars, type, length)) return false; + + cache_ref(env, context, cached); + return true; +} + +static jboolean new_check_selinux_access(JNIEnv *env, jclass clazz, jstring scon, jstring tcon, + jstring tclass, jstring perm) { +#define ASCII_LEN(STR) static_cast(sizeof(STR) - 1) + static CachedAsciiMatcher process("process", ASCII_LEN("process")); + static CachedAsciiMatcher transition("transition", ASCII_LEN("transition")); + static CachedAsciiMatcher binder("binder", ASCII_LEN("binder")); + static CachedAsciiMatcher call("call", ASCII_LEN("call")); + static CachedAsciiMatcher capability("capability", ASCII_LEN("capability")); + static CachedAsciiMatcher sys_admin("sys_admin", ASCII_LEN("sys_admin")); + static ContextTypeMatcher shell("shell", ASCII_LEN("shell")); + static ContextTypeMatcher su("su", ASCII_LEN("su")); + static ContextTypeMatcher adbd("adbd", ASCII_LEN("adbd")); + static ContextTypeMatcher adbroot("adbroot", ASCII_LEN("adbroot")); + static ContextTypeMatcher fsck_untrusted_source("fsck_untrusted", ASCII_LEN("fsck_untrusted")); + static ContextTypeMatcher fsck_untrusted_target("fsck_untrusted", ASCII_LEN("fsck_untrusted")); +#undef ASCII_LEN + jsize class_len = tclass != nullptr ? env->GetStringLength(tclass) : -1; + jsize perm_len = perm != nullptr ? env->GetStringLength(perm) : -1; + + enum DirtyRule { + DIRTY_NONE, + DIRTY_SHELL_SU_TRANSITION, + DIRTY_ADBD_ADBROOT_BINDER, + DIRTY_FSCK_SYS_ADMIN, + } rule = DIRTY_NONE; + + if (class_len == process.length && perm_len == transition.length && + process.matches(env, tclass, class_len) && transition.matches(env, perm, perm_len)) { + rule = DIRTY_SHELL_SU_TRANSITION; + } else if (class_len == binder.length && perm_len == call.length && + binder.matches(env, tclass, class_len) && call.matches(env, perm, perm_len)) { + rule = DIRTY_ADBD_ADBROOT_BINDER; + } else if (class_len == capability.length && perm_len == sys_admin.length && + capability.matches(env, tclass, class_len) && sys_admin.matches(env, perm, perm_len)) { + rule = DIRTY_FSCK_SYS_ADMIN; + } + + if (rule != DIRTY_NONE) { + bool filtered = false; + + switch (rule) { + case DIRTY_SHELL_SU_TRANSITION: + filtered = shell.matches(env, scon) && su.matches(env, tcon); + break; + case DIRTY_ADBD_ADBROOT_BINDER: + filtered = adbd.matches(env, scon) && adbroot.matches(env, tcon); + break; + case DIRTY_FSCK_SYS_ADMIN: + filtered = + fsck_untrusted_source.matches(env, scon) && fsck_untrusted_target.matches(env, tcon); + break; + case DIRTY_NONE: + break; + } + + if (filtered) { + LOGI("filtered SELinux.checkSELinuxAccess rule %d", rule); + return JNI_FALSE; + } + } + + CheckSELinuxAccessFn orig = orig_check_selinux_access.load(std::memory_order_acquire); + if (orig == nullptr) return JNI_FALSE; + return orig(env, clazz, scon, tcon, tclass, perm); +} + +void hook_check_access(JNIEnv *env) { + if (orig_check_selinux_access.load(std::memory_order_acquire) != nullptr) return; + + bool expected = false; + if (!hook_in_progress.compare_exchange_strong(expected, true, std::memory_order_acq_rel, + std::memory_order_acquire)) { + return; + } + + JNINativeMethod method = { + "checkSELinuxAccess", + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", + reinterpret_cast(new_check_selinux_access), + }; + + g_hook->hook_jni_methods(env, "android/os/SELinux", {&method, 1}); + CheckSELinuxAccessFn orig = reinterpret_cast(method.fnPtr); + if (orig != nullptr && orig != new_check_selinux_access) { + orig_check_selinux_access.store(orig, std::memory_order_release); + LOGI("hooked android.os.SELinux.checkSELinuxAccess for app_zygote"); + } else { + LOGW("failed to hook android.os.SELinux.checkSELinuxAccess"); + hook_in_progress.store(false, std::memory_order_release); + } +} + +} // namespace selinux_filter diff --git a/loader/src/injector/selinux_filter.hpp b/loader/src/injector/selinux_filter.hpp new file mode 100644 index 0000000..d99f939 --- /dev/null +++ b/loader/src/injector/selinux_filter.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include + +namespace selinux_filter { + +bool is_app_zygote_process(const char *process, bool is_child_zygote); +void hook_check_access(JNIEnv *env); + +} // namespace selinux_filter From d842dbeb3856af2e046bc8c92cf9cdcc4b5260ba Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 3 Jun 2026 04:41:33 +0800 Subject: [PATCH 4/5] fix setenv --- loader/src/common/daemon.cpp | 5 +---- loader/src/ptracer/main.cpp | 4 ++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/loader/src/common/daemon.cpp b/loader/src/common/daemon.cpp index bf8a56c..deaf943 100644 --- a/loader/src/common/daemon.cpp +++ b/loader/src/common/daemon.cpp @@ -10,10 +10,7 @@ namespace zygiskd { static std::string TMP_PATH; -void Init(const char *path) { - TMP_PATH = path; - setenv("TMP_PATH", TMP_PATH.data(), 0); -} +void Init(const char *path) { TMP_PATH = path; } std::string GetTmpPath() { return TMP_PATH; } diff --git a/loader/src/ptracer/main.cpp b/loader/src/ptracer/main.cpp index e9c3083..f20b8a3 100644 --- a/loader/src/ptracer/main.cpp +++ b/loader/src/ptracer/main.cpp @@ -75,6 +75,10 @@ static int handle_version(); int main(int argc, char **argv) { // This initialization is for the daemon's internal logic, not for CLI output. zygiskd::Init(kWorkDirectory); + // Export TMP_PATH so child `zygiskd` execs inherit it. Done here (not in + // zygiskd::Init) to keep zygote's environment clean when libzygisk.so is + // injected — otherwise every specialized app inherits the marker. + setenv("TMP_PATH", kWorkDirectory, 0); if (argc < 2) { print_usage(argv[0]); From ecaecf5e83a1f69524ba549584ac79aebd864403 Mon Sep 17 00:00:00 2001 From: xm999n Date: Mon, 8 Jun 2026 13:07:37 +0800 Subject: [PATCH 5/5] Delete .gradle-user directory --- .../libnative-platform-curses.so | Bin 24816 -> 0 bytes .../libnative-platform-curses.so.lock | 1 - .../linux-amd64/libnative-platform.so | Bin 34496 -> 0 bytes .../linux-amd64/libnative-platform.so.lock | 1 - .../native/jansi/1.18/linux64/libjansi.so | Bin 109048 -> 0 bytes .../8.14.3/release-features.rendered | 0 6 files changed, 2 deletions(-) delete mode 100644 .gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so delete mode 100644 .gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so.lock delete mode 100644 .gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64/libnative-platform.so delete mode 100644 .gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64/libnative-platform.so.lock delete mode 100644 .gradle-user/native/jansi/1.18/linux64/libjansi.so delete mode 100644 .gradle-user/notifications/8.14.3/release-features.rendered diff --git a/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so b/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so deleted file mode 100644 index 017f10b160af7f386401f98267b5ba5bdb611e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24816 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 diff --git a/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so.lock b/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so.lock deleted file mode 100644 index 6b2aaa7..0000000 --- a/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64-ncurses5/libnative-platform-curses.so.lock +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64/libnative-platform.so b/.gradle-user/native/1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac/linux-amd64/libnative-platform.so deleted file mode 100644 index a8138bc1f881d69fa0f9ddc924da93f27fe56b48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34496 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