Skip to content

Commit 9a26442

Browse files
committed
Add Custom keybox file
1 parent 77f7ad2 commit 9a26442

File tree

4 files changed

+159
-81
lines changed

4 files changed

+159
-81
lines changed

app/src/main/java/com/wmods/wppenhacer/WppXposed.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,6 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th
6666
if ((packageName.equals(FeatureLoader.PACKAGE_WPP) && App.isOriginalPackage()) || packageName.equals(FeatureLoader.PACKAGE_BUSINESS)) {
6767
XposedBridge.log("[•] This package: " + lpparam.packageName);
6868

69-
// Inject Booloader Spoofer
70-
if (getPref().getBoolean("bootloader_spoofer", false)) {
71-
HookBL.hook(lpparam);
72-
XposedBridge.log("Bootloader Spoofer is Injected");
73-
}
74-
7569
// Load features
7670
FeatureLoader.start(classLoader, getPref(), lpparam.appInfo.sourceDir);
7771

app/src/main/java/com/wmods/wppenhacer/xposed/core/FeatureLoader.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
import com.wmods.wppenhacer.xposed.features.privacy.TagMessage;
7878
import com.wmods.wppenhacer.xposed.features.privacy.TypingPrivacy;
7979
import com.wmods.wppenhacer.xposed.features.privacy.ViewOnce;
80+
import com.wmods.wppenhacer.xposed.spoofer.HookBL;
8081
import com.wmods.wppenhacer.xposed.utils.DesignUtils;
8182
import com.wmods.wppenhacer.xposed.utils.ResId;
8283
import com.wmods.wppenhacer.xposed.utils.Utils;
@@ -118,6 +119,12 @@ public static void start(@NonNull ClassLoader loader, @NonNull XSharedPreference
118119
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
119120
mApp = (Application) param.args[0];
120121

122+
// Inject Booloader Spoofer
123+
if (pref.getBoolean("bootloader_spoofer", false)) {
124+
HookBL.hook(loader, pref);
125+
XposedBridge.log("Bootloader Spoofer is Injected");
126+
}
127+
121128
PackageManager packageManager = mApp.getPackageManager();
122129
pref.registerOnSharedPreferenceChangeListener((sharedPreferences, s) -> pref.reload());
123130
PackageInfo packageInfo = packageManager.getPackageInfo(mApp.getPackageName(), 0);

app/src/main/java/com/wmods/wppenhacer/xposed/spoofer/HookBL.java

Lines changed: 141 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import android.security.keystore.KeyGenParameterSpec;
88
import android.security.keystore.KeyProperties;
99

10+
import com.wmods.wppenhacer.xposed.utils.Utils;
11+
1012
import org.bouncycastle.asn1.ASN1Boolean;
1113
import org.bouncycastle.asn1.ASN1Encodable;
1214
import org.bouncycastle.asn1.ASN1EncodableVector;
@@ -52,12 +54,14 @@
5254

5355
import de.robv.android.xposed.XC_MethodHook;
5456
import de.robv.android.xposed.XC_MethodReplacement;
57+
import de.robv.android.xposed.XSharedPreferences;
5558
import de.robv.android.xposed.XposedBridge;
5659
import de.robv.android.xposed.XposedHelpers;
5760
import de.robv.android.xposed.callbacks.XC_LoadPackage;
5861

5962
public final class HookBL {
60-
private static final KeyPair keyPair_EC, keyPair_RSA;
63+
private static KeyPair keyPair_EC;
64+
private static KeyPair keyPair_RSA;
6165
private static final LinkedList<Certificate> certs_EC = new LinkedList<>();
6266
private static final LinkedList<Certificate> certs_RSA = new LinkedList<>();
6367
private static byte[] attestationChallengeBytes = new byte[1];
@@ -66,11 +70,11 @@ public final class HookBL {
6670
try {
6771

6872
String str = """
69-
-----BEGIN EC PRIVATE KEY-----
70-
MHcCAQEEICHghkMqFRmEWc82OlD8FMnarfk19SfC39ceTW28QuVEoAoGCCqGSM49
71-
AwEHoUQDQgAE6555+EJjWazLKpFMiYbMcK2QZpOCqXMmE/6sy/ghJ0whdJdKKv6l
72-
uU1/ZtTgZRBmNbxTt6CjpnFYPts+Ea4QFA==
73-
-----END EC PRIVATE KEY-----""";
73+
-----BEGIN EC PRIVATE KEY-----
74+
MHcCAQEEICHghkMqFRmEWc82OlD8FMnarfk19SfC39ceTW28QuVEoAoGCCqGSM49
75+
AwEHoUQDQgAE6555+EJjWazLKpFMiYbMcK2QZpOCqXMmE/6sy/ghJ0whdJdKKv6l
76+
uU1/ZtTgZRBmNbxTt6CjpnFYPts+Ea4QFA==
77+
-----END EC PRIVATE KEY-----""";
7478

7579
keyPair_EC = parseKeyPair(str);
7680

@@ -94,84 +98,84 @@ public final class HookBL {
9498
keyPair_RSA = parseKeyPair(str);
9599

96100
str = """
97-
-----BEGIN CERTIFICATE-----
98-
MIICeDCCAh6gAwIBAgICEAEwCgYIKoZIzj0EAwIwgZgxCzAJBgNVBAYTAlVTMRMw
99-
EQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRUwEwYD
100-
VQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJvaWQxMzAxBgNVBAMMKkFu
101-
ZHJvaWQgS2V5c3RvcmUgU29mdHdhcmUgQXR0ZXN0YXRpb24gUm9vdDAeFw0xNjAx
102-
MTEwMDQ2MDlaFw0yNjAxMDgwMDQ2MDlaMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE
103-
CAwKQ2FsaWZvcm5pYTEVMBMGA1UECgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdB
104-
bmRyb2lkMTswOQYDVQQDDDJBbmRyb2lkIEtleXN0b3JlIFNvZnR3YXJlIEF0dGVz
105-
dGF0aW9uIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOue
106-
efhCY1msyyqRTImGzHCtkGaTgqlzJhP+rMv4ISdMIXSXSir+pblNf2bU4GUQZjW8
107-
U7ego6ZxWD7bPhGuEBSjZjBkMB0GA1UdDgQWBBQ//KzWGrE6noEguNUlHMVlux6R
108-
qTAfBgNVHSMEGDAWgBTIrel3TEXDo88NFhDkeUM6IVowzzASBgNVHRMBAf8ECDAG
109-
AQH/AgEAMA4GA1UdDwEB/wQEAwIChDAKBggqhkjOPQQDAgNIADBFAiBLipt77oK8
110-
wDOHri/AiZi03cONqycqRZ9pDMfDktQPjgIhAO7aAV229DLp1IQ7YkyUBO86fMy9
111-
Xvsiu+f+uXc/WT/7
112-
-----END CERTIFICATE-----""";
101+
-----BEGIN CERTIFICATE-----
102+
MIICeDCCAh6gAwIBAgICEAEwCgYIKoZIzj0EAwIwgZgxCzAJBgNVBAYTAlVTMRMw
103+
EQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRUwEwYD
104+
VQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJvaWQxMzAxBgNVBAMMKkFu
105+
ZHJvaWQgS2V5c3RvcmUgU29mdHdhcmUgQXR0ZXN0YXRpb24gUm9vdDAeFw0xNjAx
106+
MTEwMDQ2MDlaFw0yNjAxMDgwMDQ2MDlaMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE
107+
CAwKQ2FsaWZvcm5pYTEVMBMGA1UECgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdB
108+
bmRyb2lkMTswOQYDVQQDDDJBbmRyb2lkIEtleXN0b3JlIFNvZnR3YXJlIEF0dGVz
109+
dGF0aW9uIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOue
110+
efhCY1msyyqRTImGzHCtkGaTgqlzJhP+rMv4ISdMIXSXSir+pblNf2bU4GUQZjW8
111+
U7ego6ZxWD7bPhGuEBSjZjBkMB0GA1UdDgQWBBQ//KzWGrE6noEguNUlHMVlux6R
112+
qTAfBgNVHSMEGDAWgBTIrel3TEXDo88NFhDkeUM6IVowzzASBgNVHRMBAf8ECDAG
113+
AQH/AgEAMA4GA1UdDwEB/wQEAwIChDAKBggqhkjOPQQDAgNIADBFAiBLipt77oK8
114+
wDOHri/AiZi03cONqycqRZ9pDMfDktQPjgIhAO7aAV229DLp1IQ7YkyUBO86fMy9
115+
Xvsiu+f+uXc/WT/7
116+
-----END CERTIFICATE-----""";
113117

114118
certs_EC.add(parseCert(str));
115119

116120
str = """
117-
-----BEGIN CERTIFICATE-----
118-
MIICizCCAjKgAwIBAgIJAKIFntEOQ1tXMAoGCCqGSM49BAMCMIGYMQswCQYDVQQG
119-
EwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmll
120-
dzEVMBMGA1UECgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdBbmRyb2lkMTMwMQYD
121-
VQQDDCpBbmRyb2lkIEtleXN0b3JlIFNvZnR3YXJlIEF0dGVzdGF0aW9uIFJvb3Qw
122-
HhcNMTYwMTExMDA0MzUwWhcNMzYwMTA2MDA0MzUwWjCBmDELMAkGA1UEBhMCVVMx
123-
EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFTAT
124-
BgNVBAoMDEdvb2dsZSwgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEzMDEGA1UEAwwq
125-
QW5kcm9pZCBLZXlzdG9yZSBTb2Z0d2FyZSBBdHRlc3RhdGlvbiBSb290MFkwEwYH
126-
KoZIzj0CAQYIKoZIzj0DAQcDQgAE7l1ex+HA220Dpn7mthvsTWpdamguD/9/SQ59
127-
dx9EIm29sa/6FsvHrcV30lacqrewLVQBXT5DKyqO107sSHVBpKNjMGEwHQYDVR0O
128-
BBYEFMit6XdMRcOjzw0WEOR5QzohWjDPMB8GA1UdIwQYMBaAFMit6XdMRcOjzw0W
129-
EOR5QzohWjDPMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgKEMAoGCCqG
130-
SM49BAMCA0cAMEQCIDUho++LNEYenNVg8x1YiSBq3KNlQfYNns6KGYxmSGB7AiBN
131-
C/NR2TB8fVvaNTQdqEcbY6WFZTytTySn502vQX3xvw==
132-
-----END CERTIFICATE-----""";
121+
-----BEGIN CERTIFICATE-----
122+
MIICizCCAjKgAwIBAgIJAKIFntEOQ1tXMAoGCCqGSM49BAMCMIGYMQswCQYDVQQG
123+
EwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmll
124+
dzEVMBMGA1UECgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdBbmRyb2lkMTMwMQYD
125+
VQQDDCpBbmRyb2lkIEtleXN0b3JlIFNvZnR3YXJlIEF0dGVzdGF0aW9uIFJvb3Qw
126+
HhcNMTYwMTExMDA0MzUwWhcNMzYwMTA2MDA0MzUwWjCBmDELMAkGA1UEBhMCVVMx
127+
EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFTAT
128+
BgNVBAoMDEdvb2dsZSwgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEzMDEGA1UEAwwq
129+
QW5kcm9pZCBLZXlzdG9yZSBTb2Z0d2FyZSBBdHRlc3RhdGlvbiBSb290MFkwEwYH
130+
KoZIzj0CAQYIKoZIzj0DAQcDQgAE7l1ex+HA220Dpn7mthvsTWpdamguD/9/SQ59
131+
dx9EIm29sa/6FsvHrcV30lacqrewLVQBXT5DKyqO107sSHVBpKNjMGEwHQYDVR0O
132+
BBYEFMit6XdMRcOjzw0WEOR5QzohWjDPMB8GA1UdIwQYMBaAFMit6XdMRcOjzw0W
133+
EOR5QzohWjDPMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgKEMAoGCCqG
134+
SM49BAMCA0cAMEQCIDUho++LNEYenNVg8x1YiSBq3KNlQfYNns6KGYxmSGB7AiBN
135+
C/NR2TB8fVvaNTQdqEcbY6WFZTytTySn502vQX3xvw==
136+
-----END CERTIFICATE-----""";
133137

134138
certs_EC.add(parseCert(str));
135139

136140
str = """
137-
-----BEGIN CERTIFICATE-----
138-
MIICtjCCAh+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwYzELMAkGA1UEBhMCVVMx
139-
EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFTAT
140-
BgNVBAoMDEdvb2dsZSwgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDAeFw0xNjAxMDQx
141-
MjQwNTNaFw0zNTEyMzAxMjQwNTNaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApD
142-
YWxpZm9ybmlhMRUwEwYDVQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJv
143-
aWQxKTAnBgNVBAMMIEFuZHJvaWQgU29mdHdhcmUgQXR0ZXN0YXRpb24gS2V5MIGf
144-
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAgyPcVogbuDAgafWwhWHG7r5/BeL1
145-
qEIEir6LR752/q7yXPKbKvoyABQWAUKZiaFfz8aBXrNjWDwv0vIL5Jgyg92BSxbX
146-
4YVBeuVKvClqOm21wAQIO2jFVsHwIzmRZBmGTVC3TUCuykhMdzVsiVoMJ1q/rEmd
147-
XX0jYvKcXgLocQIDAQABo2YwZDAdBgNVHQ4EFgQU1AwQG/jNY7n3OVK1DhNcpteZ
148-
k4YwHwYDVR0jBBgwFoAUKfrxrMxN0kyWQCd1trDpMuUH/i4wEgYDVR0TAQH/BAgw
149-
BgEB/wIBADAOBgNVHQ8BAf8EBAMCAoQwDQYJKoZIhvcNAQELBQADgYEAni1IX4xn
150-
M9waha2Z11Aj6hTsQ7DhnerCI0YecrUZ3GAi5KVoMWwLVcTmnKItnzpPk2sxixZ4
151-
Fg2Iy9mLzICdhPDCJ+NrOPH90ecXcjFZNX2W88V/q52PlmEmT7K+gbsNSQQiis6f
152-
9/VCLiVE+iEHElqDtVWtGIL4QBSbnCBjBH8=
153-
-----END CERTIFICATE-----""";
141+
-----BEGIN CERTIFICATE-----
142+
MIICtjCCAh+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwYzELMAkGA1UEBhMCVVMx
143+
EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFTAT
144+
BgNVBAoMDEdvb2dsZSwgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDAeFw0xNjAxMDQx
145+
MjQwNTNaFw0zNTEyMzAxMjQwNTNaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApD
146+
YWxpZm9ybmlhMRUwEwYDVQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJv
147+
aWQxKTAnBgNVBAMMIEFuZHJvaWQgU29mdHdhcmUgQXR0ZXN0YXRpb24gS2V5MIGf
148+
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAgyPcVogbuDAgafWwhWHG7r5/BeL1
149+
qEIEir6LR752/q7yXPKbKvoyABQWAUKZiaFfz8aBXrNjWDwv0vIL5Jgyg92BSxbX
150+
4YVBeuVKvClqOm21wAQIO2jFVsHwIzmRZBmGTVC3TUCuykhMdzVsiVoMJ1q/rEmd
151+
XX0jYvKcXgLocQIDAQABo2YwZDAdBgNVHQ4EFgQU1AwQG/jNY7n3OVK1DhNcpteZ
152+
k4YwHwYDVR0jBBgwFoAUKfrxrMxN0kyWQCd1trDpMuUH/i4wEgYDVR0TAQH/BAgw
153+
BgEB/wIBADAOBgNVHQ8BAf8EBAMCAoQwDQYJKoZIhvcNAQELBQADgYEAni1IX4xn
154+
M9waha2Z11Aj6hTsQ7DhnerCI0YecrUZ3GAi5KVoMWwLVcTmnKItnzpPk2sxixZ4
155+
Fg2Iy9mLzICdhPDCJ+NrOPH90ecXcjFZNX2W88V/q52PlmEmT7K+gbsNSQQiis6f
156+
9/VCLiVE+iEHElqDtVWtGIL4QBSbnCBjBH8=
157+
-----END CERTIFICATE-----""";
154158

155159
certs_RSA.add(parseCert(str));
156160

157161
str = """
158-
-----BEGIN CERTIFICATE-----
159-
MIICpzCCAhCgAwIBAgIJAP+U2d2fB8gMMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV
160-
BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW
161-
aWV3MRUwEwYDVQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJvaWQwHhcN
162-
MTYwMTA0MTIzMTA4WhcNMzUxMjMwMTIzMTA4WjBjMQswCQYDVQQGEwJVUzETMBEG
163-
A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEVMBMGA1UE
164-
CgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdBbmRyb2lkMIGfMA0GCSqGSIb3DQEB
165-
AQUAA4GNADCBiQKBgQCia63rbi5EYe/VDoLmt5TRdSMfd5tjkWP/96r/C3JHTsAs
166-
Q+wzfNes7UA+jCigZtX3hwszl94OuE4TQKuvpSe/lWmgMdsGUmX4RFlXYfC78hdL
167-
t0GAZMAoDo9Sd47b0ke2RekZyOmLw9vCkT/X11DEHTVm+Vfkl5YLCazOkjWFmwID
168-
AQABo2MwYTAdBgNVHQ4EFgQUKfrxrMxN0kyWQCd1trDpMuUH/i4wHwYDVR0jBBgw
169-
FoAUKfrxrMxN0kyWQCd1trDpMuUH/i4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
170-
Af8EBAMCAoQwDQYJKoZIhvcNAQELBQADgYEAT3LzNlmNDsG5dFsxWfbwjSVJMJ6j
171-
HBwp0kUtILlNX2S06IDHeHqcOd6os/W/L3BfRxBcxebrTQaZYdKumgf/93y4q+uc
172-
DyQHXrF/unlx/U1bnt8Uqf7f7XzAiF343ZtkMlbVNZriE/mPzsF83O+kqrJVw4Op
173-
Lvtc9mL1J1IXvmM=
174-
-----END CERTIFICATE-----""";
162+
-----BEGIN CERTIFICATE-----
163+
MIICpzCCAhCgAwIBAgIJAP+U2d2fB8gMMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV
164+
BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW
165+
aWV3MRUwEwYDVQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJvaWQwHhcN
166+
MTYwMTA0MTIzMTA4WhcNMzUxMjMwMTIzMTA4WjBjMQswCQYDVQQGEwJVUzETMBEG
167+
A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEVMBMGA1UE
168+
CgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdBbmRyb2lkMIGfMA0GCSqGSIb3DQEB
169+
AQUAA4GNADCBiQKBgQCia63rbi5EYe/VDoLmt5TRdSMfd5tjkWP/96r/C3JHTsAs
170+
Q+wzfNes7UA+jCigZtX3hwszl94OuE4TQKuvpSe/lWmgMdsGUmX4RFlXYfC78hdL
171+
t0GAZMAoDo9Sd47b0ke2RekZyOmLw9vCkT/X11DEHTVm+Vfkl5YLCazOkjWFmwID
172+
AQABo2MwYTAdBgNVHQ4EFgQUKfrxrMxN0kyWQCd1trDpMuUH/i4wHwYDVR0jBBgw
173+
FoAUKfrxrMxN0kyWQCd1trDpMuUH/i4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
174+
Af8EBAMCAoQwDQYJKoZIhvcNAQELBQADgYEAT3LzNlmNDsG5dFsxWfbwjSVJMJ6j
175+
HBwp0kUtILlNX2S06IDHeHqcOd6os/W/L3BfRxBcxebrTQaZYdKumgf/93y4q+uc
176+
DyQHXrF/unlx/U1bnt8Uqf7f7XzAiF343ZtkMlbVNZriE/mPzsF83O+kqrJVw4Op
177+
Lvtc9mL1J1IXvmM=
178+
-----END CERTIFICATE-----""";
175179

176180
certs_RSA.add(parseCert(str));
177181

@@ -409,7 +413,69 @@ private static Certificate hackLeafExistingCert(Certificate certificate) {
409413
return certificate;
410414
}
411415

412-
public static void hook(XC_LoadPackage.LoadPackageParam lpparam) {
416+
private static void parseBootloaderSpooferXml(String xmlContent) throws Throwable {
417+
418+
// Create DOM parser
419+
javax.xml.parsers.DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
420+
javax.xml.parsers.DocumentBuilder builder = factory.newDocumentBuilder();
421+
org.w3c.dom.Document doc = builder.parse(new org.xml.sax.InputSource(new java.io.StringReader(xmlContent)));
422+
423+
// Extract EC key
424+
org.w3c.dom.NodeList ecKeys = doc.getElementsByTagName("Key");
425+
for (int i = 0; i < ecKeys.getLength(); i++) {
426+
org.w3c.dom.Element keyElement = (org.w3c.dom.Element) ecKeys.item(i);
427+
String algorithm = keyElement.getAttribute("algorithm");
428+
429+
// Get private key
430+
org.w3c.dom.NodeList privateKeyNodes = keyElement.getElementsByTagName("PrivateKey");
431+
if (privateKeyNodes.getLength() > 0) {
432+
String privateKeyContent = privateKeyNodes.item(0).getTextContent().replaceAll("\s{2,}", "");
433+
434+
// Get certificate chain
435+
org.w3c.dom.NodeList certChainNodes = keyElement.getElementsByTagName("CertificateChain");
436+
if (certChainNodes.getLength() > 0) {
437+
org.w3c.dom.Element certChainElement = (org.w3c.dom.Element) certChainNodes.item(0);
438+
org.w3c.dom.NodeList certificateNodes = certChainElement.getElementsByTagName("Certificate");
439+
440+
if ("ecdsa".equals(algorithm) || "ec".equals(algorithm)) {
441+
keyPair_EC = parseKeyPair(privateKeyContent);
442+
certs_EC.clear();
443+
444+
for (int j = 0; j < certificateNodes.getLength(); j++) {
445+
String certContent = certificateNodes.item(j).getTextContent().replaceAll("\s{2,}", "");
446+
certs_EC.add(parseCert(certContent));
447+
}
448+
} else if ("rsa".equals(algorithm)) {
449+
keyPair_RSA = parseKeyPair(privateKeyContent);
450+
certs_RSA.clear();
451+
452+
for (int j = 0; j < certificateNodes.getLength(); j++) {
453+
String certContent = certificateNodes.item(j).getTextContent().replaceAll("\s{2,}", "");
454+
;
455+
certs_RSA.add(parseCert(certContent));
456+
}
457+
}
458+
}
459+
}
460+
}
461+
}
462+
463+
public static void hook(ClassLoader loader, XSharedPreferences prefs) {
464+
465+
boolean useCustomSpoofer = prefs.getBoolean("bootloader_spoofer_custom", false);
466+
if (useCustomSpoofer) {
467+
String xmlContent = prefs.getString("bootloader_spoofer_xml", "");
468+
if (!xmlContent.isEmpty()) {
469+
try {
470+
parseBootloaderSpooferXml(xmlContent);
471+
XposedBridge.log("Successfully loaded custom bootloader spoofer keys");
472+
} catch (Throwable t) {
473+
XposedBridge.log(t);
474+
Utils.showToast("Error parsing custom bootloader spoofer XML: " + t.getMessage(), 1);
475+
}
476+
}
477+
}
478+
413479

414480
final var systemFeatureHook = new XC_MethodHook() {
415481
@Override
@@ -431,8 +497,8 @@ else if ("android.software.device_id_attestation".equals(featureName))
431497
Class<?> PackageManagerClass, SharedPreferencesClass;
432498

433499
if (app == null) {
434-
PackageManagerClass = XposedHelpers.findClass("android.app.ApplicationPackageManager", lpparam.classLoader);
435-
SharedPreferencesClass = XposedHelpers.findClass("android.app.SharedPreferencesImpl", lpparam.classLoader);
500+
PackageManagerClass = XposedHelpers.findClass("android.app.ApplicationPackageManager", loader);
501+
SharedPreferencesClass = XposedHelpers.findClass("android.app.SharedPreferencesImpl", loader);
436502
} else {
437503
PackageManagerClass = app.getPackageManager().getClass();
438504
SharedPreferencesClass = app.getSharedPreferences("settings", Context.MODE_PRIVATE).getClass();

app/src/main/res/xml/preference_general_home.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,17 @@
4343
android:title="@string/bootloader_spoofer"
4444
app:key="bootloader_spoofer" />
4545

46+
<rikka.material.preference.MaterialSwitchPreference
47+
android:summary="@string/bootloader_spoofer_sum"
48+
android:title="Enable Custom KeyBox"
49+
app:key="bootloader_spoofer_custom" />
50+
51+
<com.wmods.wppenhacer.preference.FileReaderPreference
52+
android:key="bootloader_spoofer_xml"
53+
android:dependency="bootloader_spoofer_custom"
54+
android:title="Use Custom keybox.xml file"
55+
android:summary="No file selected" />
56+
4657
<rikka.material.preference.MaterialSwitchPreference
4758
app:key="ampm"
4859
app:title="@string/ampm" />

0 commit comments

Comments
 (0)