diff --git a/app/build.gradle b/app/build.gradle index e15a7ce..7c74453 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "es.chiteroman.bootloaderspoofer" minSdk 26 targetSdk 34 - versionCode 33 - versionName '3.3' + versionCode 34 + versionName '3.4' multiDexEnabled false } diff --git a/app/src/main/java/es/chiteroman/bootloaderspoofer/Data.java b/app/src/main/java/es/chiteroman/bootloaderspoofer/Data.java deleted file mode 100644 index 9350dfa..0000000 --- a/app/src/main/java/es/chiteroman/bootloaderspoofer/Data.java +++ /dev/null @@ -1,213 +0,0 @@ -package es.chiteroman.bootloaderspoofer; - -public final class Data { - public static final String EC_PRIVATE_KEY = """ - -----BEGIN EC PRIVATE KEY----- - MHcCAQEEINe7CzSlS7CEOgdCH9Zg8IP+GfhVVNT0tDzgQNuDXtDSoAoGCCqGSM49 - AwEHoUQDQgAEwCzLu4AL1c86SRwHKjgGlk3L16fbU3U8zWUa1hB+OwCxwqvyD686 - HLsIKAgZluKMIAQQKRalYapz+tPSdJ4mig== - -----END EC PRIVATE KEY-----"""; - public static final String RSA_PRIVATE_KEY = """ - -----BEGIN RSA PRIVATE KEY----- - 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 - -----END RSA PRIVATE KEY-----"""; - public static final String CERT_1 = """ - -----BEGIN CERTIFICATE----- - MIIB9DCCAXqgAwIBAgIRAM/Qn0kkZ6jXjzyH+K6CsO0wCgYIKoZIzj0EAwIwOTEM - MAoGA1UEDAwDVEVFMSkwJwYDVQQFEyBiZGZhOWZhYzAzZGE0NTA2ZmI5NjlmNmM5 - YmVjM2QxNzAeFw0xOTExMTEyMzU0NDJaFw0yOTExMDgyMzU0NDJaMDkxDDAKBgNV - BAwMA1RFRTEpMCcGA1UEBRMgNDRlZDIzNTQ4Y2FiMjUyODc0ZjEzMmY5Y2RjNzcz - NGYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATALMu7gAvVzzpJHAcqOAaWTcvX - p9tTdTzNZRrWEH47ALHCq/IPrzocuwgoCBmW4owgBBApFqVhqnP609J0niaKo2Mw - YTAdBgNVHQ4EFgQUlGSg1+oyzEu37ungNj341PMOvk0wHwYDVR0jBBgwFoAUBPEA - vvdDAhpX9Xt/RL1yD9YU6ckwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC - AgQwCgYIKoZIzj0EAwIDaAAwZQIwVftvDTBnJsiJpdYew5lCTheSq/ZjXowgIs6d - uYEkqw8XWqeMAjbuCEG0Rk0aZ6KBAjEAjGBkEFqWweS33qvDGT3UDfPeAqzu5KZg - 7NYCZ+rhTzONtC+0gwty8SkvqgWOApAu - -----END CERTIFICATE-----"""; - public static final String CERT_2 = """ - -----BEGIN CERTIFICATE----- - MIIDlDCCAXygAwIBAgIRALVqd4i3MNOEeYMeYq8wCrcwDQYJKoZIhvcNAQELBQAw - GzEZMBcGA1UEBRMQZjkyMDA5ZTg1M2I2YjA0NTAeFw0xOTExMTEyMzUyNTBaFw0y - OTExMDgyMzUyNTBaMDkxDDAKBgNVBAwMA1RFRTEpMCcGA1UEBRMgYmRmYTlmYWMw - M2RhNDUwNmZiOTY5ZjZjOWJlYzNkMTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATv - oM6LGOSsxFxqblxvbf4+A/dajU/a500Cmf/xMVHwAKU4kb1gTwhbVUwi8D2ZCoBD - 3ZrJa01753DecVP6Jfz5wt/HxA6djWbx1OP7Prr7e/gn/6QcJmb+/hdATeLnQ5Kj - YzBhMB0GA1UdDgQWBBQE8QC+90MCGlf1e39EvXIP1hTpyTAfBgNVHSMEGDAWgBQ2 - YeEAfIgFCVGLRGxH/xpMyepPEjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE - AwICBDANBgkqhkiG9w0BAQsFAAOCAgEAJ9bMFKIyzg1M4SOLVCFjf5tuxu8mpy+H - Ok4X/Z3nOSyWWZUxBnsI3ke278Qa5L5IcDgfQJXknVQrY9ibgFNmd6wXI17sYOJA - oBiPmxuMHm4O7KiRMwEWtnfjzXuvyGcF9EFXGyOIofn0TprGHPWNmyQ/pTfn4qmA - DreD5SMKtp5USYX3gOhPYqyycPLv9vU0PYRH01zf4hyd0aHzA9ND02P5/t0Cp9uw - jNb/lGwEGdjGJwMDpM3YDlIkFNB15X8Lt1asMWXBWE8hGUv14/gQHu4newAOQaqX - goDi00ddLr2qV9J0fgKzSbxLrmnjO4zYGvJhOUTWHj9q34MRgrgIvNAKQh7xMqdC - 4qE6AnMWt9LTZBApdGj02BFiMdX+2/tKWekhQIbHvYF3Avg3aC4i2y6nMfjnEEeG - 2K2UZJ/vavIhzT5v4bo4YpAvjXSrT7xVYDrcjrY5cH7gsnaivmCMqFrUvfxfAz7E - A0lbo8MJIoR+XnB3j/NtzmchUgNcwboUIJdnpw31C2T3imf/CZMm4fhyrNzQ/lSc - K3wd1Eww5f/SAiV15uO4Xg1iNKz+oPiA8o0752DVanuA8axtnCSYpc5Oet0QjMI9 - lkDXiaGK9E5isP0X7aIH0b8e3C25Jbcm7UygzrGTmu/ETeBjIvvoe6jIoJN8+D6I - okDkrORrlNI= - -----END CERTIFICATE-----"""; - public static final String CERT_3 = """ - -----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-----"""; - public static final String RSA_CERT_1 = """ - -----BEGIN CERTIFICATE----- - MIIE4DCCAsigAwIBAgIRAIQxhLQWHo37txEGHTSDrYEwDQYJKoZIhvcNAQELBQAw - OTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQFEyBiZGZhOWZhYzAzZGE0NTA2ZmI5Njlm - NmM5YmVjM2QxNzAeFw0xOTExMTEyMzU0NDJaFw0yOTExMDgyMzU0NDJaMDkxDDAK - BgNVBAwMA1RFRTEpMCcGA1UEBRMgNDRlZDIzNTQ4Y2FiMjUyODc0ZjEzMmY5Y2Rj - NzczNGYwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCufF4pKWSTSKeT - TaA+FzRz0hFdx9gILHBBnHLQiHpAHm8QFXJwKUVSwHTKTrSMqkDIKAdSST746PIP - YDiTVODsBRFXLjdK3hHWYhpqwpRtZhYycTTol96GHom0L8iQYk0CpI7+yxdatK9B - sjb7+Ylz49xmJKK02ObP34mWVC3dHBCxmaf/HOQ7tSYrqHWs4pCoyT0UE93bZ1eS - 5b3CEnQiGuest3K727hYTLne+81uPNByTfkTffY/hO5mDBlRnCQEaPqypnjd6ETx - joHBL4mKFIpRKY4p9Q8JJBK9248p5bY8xi/Hl8hDWb0jMRtgRn7h3XBHiLF49lrj - Hrx55VPPV2MLPSkztGa7jrUaV2lslSPOC2hx9YJVlsmJ0J2s8BlbmGI4woGz43s5 - 9yIzb+DxK5x0QNFu6jrtdtCHozJ2XVcUOMGaz6SoDYX699Hy+Ps7votYn+BjnGB7 - RVs4nmWh22jnLWUGEtbqX77pohqry+6zgCAsEu3gbcmryptdjrMCAwEAAaNjMGEw - HQYDVR0OBBYEFE60P57rqz3PSH+N1I9Pjafbf2wBMB8GA1UdIwQYMBaAFICGFd7Q - lNVDSUrfvWCzz9NoIVX6MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgIE - MA0GCSqGSIb3DQEBCwUAA4ICAQCg3AyWTANN2v9B/oSxQ2WVQSKHNjIGrHxy747M - Yc7w35j43KoM9PJjv9XF9T0/ftR4qHXUGZF4JZgzFOFNrLBCE0ITI7IrBHzUJ/TY - 3QxoJuz2H3zUEUxkig85OdWXbVR3Y0KzLqz0Z3a8NXlXg9/RGsyuD3fhiUlqo6+Y - GyjuQ/zhIplt6XbIrhig4VC4O9dUlIyVfr04Wajk64D2BAejt9yWpUYwCkUGIJL2 - JKZ6rD7YHDipRD77V0ldbeTXXAKZp4L9kyaJWTLtekBoBMPhH0Gu84lszJXPn8Si - T3SdeMFVmz83VL5+1NnuBr6LokM71OYXTECPFxd51I59jUCZVUPOULakYSwa885w - x0MyH7faXXUV81+f4omdQ85XOwwn2BSo8V1NXsjUY1W0vCKHe8OxrN7yg1bUz+al - XcUYFAXczJ/7sJere8cw9u5IGVQtRBMsv0ztxqgHZVgF3thg0XeU+MbgYNH/J6hi - NCpQWRhvhgGXs3yAGFd8U0PPkwViQJ+vHKIqzGOjLbMhFiC0PA56cfeSk8+J7blx - ffkgq+g2VFxDdKM+BCrFFKDqo5U7WoWucpHQRUWwU3pThpEyImjbbWddwEHJhC83 - y41Z4TBUaGOg6105H8hDpQIEu4ik5/J2StMeASlEI9Yor2nigyVXaI3rus3YjBHt - lbi40w== - -----END CERTIFICATE-----"""; - public static final String RSA_CERT_2 = """ - -----BEGIN CERTIFICATE----- - MIIFQjCCAyqgAwIBAgIRAJkDqxn5BBEOyy6uHDfxAXswDQYJKoZIhvcNAQELBQAw - GzEZMBcGA1UEBRMQZjkyMDA5ZTg1M2I2YjA0NTAeFw0xOTExMTEyMzUyMzNaFw0y - OTExMDgyMzUyMzNaMDkxDDAKBgNVBAwMA1RFRTEpMCcGA1UEBRMgYmRmYTlmYWMw - M2RhNDUwNmZiOTY5ZjZjOWJlYzNkMTcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw - ggIKAoICAQCtPMeXmM8ofUNzUdl3qKOCqFBdHy23XU5rvceGCUqlnLW4L6p7cpuS - lUGctIFnaQ16W81qB8iyaAfPC3LqP/+CvwrfNRUdmJiCBWlj0uS5VH7jR4kyKHDy - 10D2y1w3rpXvjst79/czq1EkeVW1Cg1HBbbbsQPZYS7wnx5U9tksX3k1qIssGHFg - ETE3e34faICZx3eg6IJqzE2GxeNhvWEe4MBHBTxwoac/VAXT921KaHshjfBMEFcD - adr+Qz1Yme6fMj2gfRiVthKCN1qgT2tk/LpHIjdBjIJo304jtcOmqMIPgjPNIJTM - m6nffKU3rVmtMGKPkfBaVVAq2DflKpvEd3omuFPAuYsR61L9/FNI04UjVbIf8fT2 - ijvFKd4IXfsq6slRZcXuBNzvJUXw17hQ6VOdF7+YL2Qebxg4RfVO4tkpb+/xhI2f - jNZuymHjh/NPgx9cO7Y9TdpgEa7Hn4Ltxvb+OWeID9FFXpeCit5LQik1TUFKo+1l - JFvhlSknbesnh0ZRP6PrUa+PPtD8Q4GjvRfBW2r4oFBpHLogzGiDvKyhFbiMfMda - oabCCLx2zf/f2KesasYGgoBnuKDBjXgMhlIZM0pFV/ulhH0OKBAKCRBCC/NpcrHX - ZdLfW1DuOHWhc2k8GgCbkJ93kA/jAwSxXcoOQbu7wQEyfSij0KkTUwIDAQABo2Mw - YTAdBgNVHQ4EFgQUgIYV3tCU1UNJSt+9YLPP02ghVfowHwYDVR0jBBgwFoAUNmHh - AHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC - AgQwDQYJKoZIhvcNAQELBQADggIBABKAxpBf2tKpdT9ZNoNzrTTox13YmYfTrBZ7 - n32+23qS5U7TXSiNrtIOMTh4C6XyobHTGSDhk2RMPDJ1V77t787wJC2qdT9qx1Ej - ryTIzRFtK1WdWNGtgSJiSB+dM/ZtrvexKuyFig27BT8dQf3KzB1YiXW2WFydClYU - Z5SeKlno2fPxpI1hBLFO70kFiA0jE6220Z1ee+rLbxcc7Y+R1ScA8Vh+pXUi20lr - VGhiHwgBkjOQ26aZGH97HVVtvorRxpGxLjONtYvtsadZ+ZrDCQzRh9rCGXpTF5YR - QFRQ6QSpJQz750krLXA8uLsb63DLLT673+P7fGZflU8MNtUgcxCER0iWTVx4EN9P - fYivTdKCNIYii5EwvJl7MUkbr2fVitDdsc0GhJBqg7XIYuPuujy+ktb+FfICKB/Q - n8HFLR2ZXk5SnVrF07D0srIiUN9wwwwngiucawWeXqTY9MGSMR0F9IvyqxCM9nEr - x5YftAbCDexatqHI1+m0i6iymNjeHtOtsQcFem5j0Y0GrCIniPjDDrQPI6Qa4MWy - kUlj1od2/LQd/m7Abov1HORgOJBNlyXZ5FsAdbJOYq86DFEJK6SdlO7IWyz1zjTV - mq7+/kcIJp9NlqMFg/uYc6wz7J5bF7USHE2vq/riccdKLaWb8iQZATWR/DidPdjp - +KdojutP - -----END CERTIFICATE-----"""; - public static final String RSA_CERT_3 = """ - -----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-----"""; -} diff --git a/app/src/main/java/es/chiteroman/bootloaderspoofer/Xposed.java b/app/src/main/java/es/chiteroman/bootloaderspoofer/Xposed.java index 73a0ee5..85da20e 100644 --- a/app/src/main/java/es/chiteroman/bootloaderspoofer/Xposed.java +++ b/app/src/main/java/es/chiteroman/bootloaderspoofer/Xposed.java @@ -1,12 +1,7 @@ package es.chiteroman.bootloaderspoofer; -import android.app.AndroidAppHelper; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.Signature; import android.security.keystore.KeyGenParameterSpec; import android.security.keystore.KeyProperties; -import android.util.Log; import org.bouncycastle.asn1.ASN1Boolean; import org.bouncycastle.asn1.ASN1Encodable; @@ -31,20 +26,33 @@ import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; -import org.bouncycastle.util.io.pem.PemObject; -import org.bouncycastle.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.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.X509Certificate; +import java.security.cert.CertificateException; +import java.util.ArrayDeque; import java.util.Arrays; import java.util.Date; +import java.util.Deque; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; @@ -54,52 +62,95 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage; public final class Xposed implements IXposedHookLoadPackage { - private static final String TAG = "BootloaderSpoofer"; - private static final KeyPair EC_KEYPAIR, RSA_KEYPAIR; - private static final Certificate[] certsChain = new Certificate[3]; private static final SecureRandom random = new SecureRandom(); + private static final Deque EC_CERTS = new ArrayDeque<>(3); + private static final Deque RSA_CERTS = new ArrayDeque<>(3); private static byte[] attestationChallengeBytes = new byte[0]; - private static Signature[] signatures; - private static int versionCode; - private static String packageName; + private static KeyPair EC_KEYPAIR, RSA_KEYPAIR; + private static String MODULE_PATH; - static { + private static void loadKeyBox() { try { - Object o; - PEMKeyPair pemKeyPair; - - try (PEMParser parser = new PEMParser(new StringReader(Data.EC_PRIVATE_KEY))) { - o = parser.readObject(); - } - - pemKeyPair = (PEMKeyPair) o; - - EC_KEYPAIR = new JcaPEMKeyConverter().getKeyPair(pemKeyPair); - - try (PEMParser parser = new PEMParser(new StringReader(Data.RSA_PRIVATE_KEY))) { - o = parser.readObject(); + EC_CERTS.clear(); + RSA_CERTS.clear(); + + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + + Document doc = dBuilder.parse(new ByteArrayInputStream(KEYBOX.getBytes(StandardCharsets.UTF_8))); + doc.getDocumentElement().normalize(); + + Element rootElement = doc.getDocumentElement(); + + int numberOfKeyboxes = Integer.parseInt(rootElement.getElementsByTagName("NumberOfKeyboxes").item(0).getTextContent()); + XposedBridge.log("Number of Keyboxes: " + numberOfKeyboxes); + + 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); + + 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; + + 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)); + } + } + } + } + } } + } catch (Exception e) { + XposedBridge.log("[BootloaderSpoofer] ERROR: " + e); + throw new RuntimeException(); + } + } - pemKeyPair = (PEMKeyPair) o; + private static KeyPair parsePrivateKey(String key) throws IOException { + key = key.trim(); - RSA_KEYPAIR = new JcaPEMKeyConverter().getKeyPair(pemKeyPair); + PEMParser parser = new PEMParser(new StringReader(key)); + Object o = parser.readObject(); + parser.close(); - certsChain[0] = parseOtherCert(Data.CERT_1); - certsChain[1] = parseOtherCert(Data.CERT_2); - certsChain[2] = parseOtherCert(Data.CERT_3); + PEMKeyPair pemKeyPair = (PEMKeyPair) o; - } catch (Throwable t) { - throw new RuntimeException(t); - } + return new JcaPEMKeyConverter().getKeyPair(pemKeyPair); } - private static Certificate parseOtherCert(String cert) throws Exception { + private static Certificate parseCert(String cert) throws IOException, CertificateException { + cert = cert.trim(); - PemReader reader = new PemReader(new StringReader(cert)); - PemObject pemObject = reader.readPemObject(); - reader.close(); + PEMParser parser = new PEMParser(new StringReader(cert)); + Object o = parser.readObject(); + parser.close(); - X509CertificateHolder holder = new X509CertificateHolder(pemObject.getContent()); + X509CertificateHolder holder = (X509CertificateHolder) o; return new JcaX509CertificateConverter().getCertificate(holder); } @@ -112,19 +163,11 @@ private static Extension addHackedExtension() { random.nextBytes(bytes1); random.nextBytes(bytes2); - ASN1Encodable[] rootOfTrustEncodables = { - new DEROctetString(bytes1), - ASN1Boolean.TRUE, - new ASN1Enumerated(0), - new DEROctetString(bytes2) - }; + ASN1Encodable[] rootOfTrustEncodables = {new DEROctetString(bytes1), ASN1Boolean.TRUE, new ASN1Enumerated(0), new DEROctetString(bytes2)}; ASN1Sequence rootOfTrustSeq = new DLSequence(rootOfTrustEncodables); - ASN1Integer[] purposesArray = { - new ASN1Integer(2), - new ASN1Integer(3) - }; + ASN1Integer[] purposesArray = {new ASN1Integer(2), new ASN1Integer(3)}; DLSet Apurpose = new DLSet(purposesArray); ASN1Integer Aalgorithm = new ASN1Integer(3); @@ -152,20 +195,7 @@ private static Extension addHackedExtension() { var vendorPatchLevel = new DLTaggedObject(true, 718, AvendorPatchLevel); var bootPatchLevel = new DLTaggedObject(true, 719, AbootPatchLevel); - ASN1Encodable[] teeEnforcedEncodables = { - purpose, - algorithm, - keySize, - ecCurve, - noAuthRequired, - creationDateTime, - origin, - rootOfTrust, - osVersion, - osPatchLevel, - vendorPatchLevel, - bootPatchLevel - }; + ASN1Encodable[] teeEnforcedEncodables = {purpose, algorithm, keySize, ecCurve, noAuthRequired, creationDateTime, origin, rootOfTrust, osVersion, osPatchLevel, vendorPatchLevel, bootPatchLevel}; ASN1Integer attestationVersion = new ASN1Integer(4); ASN1Enumerated attestationSecurityLevel = new ASN1Enumerated(2); @@ -176,16 +206,7 @@ private static Extension addHackedExtension() { ASN1Sequence softwareEnforced = new DLSequence(); ASN1Sequence teeEnforced = new DLSequence(teeEnforcedEncodables); - ASN1Encodable[] keyDescriptionEncodables = { - attestationVersion, - attestationSecurityLevel, - keymasterVersion, - keymasterSecurityLevel, - attestationChallenge, - uniqueId, - softwareEnforced, - teeEnforced - }; + ASN1Encodable[] keyDescriptionEncodables = {attestationVersion, attestationSecurityLevel, keymasterVersion, keymasterSecurityLevel, attestationChallenge, uniqueId, softwareEnforced, teeEnforced}; ASN1Sequence keyDescriptionHackSeq = new DLSequence(keyDescriptionEncodables); @@ -194,7 +215,7 @@ private static Extension addHackedExtension() { return new Extension(new ASN1ObjectIdentifier("1.3.6.1.4.1.11129.2.1.17"), true, keyDescriptionOctetStr); } catch (Exception e) { - Log.e(TAG, "error create extensions: " + e); + XposedBridge.log("[BootloaderSpoofer] Error create extensions: " + e); } return null; @@ -202,18 +223,11 @@ private static Extension addHackedExtension() { 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"), - EC_KEYPAIR.getPublic() - ); + 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()); certBuilder.addExtension(addHackedExtension()); - ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withECDSA").build(EC_KEYPAIR.getPrivate()); + ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withRSA").build(RSA_KEYPAIR.getPrivate()); X509CertificateHolder certHolder = certBuilder.build(contentSigner); @@ -221,82 +235,277 @@ private static Certificate hackLeafCert() throws Exception { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { - PackageManager packageManager = AndroidAppHelper.currentApplication().getPackageManager(); - - PackageInfo packageInfo = packageManager.getPackageInfo(lpparam.packageName, 0); - - packageName = lpparam.packageName; - signatures = packageInfo.signatures; - versionCode = packageInfo.versionCode; + loadKeyBox(); Class AndroidKeyStoreKeyPairGeneratorSpi = XposedHelpers.findClassIfExists("android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi", lpparam.classLoader); + XposedHelpers.findAndHookMethod(AndroidKeyStoreKeyPairGeneratorSpi, "generateKeyPair", XC_MethodReplacement.returnConstant(RSA_KEYPAIR)); - if (AndroidKeyStoreKeyPairGeneratorSpi == null) { + try { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore"); + XposedHelpers.findAndHookMethod(keyPairGenerator.getClass(), "generateKeyPair", XC_MethodReplacement.returnConstant(RSA_KEYPAIR)); - KeyPairGenerator keyPairGenerator1 = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore"); - XposedHelpers.findAndHookMethod(keyPairGenerator1.getClass(), "generateKeyPair", XC_MethodReplacement.returnConstant(EC_KEYPAIR)); - XposedHelpers.findAndHookMethod(keyPairGenerator1.getClass(), "genKeyPair", XC_MethodReplacement.returnConstant(EC_KEYPAIR)); + keyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore"); + XposedHelpers.findAndHookMethod(keyPairGenerator.getClass(), "generateKeyPair", XC_MethodReplacement.returnConstant(RSA_KEYPAIR)); - KeyPairGenerator keyPairGenerator2 = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore"); - XposedHelpers.findAndHookMethod(keyPairGenerator2.getClass(), "generateKeyPair", XC_MethodReplacement.returnConstant(RSA_KEYPAIR)); - XposedHelpers.findAndHookMethod(keyPairGenerator1.getClass(), "genKeyPair", XC_MethodReplacement.returnConstant(RSA_KEYPAIR)); + } catch (NoSuchAlgorithmException | NoSuchProviderException e) { - } else { - XposedHelpers.findAndHookMethod(AndroidKeyStoreKeyPairGeneratorSpi, "generateKeyPair", XC_MethodReplacement.returnConstant(EC_KEYPAIR)); + XposedBridge.log("[BootloaderSpoofer] ERROR: " + e); } - XposedHelpers.findAndHookMethod(KeyGenParameterSpec.Builder.class, "setAttestationChallenge", byte[].class, new XC_MethodHook() { + Class Builder = XposedHelpers.findClass(KeyGenParameterSpec.Builder.class.getName(), lpparam.classLoader); + XposedHelpers.findAndHookMethod(Builder, "setAttestationChallenge", byte[].class, new XC_MethodHook() { @Override - protected void afterHookedMethod(MethodHookParam param) { + protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) { attestationChallengeBytes = (byte[]) param.args[0]; - Log.d(TAG, "attestationChallenge: " + Arrays.toString(attestationChallengeBytes)); + XposedBridge.log("[BootloaderSpoofer] attestationChallenge: " + Arrays.toString(attestationChallengeBytes)); } }); - KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); - KeyStoreSpi keyStoreSpi = (KeyStoreSpi) XposedHelpers.getObjectField(keyStore, "keyStoreSpi"); - XposedHelpers.findAndHookMethod(keyStoreSpi.getClass(), "engineGetCertificateChain", String.class, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) { - Certificate[] certificates = null; - - try { - certificates = (Certificate[]) param.getResultOrThrowable(); - } catch (Throwable e) { - XposedBridge.log("Couldn't get original certificate chain, broken TEE ?"); - } - - Certificate[] hackCerts = new Certificate[4]; - - System.arraycopy(certsChain, 0, hackCerts, 1, certsChain.length); - - if (certificates != null && certificates.length > 1) { - - Certificate leaf = certificates[0]; - - if (!(leaf instanceof X509Certificate x509Certificate)) return; - - byte[] bytes = x509Certificate.getExtensionValue("1.3.6.1.4.1.11129.2.1.17"); - - if (bytes == null || bytes.length == 0) { - XposedBridge.log("Leaf certificate doesn't contain attestation extensions... Ignoring it."); - return; + 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 certificates = new ArrayDeque<>(RSA_CERTS); + + try { + certificates.addFirst(hackLeafCert()); + } catch (Exception e) { + XposedBridge.log("[BootloaderSpoofer] ERROR creating hacked leaf certificate: " + e); } - } else { - Log.d(TAG, "Original certificate chain is null or empty... Broken TEE ?"); - } - - try { - hackCerts[0] = hackLeafCert(); - } catch (Exception e) { - Log.e(TAG, "ERROR creating hacked leaf certificate: " + e); + return certificates.toArray(new Certificate[0]); } + }); + } catch (CertificateException | KeyStoreException | IOException | + NoSuchAlgorithmException e) { - param.setResult(hackCerts); - } - }); + XposedBridge.log("[BootloaderSpoofer] ERROR: " + e); + } } + + private static final String KEYBOX = """ + + + 1 + + -----BEGIN EC PRIVATE KEY----- + MHcCAQEEINHUR+pr+/0UCLbjPYQq/2bw6JekJvor38TVlVAUMP5uoAoGCCqGSM49 + AwEHoUQDQgAE8QKCOumQkEdLnqps1h6aYQM/O4VREnhHF0tJ3pcQ0cfQS5WgnhzP + OD5vloDit6xBGoUXs+QqtMEflqYClhCL/Q== + -----END EC PRIVATE KEY----- + 3 + -----BEGIN CERTIFICATE----- + MIICKzCCAbKgAwIBAgIKAndWeGYmQ2cZQTAKBggqhkjOPQQDAjAbMRkwFwYDVQQF + ExA1YjAzNTljY2E4ODc5Y2I1MB4XDTE2MDUyNjE2NTczNVoXDTI2MDUyNDE2NTcz + NVowGzEZMBcGA1UEBRMQMzQ0NjZhZWI2Nzc3NmMyNzBZMBMGByqGSM49AgEGCCqG + SM49AwEHA0IABPECgjrpkJBHS56qbNYemmEDPzuFURJ4RxdLSd6XENHH0EuVoJ4c + zzg+b5aA4resQRqFF7PkKrTBH5amApYQi/2jgd0wgdowHQYDVR0OBBYEFN3jZFzm + lLhaMqADvRaisWt1mMOFMB8GA1UdIwQYMBaAFAbd7gqSHZtx4caJQUTvOTlwJgA1 + MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMCQGA1UdHgQdMBugGTAXghVp + bnZhbGlkO2VtYWlsOmludmFsaWQwVAYDVR0fBE0wSzBJoEegRYZDaHR0cHM6Ly9h + bmRyb2lkLmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wMjc3NTY3ODY2 + MjY0MzY3MTk0MTAKBggqhkjOPQQDAgNnADBkAjAThg70bAjRwWEffDdAV7aarwB6 + mw4ccMG/0apN4/Bb6Jz4wyXUj4DxhtcTOIvVfrICMEiDdyXEsZZl8yrOGs6Z6XWJ + Fd3EdZ5vLcC1+ZdSNNveJfW1u0+iP1WaDktKfTjvNw== + -----END CERTIFICATE----- + + -----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----- + + -----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----- + + -----BEGIN RSA PRIVATE KEY----- + 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 + -----END RSA PRIVATE KEY----- + 3 + -----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----- + + -----BEGIN CERTIFICATE----- + MIIFcTCCA1mgAwIBAgIKA4gmZ2BliZaFcjANBgkqhkiG9w0BAQsFADAbMRkwFwYD + VQQFExBmOTIwMDllODUzYjZiMDQ1MB4XDTE2MDUyNjE2NDExMVoXDTI2MDUyNDE2 + NDExMVowGzEZMBcGA1UEBRMQNWIwMzU5Y2NhODg3OWNiNTCCAiIwDQYJKoZIhvcN + AQEBBQADggIPADCCAgoCggIBAKQpnVM0Ms0TsKD99lxs+uvM6ZFYDuL5cOIOw/MC + 2vFRXhoUwJDGlNEgFj8RIHiz72nAdMh9qCnZxGy9YxePWHc3JGoTCjbRR/ztoUWm + 5ajyJCTEGdbHm8d6qhGyFV2GbDXNri1r55Bu/HJFavMeTanwibCXy3pee2NLzHUr + aryUKA5gv/qji9LzM+Bl+MBNmVcrF+Uyo1hSdp3qK5CfWnN5jUrLafOu7F95d7On + OJ9DdXNYqJj94TNp3sBfbCYmbzCVBV4YBgVuAGD6jWEkGa/a6aZudqjEghHeYlQE + hUYuvbkVi4ce7OmJv0K9icX5Nn20pTpCe1tWT6y+Yrl2JEe7NJ5Q29f9nU6jkzm7 + /2ZxnpXA1+RyPr77/MqX1KigblZvJkFHXWaSNiLEWAVZi/dSNku/t/RGz9IZX6rJ + Tz+Ajd28kWsO+HhzNZAkXwCTb4ltBenykeiiS7Obll3dfuubOV3G/egJzQG0GR9x + Y8s9GzfDe8OHXsKeBmXCGK8h0g7sjbHY86wrlmoUw9Z3ozhbQKGCV/eV6YQD/NwT + yGFom5e2sBMy0fTloh+xVCQ4HxSaGSPDE9dA8rjf/GRLqL41O//o63HJ8Qm5ly6i + dnB8pN27V0ACAewlJnOLhFugGlwLFTmg6/P2dlvaViZ67c0Evf3bv5qqMJK5l4v1 + aDmdAgMBAAGjgbYwgbMwHQYDVR0OBBYEFGR2oFnVhEVdrmjaONIRByyqYT2iMB8G + A1UdIwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8w + DgYDVR0PAQH/BAQDAgGGMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHBzOi8vYW5kcm9p + ZC5nb29nbGVhcGlzLmNvbS9hdHRlc3RhdGlvbi9jcmwvRThGQTE5NjMxNEQyRkEx + ODANBgkqhkiG9w0BAQsFAAOCAgEAXivYRipVRq8tdLaEbp7fr0Du5wmh8nY+bI0K + Ae9ltKLwpXml2YcpIe/qw+yV7qg0IiQAkmMQJQp4drAEkDxw8WNINFXvnlDB32ru + ZP9HrFY6lxLSGYGH/qnOJJnTV/nFkZ+uEtnn7j6U/rrH4kh0mhyu58sN49FkHMfA + 4E8gGuDMRuVbFOWA5Ghqn65KFkU61u/X5d1gFFZiQApL6NMw8rCKCUbGbfOyH91I + 2OHWRnNXFVS0p5siXXPZzmaJ4PJuFgtzqCW6rvRS2FfRg3niiUR9vut38Oavn0wr + /JiZLUsGyzdpJKzLJNfTAnGN5QLduYNuSYNZoBawlC5PZSwFqsf/VKNVYtwjog/v + 5o/zoZOfD2f9oWyJ7wxNPc9/cAVIgA+gW6/jZAXW9BoYZZ7SJ0DmsZP1L7hNIUZS + 8cluYuZ/3TdwqXgCV6CuZA6MLSWjCKJ5OxS2JAUf3VInUmszTwI9ULugMCPb9gYj + lLp04t2HbMN+ky9Ath6/yH4XkGF6AtTLpWHnwW6L2kzZyJdY5cm5n0hfrdtejUyG + DJnJKQSVSzldalAu8OVoCd5QcHpEkoR40zMH5zGXm6JgpRBuCi/JZ8WJNkqBAqWv + +cHFXCwulE0E3nnevqMDsF2BVmGZz80BF7EXDwHuqMVcAbd22el3L9UP7oiOn2jJ + yhC5FAE= + -----END CERTIFICATE----- + + -----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----- + + """; } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index f269845..be69301 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -2,6 +2,5 @@ io.github.vvb2060.keyattestation - com.CIB.Digital.MB \ No newline at end of file