diff --git a/app/src/main/cpp/main.cpp b/app/src/main/cpp/main.cpp index 845ab72..da86161 100644 --- a/app/src/main/cpp/main.cpp +++ b/app/src/main/cpp/main.cpp @@ -14,6 +14,10 @@ #define CUSTOM_JSON_FILE_PATH "/data/adb/modules/playintegrityfix/custom.pif.json" static int verboseLogs = 0; +static int spoofBuild = 1; +static int spoofProps = 1; +static int spoofProvider = 1; +static int spoofSignature = 0; static std::map jsonProps; @@ -164,7 +168,7 @@ public: if (dexVector.empty() || json.empty()) return; readJson(); - doHook(); + if (spoofProps > 0) doHook(); inject(); dexVector.clear(); @@ -184,7 +188,7 @@ private: void readJson() { LOGD("JSON contains %d keys!", static_cast(json.size())); - // Verbose logging if verboseLogs with level number is present + // Verbose logging if (json.contains("verboseLogs")) { if (!json["verboseLogs"].is_null() && json["verboseLogs"].is_string() && json["verboseLogs"] != "") { verboseLogs = stoi(json["verboseLogs"].get()); @@ -195,6 +199,44 @@ private: json.erase("verboseLogs"); } + // Advanced spoofing settings + if (json.contains("spoofBuild")) { + if (!json["spoofBuild"].is_null() && json["spoofBuild"].is_string() && json["spoofBuild"] != "") { + spoofBuild = stoi(json["spoofBuild"].get()); + if (verboseLogs > 0) LOGD("Spoofing Build Fields set to %d!", spoofBuild); + } else { + LOGD("Error parsing spoofBuild!"); + } + json.erase("spoofBuild"); + } + if (json.contains("spoofProps")) { + if (!json["spoofProps"].is_null() && json["spoofProps"].is_string() && json["spoofProps"] != "") { + spoofProps = stoi(json["spoofProps"].get()); + if (verboseLogs > 0) LOGD("Spoofing System Properties set to %d!", spoofProps); + } else { + LOGD("Error parsing spoofProps!"); + } + json.erase("spoofProps"); + } + if (json.contains("spoofProvider")) { + if (!json["spoofProvider"].is_null() && json["spoofProvider"].is_string() && json["spoofProvider"] != "") { + spoofProvider = stoi(json["spoofProvider"].get()); + if (verboseLogs > 0) LOGD("Spoofing Keystore Provider set to %d!", spoofProvider); + } else { + LOGD("Error parsing spoofProvider!"); + } + json.erase("spoofProvider"); + } + if (json.contains("spoofSignature")) { + if (!json["spoofSignature"].is_null() && json["spoofSignature"].is_string() && json["spoofSignature"] != "") { + spoofSignature = stoi(json["spoofSignature"].get()); + if (verboseLogs > 0) LOGD("Spoofing ROM Signature set to %d!", spoofSignature); + } else { + LOGD("Error parsing spoofSignature!"); + } + json.erase("spoofSignature"); + } + std::vector eraseKeys; for (auto &jsonList: json.items()) { if (verboseLogs > 1) LOGD("Parsing %s", jsonList.key().c_str()); @@ -244,8 +286,8 @@ private: env->CallStaticVoidMethod(entryClass, receiveJson, javaStr); LOGD("JNI: Calling init"); - auto entryInit = env->GetStaticMethodID(entryClass, "init", "(I)V"); - env->CallStaticVoidMethod(entryClass, entryInit, verboseLogs); + auto entryInit = env->GetStaticMethodID(entryClass, "init", "(IIII)V"); + env->CallStaticVoidMethod(entryClass, entryInit, verboseLogs, spoofBuild, spoofProvider, spoofSignature); } }; diff --git a/app/src/main/java/es/chiteroman/playintegrityfix/CustomPackageInfoCreator.java b/app/src/main/java/es/chiteroman/playintegrityfix/CustomPackageInfoCreator.java index a1dc149..a41c300 100644 --- a/app/src/main/java/es/chiteroman/playintegrityfix/CustomPackageInfoCreator.java +++ b/app/src/main/java/es/chiteroman/playintegrityfix/CustomPackageInfoCreator.java @@ -38,4 +38,4 @@ public class CustomPackageInfoCreator implements Parcelable.Creator public PackageInfo[] newArray(int size) { return originalCreator.newArray(size); } -} \ No newline at end of file +} diff --git a/app/src/main/java/es/chiteroman/playintegrityfix/CustomProvider.java b/app/src/main/java/es/chiteroman/playintegrityfix/CustomProvider.java index 6e6b2ea..d166d1a 100644 --- a/app/src/main/java/es/chiteroman/playintegrityfix/CustomProvider.java +++ b/app/src/main/java/es/chiteroman/playintegrityfix/CustomProvider.java @@ -13,7 +13,9 @@ public final class CustomProvider extends Provider { @Override public synchronized Service getService(String type, String algorithm) { if (EntryPoint.getVerboseLogs() > 2) EntryPoint.LOG(String.format("Service: Caller type '%s' with algorithm '%s'", type, algorithm)); - if (type.equals("KeyStore")) EntryPoint.spoofDevice(); + if (EntryPoint.getSpoofBuildEnabled() > 0) { + if (type.equals("KeyStore")) EntryPoint.spoofDevice(); + } return super.getService(type, algorithm); } } diff --git a/app/src/main/java/es/chiteroman/playintegrityfix/EntryPoint.java b/app/src/main/java/es/chiteroman/playintegrityfix/EntryPoint.java index 864c9e6..cb2ec25 100644 --- a/app/src/main/java/es/chiteroman/playintegrityfix/EntryPoint.java +++ b/app/src/main/java/es/chiteroman/playintegrityfix/EntryPoint.java @@ -26,6 +26,7 @@ import java.util.Map; public final class EntryPoint { private static Integer verboseLogs = 0; + private static Integer spoofBuildEnabled = 1; private static final String signatureData = "MIIFyTCCA7GgAwIBAgIVALyxxl+zDS9SL68SzOr48309eAZyMA0GCSqGSIb3DQEBCwUAMHQxCzAJ\n" + "BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQw\n" + @@ -61,12 +62,17 @@ public final class EntryPoint { return verboseLogs; } - public static void init(int level) { - verboseLogs = level; + public static Integer getSpoofBuildEnabled() { + return spoofBuildEnabled; + } + + public static void init(int logLevel, int spoofBuildVal, int spoofProviderVal, int spoofSignatureVal) { + verboseLogs = logLevel; + spoofBuildEnabled = spoofBuildVal; if (verboseLogs > 99) logFields(); - spoofProvider(); - spoofPackageManager(); - spoofDevice(); + if (spoofProviderVal > 0) spoofProvider(); + if (spoofBuildVal > 0) spoofDevice(); + if (spoofSignatureVal > 0) spoofPackageManager(); } public static void receiveJson(String data) { diff --git a/module/migrate.sh b/module/migrate.sh index 12975b1..69b9935 100644 --- a/module/migrate.sh +++ b/module/migrate.sh @@ -129,6 +129,10 @@ echo ' "*.security_patch": "'$SECURITY_PATCH'",'; echo ' "*api_level": "'$DEVICE_INITIAL_SDK_INT'",'; if [ "$ADVANCED" ]; then echo "$N // Advanced Settings"; + echo ' "spoofBuild": "1",'; + echo ' "spoofProps": "1",'; + echo ' "spoofProvider": "1",'; + echo ' "spoofSignature": "0",'; echo ' "verboseLogs": "0",'; fi) | sed '$s/,/\n}/' > "$OUT";