mirror of
https://github.com/chiteroman/PlayIntegrityFix.git
synced 2025-01-19 03:22:39 +02:00
v15.9.7
This commit is contained in:
parent
b7571cd1ef
commit
0287cfcd26
@ -12,8 +12,8 @@ android {
|
|||||||
applicationId = "es.chiteroman.playintegrityfix"
|
applicationId = "es.chiteroman.playintegrityfix"
|
||||||
minSdk = 26
|
minSdk = 26
|
||||||
targetSdk = 34
|
targetSdk = 34
|
||||||
versionCode = 15960
|
versionCode = 15970
|
||||||
versionName = "v15.9.6"
|
versionName = "v15.9.7"
|
||||||
multiDexEnabled = false
|
multiDexEnabled = false
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
|
@ -10,11 +10,14 @@ import java.security.NoSuchAlgorithmException;
|
|||||||
import java.security.UnrecoverableKeyException;
|
import java.security.UnrecoverableKeyException;
|
||||||
import java.security.cert.Certificate;
|
import java.security.cert.Certificate;
|
||||||
import java.security.cert.CertificateException;
|
import java.security.cert.CertificateException;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
public final class CustomKeyStoreSpi extends KeyStoreSpi {
|
public final class CustomKeyStoreSpi extends KeyStoreSpi {
|
||||||
|
private static final String EAT_OID = "1.3.6.1.4.1.11129.2.1.25";
|
||||||
|
private static final String ASN1_OID = "1.3.6.1.4.1.11129.2.1.17";
|
||||||
|
private static final String KNOX_OID = "1.3.6.1.4.1.236.11.3.23.7";
|
||||||
public static volatile KeyStoreSpi keyStoreSpi;
|
public static volatile KeyStoreSpi keyStoreSpi;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -25,19 +28,41 @@ public final class CustomKeyStoreSpi extends KeyStoreSpi {
|
|||||||
@Override
|
@Override
|
||||||
public Certificate[] engineGetCertificateChain(String alias) {
|
public Certificate[] engineGetCertificateChain(String alias) {
|
||||||
|
|
||||||
for (StackTraceElement stackTraceElement : Thread.currentThread().getStackTrace()) {
|
boolean isDroidGuard = EntryPoint.isDroidGuard();
|
||||||
if (stackTraceElement.getClassName().toLowerCase(Locale.US).contains("droidguard")) {
|
|
||||||
EntryPoint.LOG("engineGetCertificateChain invoked by DroidGuard!");
|
Certificate[] certificates = keyStoreSpi.engineGetCertificateChain(alias);
|
||||||
|
|
||||||
|
if (certificates[0] instanceof X509Certificate leaf) {
|
||||||
|
|
||||||
|
boolean attestationExtensions = leaf.getExtensionValue(EAT_OID) != null || leaf.getExtensionValue(ASN1_OID) != null || leaf.getExtensionValue(KNOX_OID) != null;
|
||||||
|
|
||||||
|
if (isDroidGuard && attestationExtensions) {
|
||||||
|
EntryPoint.LOG("DroidGuard and attestation extension detected! Throwing exception...");
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return keyStoreSpi.engineGetCertificateChain(alias);
|
return certificates;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Certificate engineGetCertificate(String alias) {
|
public Certificate engineGetCertificate(String alias) {
|
||||||
return keyStoreSpi.engineGetCertificate(alias);
|
|
||||||
|
boolean isDroidGuard = EntryPoint.isDroidGuard();
|
||||||
|
|
||||||
|
Certificate certificate = keyStoreSpi.engineGetCertificate(alias);
|
||||||
|
|
||||||
|
if (certificate instanceof X509Certificate leaf) {
|
||||||
|
|
||||||
|
boolean attestationExtensions = leaf.getExtensionValue(EAT_OID) != null || leaf.getExtensionValue(ASN1_OID) != null || leaf.getExtensionValue(KNOX_OID) != null;
|
||||||
|
|
||||||
|
if (isDroidGuard && attestationExtensions) {
|
||||||
|
EntryPoint.LOG("DroidGuard and attestation extension detected! Throwing exception...");
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return certificate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -10,7 +10,9 @@ import java.security.KeyStore;
|
|||||||
import java.security.KeyStoreSpi;
|
import java.security.KeyStoreSpi;
|
||||||
import java.security.Provider;
|
import java.security.Provider;
|
||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public final class EntryPoint {
|
public final class EntryPoint {
|
||||||
@ -80,6 +82,10 @@ public final class EntryPoint {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean isDroidGuard() {
|
||||||
|
return Arrays.stream(Thread.currentThread().getStackTrace()).anyMatch(stackTraceElement -> stackTraceElement.getClassName().toLowerCase(Locale.US).contains("droidguard"));
|
||||||
|
}
|
||||||
|
|
||||||
private static Field getFieldByName(String name) {
|
private static Field getFieldByName(String name) {
|
||||||
|
|
||||||
Field field;
|
Field field;
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("com.android.application") version "8.3.0" apply false
|
id("com.android.application") version "8.3.1" apply false
|
||||||
}
|
}
|
@ -7,6 +7,6 @@ If not, try removing /data/adb/pif.json file.
|
|||||||
Donations:
|
Donations:
|
||||||
https://www.paypal.com/paypalme/chiteroman
|
https://www.paypal.com/paypalme/chiteroman
|
||||||
|
|
||||||
# v15.9.6
|
# v15.9.7
|
||||||
|
|
||||||
- Fix BASIC verdict not passing.
|
- Improve code detecting attestation extensions.
|
@ -21,19 +21,3 @@ if [ -f "/data/adb/pif.json" ]; then
|
|||||||
ui_print "- If you fail DEVICE verdict, remove /data/adb/pif.json file"
|
ui_print "- If you fail DEVICE verdict, remove /data/adb/pif.json file"
|
||||||
ui_print "- If pif.json file doesn't exist, module will use default one"
|
ui_print "- If pif.json file doesn't exist, module will use default one"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Conflict apps
|
|
||||||
APPS="
|
|
||||||
/system/app/EliteDevelopmentModule
|
|
||||||
/system/app/XInjectModule
|
|
||||||
/system/product/app/XiaomiEUInject
|
|
||||||
/system/product/app/XiaomiEUInject-Stub
|
|
||||||
/system/system_ext/app/hentaiLewdbSVTDummy
|
|
||||||
/system/system_ext/app/PifPrebuilt
|
|
||||||
"
|
|
||||||
|
|
||||||
for app in $APPS; do
|
|
||||||
if [ -d "$app" ]; then
|
|
||||||
ui_print "- ${app##*/} app found! You should uninstall it manually!"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
id=playintegrityfix
|
id=playintegrityfix
|
||||||
name=Play Integrity Fix
|
name=Play Integrity Fix
|
||||||
version=v15.9.6
|
version=v15.9.7
|
||||||
versionCode=15960
|
versionCode=15970
|
||||||
author=chiteroman
|
author=chiteroman
|
||||||
description=Universal modular fix for Play Integrity (and SafetyNet) on devices running Android 8-14.
|
description=Universal modular fix for Play Integrity (and SafetyNet) on devices running Android 8-14.
|
||||||
updateJson=https://raw.githubusercontent.com/chiteroman/PlayIntegrityFix/main/update.json
|
updateJson=https://raw.githubusercontent.com/chiteroman/PlayIntegrityFix/main/update.json
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"version": "v15.9.6",
|
"version": "v15.9.7",
|
||||||
"versionCode": 15960,
|
"versionCode": 15970,
|
||||||
"zipUrl": "https://github.com/chiteroman/PlayIntegrityFix/releases/download/v15.9.6/PlayIntegrityFix_v15.9.6.zip",
|
"zipUrl": "https://github.com/chiteroman/PlayIntegrityFix/releases/download/v15.9.7/PlayIntegrityFix_v15.9.7.zip",
|
||||||
"changelog": "https://raw.githubusercontent.com/chiteroman/PlayIntegrityFix/main/changelog.md"
|
"changelog": "https://raw.githubusercontent.com/chiteroman/PlayIntegrityFix/main/changelog.md"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user