v3.5
This commit is contained in:
parent
14fbf4e87d
commit
90f15b4aca
|
@ -11,8 +11,8 @@ android {
|
|||
applicationId "es.chiteroman.bootloaderspoofer"
|
||||
minSdk 26
|
||||
targetSdk 34
|
||||
versionCode 34
|
||||
versionName '3.4'
|
||||
versionCode 35
|
||||
versionName '3.5'
|
||||
multiDexEnabled false
|
||||
}
|
||||
|
||||
|
@ -34,5 +34,5 @@ android {
|
|||
|
||||
dependencies {
|
||||
compileOnly 'de.robv.android.xposed:api:82'
|
||||
implementation 'org.bouncycastle:bcpkix-jdk18on:1.77'
|
||||
implementation 'com.madgag.spongycastle:bcpkix-jdk15on:1.58.0.0'
|
||||
}
|
||||
|
|
|
@ -0,0 +1,242 @@
|
|||
package es.chiteroman.bootloaderspoofer;
|
||||
|
||||
public class Keybox {
|
||||
public static final String XML = """
|
||||
<?xml version="1.0"?>
|
||||
<AndroidAttestation>
|
||||
<NumberOfKeyboxes>1</NumberOfKeyboxes>
|
||||
<Keybox DeviceID="X705F100000000">
|
||||
<Key algorithm="ecdsa">
|
||||
<PrivateKey format="pem">
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIA2Pc+RjAdMyqaCpctIuSyCGhsPnTHPeOxhM7QmGb1gNoAoGCCqGSM49
|
||||
AwEHoUQDQgAEWu/pudQWIK+TPC7f9dftyxq5te8xMChNHYALeeiB6zk8laiG9zu9
|
||||
cae9EY763/thIoZQXQTVQK43+QHcKnOetQ==
|
||||
-----END EC PRIVATE KEY-----
|
||||
</PrivateKey>
|
||||
<CertificateChain>
|
||||
<NumberOfCertificates>3</NumberOfCertificates>
|
||||
<Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICJTCCAaugAwIBAgIKEJl1VCCDF2mHUzAKBggqhkjOPQQDAjApMRkwFwYDVQQF
|
||||
ExA4YWJlMWM3NWRjMWNkNTk5MQwwCgYDVQQMDANURUUwHhcNMTgwNDE4MjEzMzQ5
|
||||
WhcNMjgwNDE1MjEzMzQ5WjApMRkwFwYDVQQFExA2MGYyMjlmMTlmY2EzYTA0MQww
|
||||
CgYDVQQMDANURUUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARa7+m51BYgr5M8
|
||||
Lt/11+3LGrm17zEwKE0dgAt56IHrOTyVqIb3O71xp70Rjvrf+2EihlBdBNVArjf5
|
||||
Adwqc561o4G6MIG3MB0GA1UdDgQWBBSriAVmksHYWuCRLlDvR47MzfcUfDAfBgNV
|
||||
HSMEGDAWgBSQv/MlEz9XMxBFdPp9W+RNB1737TAPBgNVHRMBAf8EBTADAQH/MA4G
|
||||
A1UdDwEB/wQEAwICBDBUBgNVHR8ETTBLMEmgR6BFhkNodHRwczovL2FuZHJvaWQu
|
||||
Z29vZ2xlYXBpcy5jb20vYXR0ZXN0YXRpb24vY3JsLzEwOTk3NTU0MjA4MzE3Njk4
|
||||
NzUzMAoGCCqGSM49BAMCA2gAMGUCMQDx5cRqI58iDdXLDkD0rvh1fjOSmejV5NCH
|
||||
+KX5A2mZLzxxy8QkW3szHck0qvarVK0CMGDi3tjaKLiM3rPHyAJmltRDIvLZejwz
|
||||
R+0oP0cs/vld5xBZSoXbvjCPe39IQryn7Q==
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate>
|
||||
<Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIID0TCCAbmgAwIBAgIKA4gmZ2BliZaFkTANBgkqhkiG9w0BAQsFADAbMRkwFwYD
|
||||
VQQFExBmOTIwMDllODUzYjZiMDQ1MB4XDTE4MDQxODIxMTQ1NloXDTI4MDQxNTIx
|
||||
MTQ1NlowKTEZMBcGA1UEBRMQOGFiZTFjNzVkYzFjZDU5OTEMMAoGA1UEDAwDVEVF
|
||||
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiejPFIryi9AYM9zV6pGpIFaVpPgdB+zI
|
||||
jJSPgDcZkeDL5Y9Sie0/aAopayrp5UYs+zxRKHIZjAXS9HWOzGg/PIxBa1Fl0tRz
|
||||
HPLGiW1BIrc8pEK+6AJ429QTJoSn4h/No4G2MIGzMB0GA1UdDgQWBBSQv/MlEz9X
|
||||
MxBFdPp9W+RNB1737TAfBgNVHSMEGDAWgBQ2YeEAfIgFCVGLRGxH/xpMyepPEjAP
|
||||
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwICBDBQBgNVHR8ESTBHMEWgQ6BB
|
||||
hj9odHRwczovL2FuZHJvaWQuZ29vZ2xlYXBpcy5jb20vYXR0ZXN0YXRpb24vY3Js
|
||||
L0U4RkExOTYzMTREMkZBMTgwDQYJKoZIhvcNAQELBQADggIBAAt4xKMpMK52papq
|
||||
k/QhULlXzaJrYLfLOmvOo1oP4urFcZD7Usk7G2HNoJM2qg3qgjawcUrAov7ZNekl
|
||||
Uc8ZSozY3yJiHGGNRNezXDDPnj+v+XAjE5I46iG3WoZvMYaa0GK5qNMf9v1/UScN
|
||||
D517vhSJIuFjsZjZOHbS83dit7JOoJ/e+5WnLdgdvMpixgkvXrp6Y9DlBFY5c2FY
|
||||
9i1MsPi9WDpylxAigB8g4bcZ0/fsMhLTUiGuenaS4c6TrKaqWBBcTtYdpECNJ+bE
|
||||
FowbW9nxOaI88deIxnldvFpms9XZw/amAx8y2hwoC5kLzhAAcjIidn2oKiTQr1zI
|
||||
C2iVnFWyE8z+T7s//KKfzYLFm5h9YdW7n87j3PkRW5zZOVUzg2a5n/ME8qbCdYQV
|
||||
Qe2ouog4Z/Tu/dwocEeH1jQaiAjqtliiLyJD0XaFqxvGf49IyRFuxq5eK5EAx2Cv
|
||||
GoJLFqL2jIvxdSyOxd58s6I9EnomS6hFWsmwNsuVKxFtnI+Okv1mLm4C8qwVxx6f
|
||||
SQBUJTtUmK/hliL42cjtAfHqVyYM4xV7F8MP10ncEB0hG2yua5g5Y4Ds3wcVIp5Z
|
||||
USgFL9I0raZrb91fJPYetHbb/rrSRp/h805f7Ilf2cApZenzlgcf8JzZ2PuKxWsA
|
||||
a/UNhoh2zVkWkGJr00lp8Df1RYXM
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate>
|
||||
<Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate>
|
||||
</CertificateChain>
|
||||
</Key>
|
||||
<Key algorithm="rsa">
|
||||
<PrivateKey format="pem">
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
||||
</PrivateKey>
|
||||
<CertificateChain>
|
||||
<NumberOfCertificates>3</NumberOfCertificates>
|
||||
<Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFETCCAvmgAwIBAgIKEjZQKHdTV5RDkjANBgkqhkiG9w0BAQsFADApMRkwFwYD
|
||||
VQQFExA4YWJlMWM3NWRjMWNkNTk5MQwwCgYDVQQMDANURUUwHhcNMTgwNDE4MjEz
|
||||
MzM3WhcNMjgwNDE1MjEzMzM3WjApMRkwFwYDVQQFExA2MGYyMjlmMTlmY2EzYTA0
|
||||
MQwwCgYDVQQMDANURUUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDj
|
||||
oKewKGOtMkr7EEYmY+fTpYnqh87E8Z0tWCdfkhlxAxjX2HE0Uxa0sCJ0xZjreHZT
|
||||
ooQvR5NhMDVjnUf+goQ8I9/9t7ITM3njPP9yjMuU+CeBC5VM0RocVry5Xd/nGdC8
|
||||
UMzFb0sQs1L1HvnOVQuOK08vS40P9MAu4GedBbh0/GisY/1vTpQCHc42ABweWxKH
|
||||
vnmgtl79Hq4Qj9zDoMRQHo+hAMs9P+QUet6qkntmPNTfBV4sRgyL+Dlza+TdmfdU
|
||||
e/XSB7Ux9uY4qADWfTVW7TBclLTfwSLNcFR1+4obIhcFcv7/j8rzunSgvc+TB0B+
|
||||
ZYM4znldoxEx4hn/oVaxW9NmrLM9vNw3UQiaEy86xMCcPNZCSjIVwjw/zc4Xbgm8
|
||||
DVVBu8ip0pY9MGD2wV9EWP2bfGv+rsQGOD5UeT0pc+/v8LizN8lLDGnWtvzn1uCY
|
||||
c/cFsMNhGWFf6v4dXSPlmQtJvHUnXSoe4hyD2Vq/JLABNqLXXHeVxyO1FO6qaycC
|
||||
AwEAAaOBujCBtzAdBgNVHQ4EFgQUmbr9kYSB6NcHyyQQCTzuCX8sZQIwHwYDVR0j
|
||||
BBgwFoAUTPvLka8NVNWeiOjUoimnhWNHDLUwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
|
||||
HQ8BAf8EBAMCAgQwVAYDVR0fBE0wSzBJoEegRYZDaHR0cHM6Ly9hbmRyb2lkLmdv
|
||||
b2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8xMjM2NTAyODc3NTM1Nzk0NDM5
|
||||
MjANBgkqhkiG9w0BAQsFAAOCAgEAqVwxi6MFNhvQ3VqvxPwlDniWwd2o/6wPrk3J
|
||||
xtGbYtTi6e++aWDnR8o6SGCsbN+A3bSI2Va2xvkLiS0j3F19SfVdknXEUG9p5Z7M
|
||||
bQ4m1dTH4Ch32r+YVde4UEZmkiMizirrAVct9jkruIPXNrzOHH5rOkMmREdVFcBk
|
||||
g7V67NpXF6JcR5+RNw+mOmZO0MMPE/HviUUkAMXQYPmMhtcFYuYhB4Y6w3+LVWAw
|
||||
kKJ2UBxZjEYih4Db5iWwZDhC1lO6aCNEaC/xcVIIQt0rdwlQ/F9Uz3Zkb+tTGYP7
|
||||
CNB8cxugqlBPphVqIxZcngcPSI2f5/QQ1yV4G7os3p3grKDihXQtI3iyeO0grmkc
|
||||
DzopKfo6WdTl9jcpb0LVUMeVbSXJ9Dfrk3moFeueBOxSMDAWMXHP4Ma4MSBQwViS
|
||||
e4h6D2uL0VefBw8vKhXTCb1VESlGuncNu9PrBF1uFqO6pxUvjjzmijCgrvVbGWiM
|
||||
YPWsToiK40S3DpKL6dI4b3QJM2hvqfhboceD2CO4+i96iR3ODo3ongsGOe2L9UC2
|
||||
V98HvnCy+LClFrk23Laq5WJkVZq2bS5RAfkc4fzf6DGfNpMp/Pj+z12E+FlPBIuQ
|
||||
oeDdHD87ogaMbMug/VrJRPMSO5pDFg9GUQmGjCwI0nFDQcrnWfNxm//3bK/iAmgZ
|
||||
yeUhJXg=
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate>
|
||||
<Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
9CyCxsjOYp45mn6Um/+dbYjSZw==
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate>
|
||||
<Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate>
|
||||
</CertificateChain>
|
||||
</Key>
|
||||
</Keybox>
|
||||
</AndroidAttestation>""";
|
||||
}
|
|
@ -3,53 +3,52 @@ package es.chiteroman.bootloaderspoofer;
|
|||
import android.security.keystore.KeyGenParameterSpec;
|
||||
import android.security.keystore.KeyProperties;
|
||||
|
||||
import org.bouncycastle.asn1.ASN1Boolean;
|
||||
import org.bouncycastle.asn1.ASN1Encodable;
|
||||
import org.bouncycastle.asn1.ASN1Enumerated;
|
||||
import org.bouncycastle.asn1.ASN1Integer;
|
||||
import org.bouncycastle.asn1.ASN1Null;
|
||||
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
|
||||
import org.bouncycastle.asn1.ASN1OctetString;
|
||||
import org.bouncycastle.asn1.ASN1Sequence;
|
||||
import org.bouncycastle.asn1.DERNull;
|
||||
import org.bouncycastle.asn1.DEROctetString;
|
||||
import org.bouncycastle.asn1.DLSequence;
|
||||
import org.bouncycastle.asn1.DLSet;
|
||||
import org.bouncycastle.asn1.DLTaggedObject;
|
||||
import org.bouncycastle.asn1.x500.X500Name;
|
||||
import org.bouncycastle.asn1.x509.Extension;
|
||||
import org.bouncycastle.cert.X509CertificateHolder;
|
||||
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
|
||||
import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder;
|
||||
import org.bouncycastle.openssl.PEMKeyPair;
|
||||
import org.bouncycastle.openssl.PEMParser;
|
||||
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
|
||||
import org.bouncycastle.operator.ContentSigner;
|
||||
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
|
||||
import org.spongycastle.asn1.ASN1Boolean;
|
||||
import org.spongycastle.asn1.ASN1Encodable;
|
||||
import org.spongycastle.asn1.ASN1Enumerated;
|
||||
import org.spongycastle.asn1.ASN1Integer;
|
||||
import org.spongycastle.asn1.ASN1ObjectIdentifier;
|
||||
import org.spongycastle.asn1.ASN1OctetString;
|
||||
import org.spongycastle.asn1.ASN1Sequence;
|
||||
import org.spongycastle.asn1.DERNull;
|
||||
import org.spongycastle.asn1.DEROctetString;
|
||||
import org.spongycastle.asn1.DERSequence;
|
||||
import org.spongycastle.asn1.DERSet;
|
||||
import org.spongycastle.asn1.DERTaggedObject;
|
||||
import org.spongycastle.asn1.x500.X500Name;
|
||||
import org.spongycastle.asn1.x509.Extension;
|
||||
import org.spongycastle.asn1.x509.KeyUsage;
|
||||
import org.spongycastle.cert.X509CertificateHolder;
|
||||
import org.spongycastle.cert.jcajce.JcaX509CertificateConverter;
|
||||
import org.spongycastle.cert.jcajce.JcaX509v3CertificateBuilder;
|
||||
import org.spongycastle.openssl.PEMKeyPair;
|
||||
import org.spongycastle.openssl.PEMParser;
|
||||
import org.spongycastle.openssl.jcajce.JcaPEMKeyConverter;
|
||||
import org.spongycastle.operator.ContentSigner;
|
||||
import org.spongycastle.operator.jcajce.JcaContentSignerBuilder;
|
||||
import org.spongycastle.util.io.pem.PemObject;
|
||||
import org.spongycastle.util.io.pem.PemReader;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.math.BigInteger;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.KeyPair;
|
||||
import java.security.KeyPairGenerator;
|
||||
import java.security.KeyPairGeneratorSpi;
|
||||
import java.security.KeyStore;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.KeyStoreSpi;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.security.SecureRandom;
|
||||
import java.security.cert.Certificate;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.Deque;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
@ -62,101 +61,79 @@ import de.robv.android.xposed.XposedHelpers;
|
|||
import de.robv.android.xposed.callbacks.XC_LoadPackage;
|
||||
|
||||
public final class Xposed implements IXposedHookLoadPackage {
|
||||
private static final SecureRandom random = new SecureRandom();
|
||||
private static final Deque<Certificate> EC_CERTS = new ArrayDeque<>(3);
|
||||
private static final Deque<Certificate> RSA_CERTS = new ArrayDeque<>(3);
|
||||
private static byte[] attestationChallengeBytes = new byte[0];
|
||||
private static KeyPair EC_KEYPAIR, RSA_KEYPAIR;
|
||||
private static String MODULE_PATH;
|
||||
private static final Map<KeyPair, Certificate[]> map = new HashMap<>();
|
||||
private static byte[] attestationChallengeBytes = new byte[1];
|
||||
private static KeyPair keyPair;
|
||||
|
||||
static {
|
||||
int numberOfCerts = 0;
|
||||
|
||||
private static void loadKeyBox() {
|
||||
try {
|
||||
EC_CERTS.clear();
|
||||
RSA_CERTS.clear();
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
Document document = builder.parse(new ByteArrayInputStream(Keybox.XML.getBytes()));
|
||||
|
||||
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
|
||||
NodeList keyList = document.getElementsByTagName("Key");
|
||||
|
||||
Document doc = dBuilder.parse(new ByteArrayInputStream(KEYBOX.getBytes(StandardCharsets.UTF_8)));
|
||||
doc.getDocumentElement().normalize();
|
||||
for (int i = 0; i < keyList.getLength(); i++) {
|
||||
Node keyNode = keyList.item(i);
|
||||
if (keyNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
Element keyElement = (Element) keyNode;
|
||||
|
||||
Element rootElement = doc.getDocumentElement();
|
||||
String privateKeyPEM = keyElement.getElementsByTagName("PrivateKey").item(0).getTextContent();
|
||||
KeyPair keyPair = parseKeyPair(privateKeyPEM);
|
||||
|
||||
int numberOfKeyboxes = Integer.parseInt(rootElement.getElementsByTagName("NumberOfKeyboxes").item(0).getTextContent());
|
||||
XposedBridge.log("Number of Keyboxes: " + numberOfKeyboxes);
|
||||
NodeList certificateNodes = keyElement.getElementsByTagName("Certificate");
|
||||
|
||||
NodeList keyboxList = rootElement.getElementsByTagName("Keybox");
|
||||
for (int i = 0; i < keyboxList.getLength(); i++) {
|
||||
Node keyboxNode = keyboxList.item(i);
|
||||
if (keyboxNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
Element keyboxElement = (Element) keyboxNode;
|
||||
String deviceId = keyboxElement.getAttribute("DeviceID");
|
||||
XposedBridge.log("Device ID: " + deviceId);
|
||||
int certs = certificateNodes.getLength();
|
||||
|
||||
NodeList keyList = keyboxElement.getElementsByTagName("Key");
|
||||
for (int j = 0; j < keyList.getLength(); j++) {
|
||||
Node keyNode = keyList.item(j);
|
||||
if (keyNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
Element keyElement = (Element) keyNode;
|
||||
Certificate[] certificates = new Certificate[certs];
|
||||
|
||||
String algorithm = keyElement.getAttribute("algorithm");
|
||||
|
||||
Element privateKeyElement = (Element) keyElement.getElementsByTagName("PrivateKey").item(0);
|
||||
String privateKey = privateKeyElement.getTextContent();
|
||||
|
||||
if ("ecdsa".equals(algorithm)) EC_KEYPAIR = parsePrivateKey(privateKey);
|
||||
else if ("rsa".equals(algorithm))
|
||||
RSA_KEYPAIR = parsePrivateKey(privateKey);
|
||||
|
||||
NodeList certList = keyElement.getElementsByTagName("Certificate");
|
||||
for (int k = 0; k < certList.getLength(); k++) {
|
||||
Node certNode = certList.item(k);
|
||||
if (certNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
Element certElement = (Element) certNode;
|
||||
String certValue = certElement.getTextContent();
|
||||
|
||||
if ("ecdsa".equals(algorithm))
|
||||
EC_CERTS.add(parseCert(certValue));
|
||||
else if ("rsa".equals(algorithm))
|
||||
RSA_CERTS.add(parseCert(certValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int j = 0; j < certs; j++) {
|
||||
String certificatePEM = certificateNodes.item(j).getTextContent();
|
||||
Certificate certificate = parseCert(certificatePEM);
|
||||
certificates[j] = certificate;
|
||||
}
|
||||
|
||||
map.put(keyPair, certificates);
|
||||
|
||||
numberOfCerts += certs;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
XposedBridge.log("[BootloaderSpoofer] ERROR: " + e);
|
||||
throw new RuntimeException();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
XposedBridge.log("[BootloaderSpoofer] Loaded " + map.size() + " keys!");
|
||||
XposedBridge.log("[BootloaderSpoofer] Loaded " + numberOfCerts + " certificates!");
|
||||
}
|
||||
|
||||
private static KeyPair parsePrivateKey(String key) throws IOException {
|
||||
key = key.trim();
|
||||
private static KeyPair parseKeyPair(String key) throws Exception {
|
||||
Object object;
|
||||
try (PEMParser parser = new PEMParser(new StringReader(key))) {
|
||||
object = parser.readObject();
|
||||
}
|
||||
|
||||
PEMParser parser = new PEMParser(new StringReader(key));
|
||||
Object o = parser.readObject();
|
||||
parser.close();
|
||||
|
||||
PEMKeyPair pemKeyPair = (PEMKeyPair) o;
|
||||
PEMKeyPair pemKeyPair = (PEMKeyPair) object;
|
||||
|
||||
return new JcaPEMKeyConverter().getKeyPair(pemKeyPair);
|
||||
}
|
||||
|
||||
private static Certificate parseCert(String cert) throws IOException, CertificateException {
|
||||
cert = cert.trim();
|
||||
private static Certificate parseCert(String cert) throws Exception {
|
||||
PemObject pemObject;
|
||||
try (PemReader reader = new PemReader(new StringReader(cert))) {
|
||||
pemObject = reader.readPemObject();
|
||||
}
|
||||
|
||||
PEMParser parser = new PEMParser(new StringReader(cert));
|
||||
Object o = parser.readObject();
|
||||
parser.close();
|
||||
|
||||
X509CertificateHolder holder = (X509CertificateHolder) o;
|
||||
X509CertificateHolder holder = new X509CertificateHolder(pemObject.getContent());
|
||||
|
||||
return new JcaX509CertificateConverter().getCertificate(holder);
|
||||
}
|
||||
|
||||
private static Extension addHackedExtension() {
|
||||
try {
|
||||
SecureRandom random = new SecureRandom();
|
||||
|
||||
byte[] bytes1 = new byte[32];
|
||||
byte[] bytes2 = new byte[32];
|
||||
|
||||
|
@ -165,54 +142,54 @@ public final class Xposed implements IXposedHookLoadPackage {
|
|||
|
||||
ASN1Encodable[] rootOfTrustEncodables = {new DEROctetString(bytes1), ASN1Boolean.TRUE, new ASN1Enumerated(0), new DEROctetString(bytes2)};
|
||||
|
||||
ASN1Sequence rootOfTrustSeq = new DLSequence(rootOfTrustEncodables);
|
||||
ASN1Sequence rootOfTrustSeq = new DERSequence(rootOfTrustEncodables);
|
||||
|
||||
ASN1Integer[] purposesArray = {new ASN1Integer(2), new ASN1Integer(3)};
|
||||
|
||||
DLSet Apurpose = new DLSet(purposesArray);
|
||||
ASN1Integer Aalgorithm = new ASN1Integer(3);
|
||||
ASN1Integer AkeySize = new ASN1Integer(256);
|
||||
ASN1Integer AecCurve = new ASN1Integer(1);
|
||||
ASN1Null AnoAuthRequired = DERNull.INSTANCE;
|
||||
ASN1Integer AosVersion = new ASN1Integer(140000);
|
||||
ASN1Integer AosPatchLevel = new ASN1Integer(202312);
|
||||
ASN1Integer AvendorPatchLevel = new ASN1Integer(20231217);
|
||||
ASN1Integer AbootPatchLevel = new ASN1Integer(20231217);
|
||||
ASN1Encodable[] digests = {new ASN1Integer(4)};
|
||||
|
||||
ASN1Integer AcreationDateTime = new ASN1Integer(System.currentTimeMillis());
|
||||
ASN1Integer Aorigin = new ASN1Integer(0);
|
||||
var Apurpose = new DERSet(purposesArray);
|
||||
var Aalgorithm = new ASN1Integer(3);
|
||||
var AkeySize = new ASN1Integer(256);
|
||||
var Adigest = new DERSet(digests);
|
||||
var AecCurve = new ASN1Integer(1);
|
||||
var AnoAuthRequired = DERNull.INSTANCE;
|
||||
var AosVersion = new ASN1Integer(140000);
|
||||
var AosPatchLevel = new ASN1Integer(202312);
|
||||
|
||||
var purpose = new DLTaggedObject(true, 1, Apurpose);
|
||||
var algorithm = new DLTaggedObject(true, 2, Aalgorithm);
|
||||
var keySize = new DLTaggedObject(true, 3, AkeySize);
|
||||
var ecCurve = new DLTaggedObject(true, 10, AecCurve);
|
||||
var noAuthRequired = new DLTaggedObject(true, 503, AnoAuthRequired);
|
||||
var creationDateTime = new DLTaggedObject(true, 701, AcreationDateTime);
|
||||
var origin = new DLTaggedObject(true, 702, Aorigin);
|
||||
var rootOfTrust = new DLTaggedObject(true, 704, rootOfTrustSeq);
|
||||
var osVersion = new DLTaggedObject(true, 705, AosVersion);
|
||||
var osPatchLevel = new DLTaggedObject(true, 706, AosPatchLevel);
|
||||
var vendorPatchLevel = new DLTaggedObject(true, 718, AvendorPatchLevel);
|
||||
var bootPatchLevel = new DLTaggedObject(true, 719, AbootPatchLevel);
|
||||
var AcreationDateTime = new ASN1Integer(System.currentTimeMillis());
|
||||
var Aorigin = new ASN1Integer(0);
|
||||
|
||||
ASN1Encodable[] teeEnforcedEncodables = {purpose, algorithm, keySize, ecCurve, noAuthRequired, creationDateTime, origin, rootOfTrust, osVersion, osPatchLevel, vendorPatchLevel, bootPatchLevel};
|
||||
var purpose = new DERTaggedObject(true, 1, Apurpose);
|
||||
var algorithm = new DERTaggedObject(true, 2, Aalgorithm);
|
||||
var keySize = new DERTaggedObject(true, 3, AkeySize);
|
||||
var digest = new DERTaggedObject(true, 5, Adigest);
|
||||
var ecCurve = new DERTaggedObject(true, 10, AecCurve);
|
||||
var noAuthRequired = new DERTaggedObject(true, 503, AnoAuthRequired);
|
||||
var creationDateTime = new DERTaggedObject(true, 701, AcreationDateTime);
|
||||
var origin = new DERTaggedObject(true, 702, Aorigin);
|
||||
var rootOfTrust = new DERTaggedObject(true, 704, rootOfTrustSeq);
|
||||
var osVersion = new DERTaggedObject(true, 705, AosVersion);
|
||||
var osPatchLevel = new DERTaggedObject(true, 706, AosPatchLevel);
|
||||
|
||||
ASN1Integer attestationVersion = new ASN1Integer(4);
|
||||
ASN1Encodable[] teeEnforcedEncodables = {purpose, algorithm, keySize, digest, ecCurve, noAuthRequired, creationDateTime, origin, rootOfTrust, osVersion, osPatchLevel};
|
||||
|
||||
ASN1Integer attestationVersion = new ASN1Integer(200);
|
||||
ASN1Enumerated attestationSecurityLevel = new ASN1Enumerated(2);
|
||||
ASN1Integer keymasterVersion = new ASN1Integer(41);
|
||||
ASN1Integer keymasterVersion = new ASN1Integer(200);
|
||||
ASN1Enumerated keymasterSecurityLevel = new ASN1Enumerated(2);
|
||||
ASN1OctetString attestationChallenge = new DEROctetString(attestationChallengeBytes);
|
||||
ASN1OctetString uniqueId = new DEROctetString("".getBytes());
|
||||
ASN1Sequence softwareEnforced = new DLSequence();
|
||||
ASN1Sequence teeEnforced = new DLSequence(teeEnforcedEncodables);
|
||||
ASN1Sequence softwareEnforced = new DERSequence();
|
||||
ASN1Sequence teeEnforced = new DERSequence(teeEnforcedEncodables);
|
||||
|
||||
ASN1Encodable[] keyDescriptionEncodables = {attestationVersion, attestationSecurityLevel, keymasterVersion, keymasterSecurityLevel, attestationChallenge, uniqueId, softwareEnforced, teeEnforced};
|
||||
|
||||
ASN1Sequence keyDescriptionHackSeq = new DLSequence(keyDescriptionEncodables);
|
||||
ASN1Sequence keyDescriptionHackSeq = new DERSequence(keyDescriptionEncodables);
|
||||
|
||||
ASN1OctetString keyDescriptionOctetStr = new DEROctetString(keyDescriptionHackSeq);
|
||||
|
||||
return new Extension(new ASN1ObjectIdentifier("1.3.6.1.4.1.11129.2.1.17"), true, keyDescriptionOctetStr);
|
||||
return new Extension(new ASN1ObjectIdentifier("1.3.6.1.4.1.11129.2.1.17"), false, keyDescriptionOctetStr);
|
||||
|
||||
} catch (Exception e) {
|
||||
XposedBridge.log("[BootloaderSpoofer] Error create extensions: " + e);
|
||||
|
@ -223,11 +200,16 @@ public final class Xposed implements IXposedHookLoadPackage {
|
|||
|
||||
private static Certificate hackLeafCert() throws Exception {
|
||||
|
||||
var certBuilder = new JcaX509v3CertificateBuilder(new X500Name("CN=chiteroman"), new BigInteger(128, random), new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 365L * 24 * 60 * 60 * 1000), new X500Name("CN=Android Keystore Key"), RSA_KEYPAIR.getPublic());
|
||||
SecureRandom random = new SecureRandom();
|
||||
|
||||
var certBuilder = new JcaX509v3CertificateBuilder(new X500Name("CN=chiteroman"), new BigInteger(128, random), new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 365L * 24 * 60 * 60 * 1000), new X500Name("CN=Android Keystore Key"), keyPair.getPublic());
|
||||
|
||||
KeyUsage keyUsage = new KeyUsage(KeyUsage.keyCertSign);
|
||||
certBuilder.addExtension(Extension.keyUsage, true, keyUsage);
|
||||
|
||||
certBuilder.addExtension(addHackedExtension());
|
||||
|
||||
ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withRSA").build(RSA_KEYPAIR.getPrivate());
|
||||
ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withECDSA").build(keyPair.getPrivate());
|
||||
|
||||
X509CertificateHolder certHolder = certBuilder.build(contentSigner);
|
||||
|
||||
|
@ -235,43 +217,40 @@ public final class Xposed implements IXposedHookLoadPackage {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
|
||||
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
|
||||
|
||||
loadKeyBox();
|
||||
|
||||
Class<?> AndroidKeyStoreKeyPairGeneratorSpi = XposedHelpers.findClassIfExists("android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi", lpparam.classLoader);
|
||||
XposedHelpers.findAndHookMethod(AndroidKeyStoreKeyPairGeneratorSpi, "generateKeyPair", XC_MethodReplacement.returnConstant(RSA_KEYPAIR));
|
||||
|
||||
try {
|
||||
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
|
||||
XposedHelpers.findAndHookMethod(keyPairGenerator.getClass(), "generateKeyPair", XC_MethodReplacement.returnConstant(RSA_KEYPAIR));
|
||||
|
||||
keyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore");
|
||||
XposedHelpers.findAndHookMethod(keyPairGenerator.getClass(), "generateKeyPair", XC_MethodReplacement.returnConstant(RSA_KEYPAIR));
|
||||
|
||||
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
|
||||
|
||||
XposedBridge.log("[BootloaderSpoofer] ERROR: " + e);
|
||||
for (KeyPair pair : map.keySet()) {
|
||||
if (KeyProperties.KEY_ALGORITHM_EC.equals(pair.getPrivate().getAlgorithm())) {
|
||||
keyPair = pair;
|
||||
}
|
||||
}
|
||||
|
||||
Class<?> Builder = XposedHelpers.findClass(KeyGenParameterSpec.Builder.class.getName(), lpparam.classLoader);
|
||||
XposedHelpers.findAndHookMethod(Builder, "setAttestationChallenge", byte[].class, new XC_MethodHook() {
|
||||
Class<?> AndroidKeyStoreKeyPairGeneratorSpi = XposedHelpers.findClassIfExists("android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi", lpparam.classLoader);
|
||||
|
||||
if (AndroidKeyStoreKeyPairGeneratorSpi == null) {
|
||||
|
||||
KeyPairGeneratorSpi keyGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore");
|
||||
XposedHelpers.findAndHookMethod(keyGenerator.getClass(), "generateKeyPair", XC_MethodReplacement.returnConstant(keyPair));
|
||||
|
||||
} else {
|
||||
|
||||
XposedHelpers.findAndHookMethod(AndroidKeyStoreKeyPairGeneratorSpi, "generateKeyPair", XC_MethodReplacement.returnConstant(keyPair));
|
||||
}
|
||||
|
||||
XposedHelpers.findAndHookMethod(KeyGenParameterSpec.Builder.class, "setAttestationChallenge", byte[].class, new XC_MethodHook() {
|
||||
@Override
|
||||
protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) {
|
||||
protected void beforeHookedMethod(MethodHookParam param) {
|
||||
attestationChallengeBytes = (byte[]) param.args[0];
|
||||
XposedBridge.log("[BootloaderSpoofer] attestationChallenge: " + Arrays.toString(attestationChallengeBytes));
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
|
||||
keyStore.load(null);
|
||||
|
||||
KeyStoreSpi keyStoreSpi = (KeyStoreSpi) XposedHelpers.getObjectField(keyStore, "keyStoreSpi");
|
||||
XposedHelpers.findAndHookMethod(keyStoreSpi.getClass(), "engineGetCertificateChain", String.class, new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||
Deque<Certificate> certificates = new ArrayDeque<>(RSA_CERTS);
|
||||
LinkedList<Certificate> certificates = new LinkedList<>(Arrays.asList(map.get(keyPair)));
|
||||
|
||||
try {
|
||||
certificates.addFirst(hackLeafCert());
|
||||
|
@ -282,230 +261,8 @@ public final class Xposed implements IXposedHookLoadPackage {
|
|||
return certificates.toArray(new Certificate[0]);
|
||||
}
|
||||
});
|
||||
} catch (CertificateException | KeyStoreException | IOException |
|
||||
NoSuchAlgorithmException e) {
|
||||
|
||||
} catch (KeyStoreException e) {
|
||||
XposedBridge.log("[BootloaderSpoofer] ERROR: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
private static final String KEYBOX = """
|
||||
<?xml version="1.0"?>
|
||||
<AndroidAttestation>
|
||||
<NumberOfKeyboxes>1</NumberOfKeyboxes>
|
||||
<Keybox DeviceID="NUBIA_NX606J_AK_0000001"><Key algorithm="ecdsa"><PrivateKey format="pem">
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEINHUR+pr+/0UCLbjPYQq/2bw6JekJvor38TVlVAUMP5uoAoGCCqGSM49
|
||||
AwEHoUQDQgAE8QKCOumQkEdLnqps1h6aYQM/O4VREnhHF0tJ3pcQ0cfQS5WgnhzP
|
||||
OD5vloDit6xBGoUXs+QqtMEflqYClhCL/Q==
|
||||
-----END EC PRIVATE KEY-----
|
||||
</PrivateKey><CertificateChain><NumberOfCertificates>3</NumberOfCertificates><Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICKzCCAbKgAwIBAgIKAndWeGYmQ2cZQTAKBggqhkjOPQQDAjAbMRkwFwYDVQQF
|
||||
ExA1YjAzNTljY2E4ODc5Y2I1MB4XDTE2MDUyNjE2NTczNVoXDTI2MDUyNDE2NTcz
|
||||
NVowGzEZMBcGA1UEBRMQMzQ0NjZhZWI2Nzc3NmMyNzBZMBMGByqGSM49AgEGCCqG
|
||||
SM49AwEHA0IABPECgjrpkJBHS56qbNYemmEDPzuFURJ4RxdLSd6XENHH0EuVoJ4c
|
||||
zzg+b5aA4resQRqFF7PkKrTBH5amApYQi/2jgd0wgdowHQYDVR0OBBYEFN3jZFzm
|
||||
lLhaMqADvRaisWt1mMOFMB8GA1UdIwQYMBaAFAbd7gqSHZtx4caJQUTvOTlwJgA1
|
||||
MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMCQGA1UdHgQdMBugGTAXghVp
|
||||
bnZhbGlkO2VtYWlsOmludmFsaWQwVAYDVR0fBE0wSzBJoEegRYZDaHR0cHM6Ly9h
|
||||
bmRyb2lkLmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wMjc3NTY3ODY2
|
||||
MjY0MzY3MTk0MTAKBggqhkjOPQQDAgNnADBkAjAThg70bAjRwWEffDdAV7aarwB6
|
||||
mw4ccMG/0apN4/Bb6Jz4wyXUj4DxhtcTOIvVfrICMEiDdyXEsZZl8yrOGs6Z6XWJ
|
||||
Fd3EdZ5vLcC1+ZdSNNveJfW1u0+iP1WaDktKfTjvNw==
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate><Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDwzCCAaugAwIBAgIKA4gmZ2BliZaFczANBgkqhkiG9w0BAQsFADAbMRkwFwYD
|
||||
VQQFExBmOTIwMDllODUzYjZiMDQ1MB4XDTE2MDUyNjE2NDEyOVoXDTI2MDUyNDE2
|
||||
NDEyOVowGzEZMBcGA1UEBRMQNWIwMzU5Y2NhODg3OWNiNTB2MBAGByqGSM49AgEG
|
||||
BSuBBAAiA2IABHf4FUKTZivDuwdyVbXyPF12IRuDzZKq61MbqooE3/gx9gIS9pFS
|
||||
4NZgGTnjSMm6ltYrCv3sDzuPQls+V+BLPQgNfRHavmP9eulc1uR3GNgCnKqxB2o0
|
||||
QcTQGPAxJA81c6OBtjCBszAdBgNVHQ4EFgQUBt3uCpIdm3HhxolBRO85OXAmADUw
|
||||
HwYDVR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB
|
||||
/zAOBgNVHQ8BAf8EBAMCAYYwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cHM6Ly9hbmRy
|
||||
b2lkLmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC9FOEZBMTk2MzE0RDJG
|
||||
QTE4MA0GCSqGSIb3DQEBCwUAA4ICAQAsPFNbAeVGRXKg0H1Ixy31n+vc1GAtLTtd
|
||||
ruQGZ3rk6Dq3G5OiNfwLI4vRowDERgTr5RoVRMLs9HzTTCvvdEBhcILKOnaPAd6J
|
||||
g4HvBi8hsfbXEvRi2kmIfiYAabC71ErJLFEMprTJMSDEOe3lXCJG409z99ofsf/s
|
||||
1M1i77NFVCwstAvRLMjc9TjxRXrGrGD0rMdG2RkionXa3H+4cYqSUf7JCIW6dMB2
|
||||
p+4R3n463DqxxSJNGbchGGUbL6b0qIWdaVcwG2ro+WyItfyw5C4h9XSosauyC9aj
|
||||
jZLt8RAK2ouZHN/kyIXcD1U7IFbSy0SZfaRDLNCzse4iL6IOnuyITEFLnvLfcDSw
|
||||
NX1/ptBRAeeme7G1nwpeohJjiddmf20e421+n3tWUyUhLk9s83MJQQp+mhfApA1Q
|
||||
vz+a7M3OqPvHhBoeu6C4NOlYkb8mrjtuZ/RU5WIRXfyXZqA05Qnu8usuxxNFozU5
|
||||
hWbXIZQx7at2x/7t8/kgHSJhKs4hWIdbVgIDyWIhgoDD+gqTIRlzTwrS876dgy0M
|
||||
TZm1riMEBB5jvAhaeciDBf8u6AFWnMsS0UVtOinr5lTRkHSwie2n90kazqpkeMUd
|
||||
nbBSG7HSMhyg5lvem9G82NakH4S1EPgRBLN1eF8Q51ZmzeNl3DnIGGjNI+LAXw10
|
||||
KVuEkzgd8A==
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate><Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFYDCCA0igAwIBAgIJAOj6GWMU0voYMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
|
||||
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTYwNTI2MTYyODUyWhcNMjYwNTI0MTYy
|
||||
ODUyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
|
||||
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
|
||||
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
|
||||
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
|
||||
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
|
||||
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
|
||||
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
|
||||
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
|
||||
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
|
||||
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
|
||||
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
|
||||
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
|
||||
AGMCAwEAAaOBpjCBozAdBgNVHQ4EFgQUNmHhAHyIBQlRi0RsR/8aTMnqTxIwHwYD
|
||||
VR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB/zAO
|
||||
BgNVHQ8BAf8EBAMCAYYwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cHM6Ly9hbmRyb2lk
|
||||
Lmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wDQYJKoZIhvcNAQELBQAD
|
||||
ggIBACDIw41L3KlXG0aMiS//cqrG+EShHUGo8HNsw30W1kJtjn6UBwRM6jnmiwfB
|
||||
Pb8VA91chb2vssAtX2zbTvqBJ9+LBPGCdw/E53Rbf86qhxKaiAHOjpvAy5Y3m00m
|
||||
qC0w/Zwvju1twb4vhLaJ5NkUJYsUS7rmJKHHBnETLi8GFqiEsqTWpG/6ibYCv7rY
|
||||
DBJDcR9W62BW9jfIoBQcxUCUJouMPH25lLNcDc1ssqvC2v7iUgI9LeoM1sNovqPm
|
||||
QUiG9rHli1vXxzCyaMTjwftkJLkf6724DFhuKug2jITV0QkXvaJWF4nUaHOTNA4u
|
||||
JU9WDvZLI1j83A+/xnAJUucIv/zGJ1AMH2boHqF8CY16LpsYgBt6tKxxWH00XcyD
|
||||
CdW2KlBCeqbQPcsFmWyWugxdcekhYsAWyoSf818NUsZdBWBaR/OukXrNLfkQ79Iy
|
||||
ZohZbvabO/X+MVT3rriAoKc8oE2Uws6DF+60PV7/WIPjNvXySdqspImSN78mflxD
|
||||
qwLqRBYkA3I75qppLGG9rp7UCdRjxMl8ZDBld+7yvHVgt1cVzJx9xnyGCC23Uaic
|
||||
MDSXYrB4I4WHXPGjxhZuCuPBLTdOLU8YRvMYdEvYebWHMpvwGCF6bAx3JBpIeOQ1
|
||||
wDB5y0USicV3YgYGmi+NZfhA4URSh77Yd6uuJOJENRaNVTzk
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate></CertificateChain></Key><Key algorithm="rsa"><PrivateKey format="pem">
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
||||
</PrivateKey><CertificateChain><NumberOfCertificates>3</NumberOfCertificates><Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFGDCCAwCgAwIBAgIKEEeAUVAYhhGBQDANBgkqhkiG9w0BAQsFADAbMRkwFwYD
|
||||
VQQFExA1YjAzNTljY2E4ODc5Y2I1MB4XDTE2MDUyNjE2NTcyNFoXDTI2MDUyNDE2
|
||||
NTcyNFowGzEZMBcGA1UEBRMQMzQ0NjZhZWI2Nzc3NmMyNzCCAaIwDQYJKoZIhvcN
|
||||
AQEBBQADggGPADCCAYoCggGBAL4v0vzuqEgN4rcnPkKNsPhr6WkRUZTfK45aOPGa
|
||||
J+Q2WyPRKX2Mdja36QiyIg9tiPBbok8wRYSeY02vhSewwD/bBUVVvuSs8zYNY9jZ
|
||||
aOMg49tojRVMVtE8JhO5G1lSWMuXWzIKJ5Qo1x1BGyjfXDUntISkUHxvUPgnMvz3
|
||||
dgfygV060cUytTnHrsj0FDRJbm49FvfpEBrUj8keNF413GI47EJ9Qk1NchqAT9UH
|
||||
YvDPt6+NF+NQlGx09KRcImF68DgHZXvB01adGY1bJRoj6JXeWUayNJ9D2Gu8Ik+b
|
||||
h+XiGjjJInI34OBVkqP3F+0G/zxCOeBCgy8Qk2A2Q0lMGmejoXt6D4Cc4RnUdyeC
|
||||
yG+6cTQkjfPHEuWMoa8MQLp/jO2fY6qQvV8lIpAk6qjaZb7Rd5tdOZDxCCagrWWD
|
||||
aNBd0e79szHcK8GDFOTbNll66i8muzPUysR0o6zAzhVXW+hRA7uOyVV6fTmj1LB6
|
||||
w6Uxzr6Xi4MvazE3QQcxr0qiYwIDAQABo4HdMIHaMB0GA1UdDgQWBBQB+NeLZ3O6
|
||||
x5CwQduHzprmNQN8JTAfBgNVHSMEGDAWgBRkdqBZ1YRFXa5o2jjSEQcsqmE9ojAM
|
||||
BgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAkBgNVHR4EHTAboBkwF4IVaW52
|
||||
YWxpZDtlbWFpbDppbnZhbGlkMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHBzOi8vYW5k
|
||||
cm9pZC5nb29nbGVhcGlzLmNvbS9hdHRlc3RhdGlvbi9jcmwvMTA0NzgwNTE1MDE4
|
||||
ODYxMTgxNDAwDQYJKoZIhvcNAQELBQADggIBAEK/q4OEziSIP+auL8oYFsckpZQN
|
||||
8YcGPN74LAKNBGDh0e5MV1CjYevM+FG79euAQfkKZJ0eRVH/LYHzrr/cLwv+HE8q
|
||||
tsj57PObOepIup7MTyike1qjlgKu3NEjcNYa6T4kR8nZaycGhpL/kQpbIXCBOc5T
|
||||
6DTT/mwYEpSLu+P5KsaHiUng3DVJZPX4F3ZNN+7WuPoLZriZX9cCk6uOTVxQeSm4
|
||||
rCfD6BpL0zJHtqjQbetijREg+QjqFVNwkwBS1W3J8kLk02AoNjtem1yAy6emxlQx
|
||||
TeCfm+cS0whsWo66mwwIxxp72VisgpzlrhfZiAwAxMhAT40ygfeTWAYpClYRSr/1
|
||||
1/X5k6HYB14BnNSfhEFkqhC9XOdtZN9lcFyDgoIDm9sRtLiBq7yGhxeX8M+9bavg
|
||||
aQMyPFpMnFXrKNdr7tBVVQ7sG9cavZRGGIIJYS44c/GSZiYfBrS45raHq6l6i0aj
|
||||
HOfvSOfFSRmbL4s78DNIdW6ZlzwQRtGjMcGSiPyVCOqu196x2Op08P4LfWXdSecU
|
||||
285/+zj1oa4inyOA/TKdEqg1d7m1cEoOElw9i0JivqAscpQUXlSqsGORKrmoVKl4
|
||||
gUuJeCvo1la/tluXSOPJeAllwHtgNj9flzXMHTKcsrZ+tOiDnzwl3qIwr11o/iHA
|
||||
7qaZlBkmipuwCn9r
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate><Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
yhC5FAE=
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate><Certificate format="pem">
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
</Certificate></CertificateChain></Key></Keybox>
|
||||
</AndroidAttestation>""";
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue