You've already forked PlayIntegrityFork
mirror of
https://github.com/osm0sis/PlayIntegrityFork.git
synced 2025-09-06 06:37:06 +00:00
Refactor VERBOSE_LOGS parsing to directly pass level from Native to Java
This commit is contained in:
@@ -156,9 +156,7 @@ public:
|
|||||||
if (dexVector.empty() || json.empty()) return;
|
if (dexVector.empty() || json.empty()) return;
|
||||||
|
|
||||||
readJson();
|
readJson();
|
||||||
|
|
||||||
doHook();
|
doHook();
|
||||||
|
|
||||||
inject();
|
inject();
|
||||||
|
|
||||||
dexVector.clear();
|
dexVector.clear();
|
||||||
@@ -178,7 +176,7 @@ private:
|
|||||||
void readJson() {
|
void readJson() {
|
||||||
LOGD("JSON contains %d keys!", static_cast<int>(json.size()));
|
LOGD("JSON contains %d keys!", static_cast<int>(json.size()));
|
||||||
|
|
||||||
// Verbose logging if VERBOSE_LOGS with level number is last entry
|
// Verbose logging if VERBOSE_LOGS with level number is present
|
||||||
if (json.contains("VERBOSE_LOGS")) {
|
if (json.contains("VERBOSE_LOGS")) {
|
||||||
if (!json["VERBOSE_LOGS"].is_null() && json["VERBOSE_LOGS"].is_string() && json["VERBOSE_LOGS"] != "") {
|
if (!json["VERBOSE_LOGS"].is_null() && json["VERBOSE_LOGS"].is_string() && json["VERBOSE_LOGS"] != "") {
|
||||||
VERBOSE_LOGS = stoi(json["VERBOSE_LOGS"].get<std::string>());
|
VERBOSE_LOGS = stoi(json["VERBOSE_LOGS"].get<std::string>());
|
||||||
@@ -186,6 +184,7 @@ private:
|
|||||||
} else {
|
} else {
|
||||||
LOGD("Error parsing VERBOSE_LOGS!");
|
LOGD("Error parsing VERBOSE_LOGS!");
|
||||||
}
|
}
|
||||||
|
json.erase("VERBOSE_LOGS");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> eraseKeys;
|
std::vector<std::string> eraseKeys;
|
||||||
@@ -215,35 +214,30 @@ private:
|
|||||||
void inject() {
|
void inject() {
|
||||||
LOGD("get system classloader");
|
LOGD("get system classloader");
|
||||||
auto clClass = env->FindClass("java/lang/ClassLoader");
|
auto clClass = env->FindClass("java/lang/ClassLoader");
|
||||||
auto getSystemClassLoader = env->GetStaticMethodID(clClass, "getSystemClassLoader",
|
auto getSystemClassLoader = env->GetStaticMethodID(clClass, "getSystemClassLoader", "()Ljava/lang/ClassLoader;");
|
||||||
"()Ljava/lang/ClassLoader;");
|
|
||||||
auto systemClassLoader = env->CallStaticObjectMethod(clClass, getSystemClassLoader);
|
auto systemClassLoader = env->CallStaticObjectMethod(clClass, getSystemClassLoader);
|
||||||
|
|
||||||
LOGD("create class loader");
|
LOGD("create class loader");
|
||||||
auto dexClClass = env->FindClass("dalvik/system/InMemoryDexClassLoader");
|
auto dexClClass = env->FindClass("dalvik/system/InMemoryDexClassLoader");
|
||||||
auto dexClInit = env->GetMethodID(dexClClass, "<init>",
|
auto dexClInit = env->GetMethodID(dexClClass, "<init>", "(Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V");
|
||||||
"(Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V");
|
auto buffer = env->NewDirectByteBuffer(dexVector.data(), static_cast<jlong>(dexVector.size()));
|
||||||
auto buffer = env->NewDirectByteBuffer(dexVector.data(),
|
|
||||||
static_cast<jlong>(dexVector.size()));
|
|
||||||
auto dexCl = env->NewObject(dexClClass, dexClInit, buffer, systemClassLoader);
|
auto dexCl = env->NewObject(dexClClass, dexClInit, buffer, systemClassLoader);
|
||||||
|
|
||||||
LOGD("load class");
|
LOGD("load class");
|
||||||
auto loadClass = env->GetMethodID(clClass, "loadClass",
|
auto loadClass = env->GetMethodID(clClass, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
|
||||||
"(Ljava/lang/String;)Ljava/lang/Class;");
|
|
||||||
auto entryClassName = env->NewStringUTF("es.chiteroman.playintegrityfix.EntryPoint");
|
auto entryClassName = env->NewStringUTF("es.chiteroman.playintegrityfix.EntryPoint");
|
||||||
auto entryClassObj = env->CallObjectMethod(dexCl, loadClass, entryClassName);
|
auto entryClassObj = env->CallObjectMethod(dexCl, loadClass, entryClassName);
|
||||||
|
|
||||||
auto entryClass = (jclass) entryClassObj;
|
auto entryClass = (jclass) entryClassObj;
|
||||||
|
|
||||||
LOGD("read json");
|
LOGD("read json");
|
||||||
auto readProps = env->GetStaticMethodID(entryClass, "readJson",
|
auto readProps = env->GetStaticMethodID(entryClass, "readJson", "(Ljava/lang/String;)V");
|
||||||
"(Ljava/lang/String;)V");
|
|
||||||
auto javaStr = env->NewStringUTF(json.dump().c_str());
|
auto javaStr = env->NewStringUTF(json.dump().c_str());
|
||||||
env->CallStaticVoidMethod(entryClass, readProps, javaStr);
|
env->CallStaticVoidMethod(entryClass, readProps, javaStr);
|
||||||
|
|
||||||
LOGD("call init");
|
LOGD("call init");
|
||||||
auto entryInit = env->GetStaticMethodID(entryClass, "init", "()V");
|
auto entryInit = env->GetStaticMethodID(entryClass, "init", "(I)V");
|
||||||
env->CallStaticVoidMethod(entryClass, entryInit);
|
env->CallStaticVoidMethod(entryClass, entryInit, VERBOSE_LOGS);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,10 +20,11 @@ public final class EntryPoint {
|
|||||||
|
|
||||||
private static final Map<String, String> map = new HashMap<>();
|
private static final Map<String, String> map = new HashMap<>();
|
||||||
|
|
||||||
public static void init() {
|
public static void init(int level) {
|
||||||
|
verboseLogs = level;
|
||||||
|
if (verboseLogs > 99) logFields();
|
||||||
spoofProvider();
|
spoofProvider();
|
||||||
spoofDevice();
|
spoofDevice();
|
||||||
if (verboseLogs > 99) logFields();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void readJson(String data) {
|
public static void readJson(String data) {
|
||||||
@@ -69,12 +70,7 @@ public final class EntryPoint {
|
|||||||
|
|
||||||
static void spoofDevice() {
|
static void spoofDevice() {
|
||||||
for (String key : map.keySet()) {
|
for (String key : map.keySet()) {
|
||||||
// Verbose logging if VERBOSE_LOGS with level number is last entry
|
setField(key, map.get(key));
|
||||||
if (key.equals("VERBOSE_LOGS")) {
|
|
||||||
verboseLogs = Integer.parseInt(map.get("VERBOSE_LOGS"));
|
|
||||||
} else {
|
|
||||||
setField(key, map.get(key));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user