This commit is contained in:
chiteroman 2024-01-02 21:11:34 +01:00
parent aef1873e26
commit f49984ec9a
4 changed files with 66 additions and 14 deletions

2
.gitignore vendored
View File

@ -28,3 +28,5 @@ google-services.json
# Android Profiling
*.hprof
*.apk

View File

@ -11,9 +11,8 @@ android {
applicationId "es.chiteroman.bootloaderspoofer"
minSdk 26
targetSdk 34
versionCode 36
versionName '3.6'
multiDexEnabled false
versionCode 37
versionName '3.7'
}
buildTypes {
@ -22,7 +21,6 @@ android {
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
multiDexEnabled false
}
}

View File

@ -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"
}

View File

@ -1,5 +1,9 @@
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.KeyProperties;
@ -533,16 +537,51 @@ public final class Xposed implements IXposedHookLoadPackage {
@Override
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
protected void afterHookedMethod(MethodHookParam param) {
KeyPair kp = null;
try {
kp = (KeyPair) param.getResultOrThrowable();
} catch (Throwable ignored) {
} catch (Throwable t) {
XposedBridge.log(t);
}
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 {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
KeyStoreSpi keyStoreSpi = (KeyStoreSpi) XposedHelpers.getObjectField(keyStore, "keyStoreSpi");