v3.7
This commit is contained in:
parent
aef1873e26
commit
f49984ec9a
|
@ -28,3 +28,5 @@ google-services.json
|
||||||
|
|
||||||
# Android Profiling
|
# Android Profiling
|
||||||
*.hprof
|
*.hprof
|
||||||
|
|
||||||
|
*.apk
|
|
@ -11,9 +11,8 @@ android {
|
||||||
applicationId "es.chiteroman.bootloaderspoofer"
|
applicationId "es.chiteroman.bootloaderspoofer"
|
||||||
minSdk 26
|
minSdk 26
|
||||||
targetSdk 34
|
targetSdk 34
|
||||||
versionCode 36
|
versionCode 37
|
||||||
versionName '3.6'
|
versionName '3.7'
|
||||||
multiDexEnabled false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
@ -22,7 +21,6 @@ android {
|
||||||
shrinkResources true
|
shrinkResources true
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
signingConfig signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
multiDexEnabled false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"artifactType": {
|
||||||
|
"type": "APK",
|
||||||
|
"kind": "Directory"
|
||||||
|
},
|
||||||
|
"applicationId": "es.chiteroman.bootloaderspoofer",
|
||||||
|
"variantName": "release",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"type": "SINGLE",
|
||||||
|
"filters": [],
|
||||||
|
"attributes": [],
|
||||||
|
"versionCode": 37,
|
||||||
|
"versionName": "3.7",
|
||||||
|
"outputFile": "app-release.apk"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"elementType": "File"
|
||||||
|
}
|
|
@ -1,5 +1,9 @@
|
||||||
package es.chiteroman.bootloaderspoofer;
|
package es.chiteroman.bootloaderspoofer;
|
||||||
|
|
||||||
|
import android.app.AndroidAppHelper;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.security.keystore.KeyGenParameterSpec;
|
import android.security.keystore.KeyGenParameterSpec;
|
||||||
import android.security.keystore.KeyProperties;
|
import android.security.keystore.KeyProperties;
|
||||||
|
|
||||||
|
@ -533,16 +537,51 @@ public final class Xposed implements IXposedHookLoadPackage {
|
||||||
@Override
|
@Override
|
||||||
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
|
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
|
||||||
|
|
||||||
Class<?> AndroidKeyStoreKeyPairGeneratorSpi = XposedHelpers.findClassIfExists("android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi", lpparam.classLoader);
|
PackageManager pm = AndroidAppHelper.currentApplication().getPackageManager();
|
||||||
|
SharedPreferences sp = AndroidAppHelper.currentApplication().getSharedPreferences("settings", Context.MODE_PRIVATE);
|
||||||
|
|
||||||
XposedHelpers.findAndHookMethod(AndroidKeyStoreKeyPairGeneratorSpi, "generateKeyPair", new XC_MethodHook() {
|
final var systemFeatureHook = new XC_MethodHook() {
|
||||||
|
@Override
|
||||||
|
protected void beforeHookedMethod(MethodHookParam param) {
|
||||||
|
String featureName = (String) param.args[0];
|
||||||
|
|
||||||
|
if (PackageManager.FEATURE_STRONGBOX_KEYSTORE.equals(featureName))
|
||||||
|
param.setResult(Boolean.FALSE);
|
||||||
|
else if (PackageManager.FEATURE_KEYSTORE_APP_ATTEST_KEY.equals(featureName))
|
||||||
|
param.setResult(Boolean.FALSE);
|
||||||
|
else if ("android.software.device_id_attestation".equals(featureName))
|
||||||
|
param.setResult(Boolean.FALSE);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
XposedHelpers.findAndHookMethod(pm.getClass(), "hasSystemFeature", String.class, systemFeatureHook);
|
||||||
|
XposedHelpers.findAndHookMethod(pm.getClass(), "hasSystemFeature", String.class, int.class, systemFeatureHook);
|
||||||
|
|
||||||
|
XposedHelpers.findAndHookMethod(sp.getClass(), "getBoolean", String.class, boolean.class, new XC_MethodHook() {
|
||||||
|
@Override
|
||||||
|
protected void beforeHookedMethod(MethodHookParam param) {
|
||||||
|
String key = (String) param.args[0];
|
||||||
|
|
||||||
|
if ("prefer_attest_key".equals(key)) param.setResult(Boolean.FALSE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
XposedHelpers.findAndHookMethod(KeyGenParameterSpec.Builder.class, "setAttestationChallenge", byte[].class, new XC_MethodHook() {
|
||||||
|
@Override
|
||||||
|
protected void beforeHookedMethod(MethodHookParam param) {
|
||||||
|
attestationChallengeBytes = (byte[]) param.args[0];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
XposedHelpers.findAndHookMethod("android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi", lpparam.classLoader, "generateKeyPair", new XC_MethodHook() {
|
||||||
@Override
|
@Override
|
||||||
protected void afterHookedMethod(MethodHookParam param) {
|
protected void afterHookedMethod(MethodHookParam param) {
|
||||||
KeyPair kp = null;
|
KeyPair kp = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
kp = (KeyPair) param.getResultOrThrowable();
|
kp = (KeyPair) param.getResultOrThrowable();
|
||||||
} catch (Throwable ignored) {
|
} catch (Throwable t) {
|
||||||
|
XposedBridge.log(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kp == null) {
|
if (kp == null) {
|
||||||
|
@ -562,13 +601,6 @@ public final class Xposed implements IXposedHookLoadPackage {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
XposedHelpers.findAndHookMethod(KeyGenParameterSpec.Builder.class, "setAttestationChallenge", byte[].class, new XC_MethodHook() {
|
|
||||||
@Override
|
|
||||||
protected void beforeHookedMethod(MethodHookParam param) {
|
|
||||||
attestationChallengeBytes = (byte[]) param.args[0];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
|
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
|
||||||
KeyStoreSpi keyStoreSpi = (KeyStoreSpi) XposedHelpers.getObjectField(keyStore, "keyStoreSpi");
|
KeyStoreSpi keyStoreSpi = (KeyStoreSpi) XposedHelpers.getObjectField(keyStore, "keyStoreSpi");
|
||||||
|
|
Loading…
Reference in New Issue