From 48014b94509eaac02b9730cdb65301c4704b0696 Mon Sep 17 00:00:00 2001 From: osm0sis Date: Thu, 1 Feb 2024 09:32:45 -0400 Subject: [PATCH] Revert "Hook uname to spoof kernel release version string" This reverts commit 7997954f7496e63c80ec81f0e71b31e712eba2b6. Hook wasn't functional for intercepting the uname call despite many attempted methods, both on .gms and .gms.unstable See: https://github.com/chiteroman/PlayIntegrityFix/issues/236 --- app/src/main/cpp/main.cpp | 50 ++------------------------------------- 1 file changed, 2 insertions(+), 48 deletions(-) diff --git a/app/src/main/cpp/main.cpp b/app/src/main/cpp/main.cpp index cb16512..253cd92 100644 --- a/app/src/main/cpp/main.cpp +++ b/app/src/main/cpp/main.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include "zygisk.hpp" @@ -18,8 +17,6 @@ static int verboseLogs = 0; static std::map jsonProps; -static std::string unameRelease; - typedef void (*T_Callback)(void *, const char *, const char *, uint32_t); static std::map callbacks; @@ -70,27 +67,7 @@ static void my_system_property_read_callback(const prop_info *pi, T_Callback cal return o_system_property_read_callback(pi, modify_callback, cookie); } -static int (*o_uname_callback)(struct utsname *); - -static int my_uname_callback(struct utsname *buf) { - auto ret = o_uname_callback(buf); - - if (buf && ret == 0) { - const char *value = unameRelease.c_str(); - const char *oldValue = buf->release; - - if (unameRelease.empty() || oldValue == value) { - if (verboseLogs > 2) LOGD("[uname_release]: %s (unchanged)", oldValue); - } else if (unameRelease.size() < SYS_NMLN) { - LOGD("[uname_release]: %s -> %s", oldValue, value); - strncpy(buf->release, value, unameRelease.size()); - } - } - - return ret; -} - -static void doPropHook() { +static void doHook() { void *handle = DobbySymbolResolver(nullptr, "__system_property_read_callback"); if (handle == nullptr) { LOGD("Couldn't find '__system_property_read_callback' handle"); @@ -101,17 +78,6 @@ static void doPropHook() { reinterpret_cast(&o_system_property_read_callback)); } -static void doUnameHook() { - void *handle = DobbySymbolResolver(nullptr, "uname"); - if (handle == nullptr) { - LOGD("Couldn't find 'uname' handle"); - return; - } - LOGD("Found 'uname' handle at %p", handle); - DobbyHook(handle, reinterpret_cast(my_uname_callback), - reinterpret_cast(&o_uname_callback)); -} - class PlayIntegrityFix : public zygisk::ModuleBase { public: void onLoad(zygisk::Api *api, JNIEnv *env) override { @@ -198,8 +164,7 @@ public: if (dexVector.empty() || json.empty()) return; readJson(); - doPropHook(); - doUnameHook(); + doHook(); inject(); dexVector.clear(); @@ -230,17 +195,6 @@ private: json.erase("verbose_logs"); } - // Parse kernel uname release string as a special case (neither field or property) - if (json.contains("uname_release")) { - if (verboseLogs > 1) LOGD("Parsing uname_release"); - if (!json["uname_release"].is_null() && json["uname_release"].is_string() && json["uname_release"] != "") { - unameRelease = json["uname_release"].get(); - } else { - LOGD("Error parsing uname_release!"); - } - json.erase("uname_release"); - } - std::vector eraseKeys; for (auto &jsonList: json.items()) { if (verboseLogs > 1) LOGD("Parsing %s", jsonList.key().c_str());