From bfed2d700a0e898e96d57f1ec7ae39cf3a296834 Mon Sep 17 00:00:00 2001 From: Ylarod Date: Mon, 3 Nov 2025 08:31:25 +0800 Subject: [PATCH] add legacy get_version & Full get_version Co-authored-by: Ylarod Co-authored-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> --- manager/app/src/main/cpp/jni.c | 11 ++++---- manager/app/src/main/cpp/ksu.c | 47 +++++++++++++++++++++++++++++++++- manager/app/src/main/cpp/ksu.h | 3 +++ 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/manager/app/src/main/cpp/jni.c b/manager/app/src/main/cpp/jni.c index ccae1402..b1c5ab18 100644 --- a/manager/app/src/main/cpp/jni.c +++ b/manager/app/src/main/cpp/jni.c @@ -8,11 +8,12 @@ #include NativeBridgeNP(getVersion, jint) { - uint32_t version = get_version(); - if (version > INT32_MAX) { - LogDebug("Version overflow: %u", version); - } - return (jint)version; + uint32_t version = get_version(); + if (version > 0) { + return (jint)version; + } + // try legacy method as fallback + return legacy_get_version(); } // get VERSION FULL diff --git a/manager/app/src/main/cpp/ksu.c b/manager/app/src/main/cpp/ksu.c index a1393a06..597fffa7 100644 --- a/manager/app/src/main/cpp/ksu.c +++ b/manager/app/src/main/cpp/ksu.c @@ -27,6 +27,34 @@ extern const char* zako_file_verrcidx2str(uint8_t index); #endif // __aarch64__ || _M_ARM64 || __arm__ || _M_ARM +#define KERNEL_SU_OPTION 0xDEADBEEF + +#define CMD_GRANT_ROOT 0 + +#define CMD_BECOME_MANAGER 1 +#define CMD_GET_VERSION 2 +#define CMD_ALLOW_SU 3 +#define CMD_DENY_SU 4 +#define CMD_GET_SU_LIST 5 +#define CMD_GET_DENY_LIST 6 +#define CMD_CHECK_SAFEMODE 9 + +#define CMD_GET_APP_PROFILE 10 +#define CMD_SET_APP_PROFILE 11 + +#define CMD_IS_UID_GRANTED_ROOT 12 +#define CMD_IS_UID_SHOULD_UMOUNT 13 +#define CMD_IS_SU_ENABLED 14 +#define CMD_ENABLE_SU 15 + +#define CMD_GET_VERSION_FULL 0xC0FFEE1A + +#define CMD_ENABLE_KPM 100 +#define CMD_HOOK_TYPE 101 +#define CMD_DYNAMIC_MANAGER 103 +#define CMD_GET_MANAGERS 104 +#define CMD_ENABLE_UID_SCANNER 105 + static int fd = -1; static inline int scan_driver_fd() { @@ -79,6 +107,12 @@ static int ksuctl(unsigned long op, void* arg) { return ioctl(fd, op, arg); } +static bool ksuctl_prctl(int cmd, void* arg1, void* arg2) { + int32_t result = 0; + int32_t rtn = prctl(KERNEL_SU_OPTION, cmd, arg1, arg2, &result); + return result == KERNEL_SU_OPTION && rtn == -1; +} + static struct ksu_get_info_cmd g_version = {0}; struct ksu_get_info_cmd get_info() { @@ -186,16 +220,27 @@ bool is_kernel_umount_enabled() { return value != 0; } +int legacy_get_version() { + int32_t version = -1; + int32_t flags = 0; + ksuctl_prctl(CMD_GET_VERSION, &version, &flags); + return version; +} + void get_full_version(char* buff) { struct ksu_get_full_version_cmd cmd = {0}; if (ksuctl(KSU_IOCTL_GET_FULL_VERSION, &cmd) == 0) { strncpy(buff, cmd.version_full, KSU_FULL_VERSION_STRING - 1); buff[KSU_FULL_VERSION_STRING - 1] = '\0'; } else { - buff[0] = '\0'; + return legacy_get_full_version(buff); } } +void legacy_get_full_version(char* buff) { + ksuctl_prctl(CMD_GET_VERSION_FULL, buff, NULL); +} + bool is_KPM_enable(void) { struct ksu_enable_kpm_cmd cmd = {}; diff --git a/manager/app/src/main/cpp/ksu.h b/manager/app/src/main/cpp/ksu.h index edabfe15..4e692271 100644 --- a/manager/app/src/main/cpp/ksu.h +++ b/manager/app/src/main/cpp/ksu.h @@ -14,6 +14,8 @@ uint32_t get_version(); +int legacy_get_version(void); + bool uid_should_umount(int uid); bool is_safe_mode(); @@ -23,6 +25,7 @@ bool is_lkm_mode(); bool is_manager(); void get_full_version(char* buff); +void legacy_get_full_version(char* buff); #define KSU_APP_PROFILE_VER 2 #define KSU_MAX_PACKAGE_NAME 256