Make your Android banking app open-source!
Make your Android banking app open-source!
Make your Android banking app open-source!
Make your Android banking app open-source!
Single.create<AttestationResponse> { SafetyNet.getClient(activity) .attest(nonce, apiKey) .addOnSuccessListener(it::onSuccess) .addOnFailureListener(it::onError) }
eyJhbGciOiJSUzI1NiIsIng1YyI6WyJNSUlFaURDQ0EzQ2dBd0lCQWdJSU5CY1JCYkpDSWxBd0RRWUpLb1pJaHZjTkFRRUxCUUF3U1RFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBb1RDa2R2YjJkc1pTQkpibU14SlRBakJnTlZCQU1USEVkdmIyZHNaU0JKYm5SbGNtNWxkQ0JCZFhSb2IzSnBkSGtnUnpJd0hoY05NVGN3TlRFM01UQTBNRE00V2hjTk1UY3hNakkzTURBd01EQXdXakJzTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCd3dOVFc5MWJuUmhhVzRnVm1sbGR6RVRNQkVHQTFVRUNnd0tSMjl2WjJ4bElFbHVZekViTUJrR0ExVUVBd3dTWVhSMFpYTjBMbUZ1WkhKdmFXUXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF2L1dPZFpURlJlN29FUFhuUkNWOVNlbWxrNGpnckZSd0tFRng4d2FRTUMrU3NzSld5dUhpSHNNdEY2MDdOcFR1MCttbFBKOEM5TkhhbmtkUElzS3RLNmJ0emMreDBlc2c1VS9JUkQ0K2JRNVpSSDBrT1BxMmZpd1g1WmJnZDUrOFIzOWIyYkxmV0dDMmJkV1lxbHBvTUs1bXhFWW1BVVdIb0J4M2JHUldCR05BMi8vNHpaS0xqc0lFSFdFYksxOE5Kb0w3VlJOaExENlkvcmVXVElDdUNHdzVraERvbEJwYUw0R0xCakZvSEVBelNoZjFlUzhuYUFFcGpzQ3Z5ZWFCVzM0ZGJhUFJadFRIVWFBRDRtYXZCZ2hta0Z2eVRFL293SUJFa0pVakliRzFpUDlndnVzaEJhTmxjOHIway9tR1k1am1uNTZhVWRVZ1JnWjFwditqRFFJREFRQUJvNElCVHpDQ0FVc3dIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUIwR0ExVWRFUVFXTUJTQ0VtRjBkR1Z6ZEM1aGJtUnliMmxrTG1OdmJUQm9CZ2dyQmdFRkJRY0JBUVJjTUZvd0t3WUlLd1lCQlFVSE1BS0dIMmgwZEhBNkx5OXdhMmt1WjI5dloyeGxMbU52YlM5SFNVRkhNaTVqY25Rd0t3WUlLd1lCQlFVSE1BR0dIMmgwZEhBNkx5OWpiR2xsYm5Sek1TNW5iMjluYkdVdVkyOXRMMjlqYzNBd0hRWURWUjBPQkJZRUZCSitWS3BMSlNaK3VxOTEraW9ReHRTNzlMVzdNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVTdDBHRmh1ODltaTFkdldCdHJ0aUdycGFnUzh3SVFZRFZSMGdCQm93R0RBTUJnb3JCZ0VFQWRaNUFnVUJNQWdHQm1lQkRBRUNBakF3QmdOVkhSOEVLVEFuTUNXZ0k2QWhoaDlvZEhSd09pOHZjR3RwTG1kdmIyZHNaUzVqYjIwdlIwbEJSekl1WTNKc01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ1hoMjdtNG11ZEs3NEwxM3FSWml5K0Jrc2ZudmJzL0dEaW9ra0FwdDVveUEvMk10TTFFMGxHY2tEL2NjVWpuNUF1RWx5N3FkdGJnM2NOTk9BbGlWemxnVWFHWTZXNldUWnhrNGl2UVcwbmpwOUFrWkU3Y2N1VDJVU000MEp0dS9WQWxGYUZQV1N3RXBoa3J6VUNjQ2M3cjFTSGpya1FxekRGUnc5dmV0V1VZMWFJZmw3VklGcG1RdmZNMnV3TFlneXRsblBMbHNsMVdrMFBVbWNsc2lEMUg3MmtLelZLeE5ySkFuWk1CeC83SXBKY0Q3alhNTGhneGluK3FVUFBtNzF1M2pxS2VSZ0tVK3FlTjcvSnJOb1dlSXIrR1krbTE0VFljSzhhWkNad3p4VkczeXdVeUI3U1ZzR0tRTEtGRk1USDF1T3lSL1lnSjN2cmgyT1QvMXdiIiwiTUlJRDhEQ0NBdGlnQXdJQkFnSURBanFTTUEwR0NTcUdTSWIzRFFFQkN3VUFNRUl4Q3pBSkJnTlZCQVlUQWxWVE1SWXdGQVlEVlFRS0V3MUhaVzlVY25WemRDQkpibU11TVJzd0dRWURWUVFERXhKSFpXOVVjblZ6ZENCSGJHOWlZV3dnUTBFd0hoY05NVFV3TkRBeE1EQXdNREF3V2hjTk1UY3hNak14TWpNMU9UVTVXakJKTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNoTUtSMjl2WjJ4bElFbHVZekVsTUNNR0ExVUVBeE1jUjI5dloyeGxJRWx1ZEdWeWJtVjBJRUYxZEdodmNtbDBlU0JITWpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSndxQkhkYzJGQ1JPZ2FqZ3VEWVVFaThpVC94R1hBYWlFWis0SS9GOFluT0llNWEvbUVOdHpKRWlhQjBDMU5QVmFUT2dtS1Y3dXRaWDhiaEJZQVN4RjZVUDd4YlNEajBVL2NrNXZ1UjZSWEV6L1JURGZSSy9KOVUzbjIrb0d0dmg4RFFVQjhvTUFOQTJnaHpVV3gvL3pvOHB6Y0dqcjFMRVFUcmZTVGU1dm44TVhIN2xOVmc4eTVLcjBMU3krckVhaHF5ekZQZEZVdUxIOGdaWVIvTm5hZytZeXVFTldsbGhNZ1p4VVlpK0ZPVnZ1T0FTaERHS3V5Nmx5QVJ4em1aRUFTZzhHRjZsU1dNVGxKMTRyYnRDTW9VL000aWFyTk96MFlEbDVjRGZzQ3gzbnV2UlRQUHVqNXh0OTcwSlNYQ0RUV0puWjM3RGhGNWlSNDN4YStPY21rQ0F3RUFBYU9CNXpDQjVEQWZCZ05WSFNNRUdEQVdnQlRBZXBob2pZbjdxd1ZrREJGOXFuMWx1TXJNVGpBZEJnTlZIUTRFRmdRVVN0MEdGaHU4OW1pMWR2V0J0cnRpR3JwYWdTOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01DNEdDQ3NHQVFVRkJ3RUJCQ0l3SURBZUJnZ3JCZ0VGQlFjd0FZWVNhSFIwY0RvdkwyY3VjM2x0WTJRdVkyOXRNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUF3TlFZRFZSMGZCQzR3TERBcW9DaWdKb1lrYUhSMGNEb3ZMMmN1YzNsdFkySXVZMjl0TDJOeWJITXZaM1JuYkc5aVlXd3VZM0pzTUJjR0ExVWRJQVFRTUE0d0RBWUtLd1lCQkFIV2VRSUZBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQ0U0RXA0Qi9FQlpEWGdLdDEwS0E5TENPMHE2ejZ4RjlrSVFZZmVlUUZmdEpmNmlaQlpHN2VzbldQRGNZQ1pxMng1SWdCelV6Q2VRb1kzSU50T0F5bkllWXhCdDJpV2ZCVUZpd0U2b1RHaHN5cGI3cUVaVk1TR05KNlpsZElEZk0vaXBwVVJhVlM2bmVTWUxBRUhEMExQUHN2Q1FrMEU2c3BkbGVIbTJTd2Flc1NEV0IrZVhrbkdWcHpZZWtRVkEvTGxlbGtWRVNXQTZNQ2FHc2VxUVNwU2Z6bWhDWGZWVURCdmRtV0Y5ZlpPR3JYVzJsT1VoMW1Fd3BXanFOMHl2S25GVUV2L1RtRk5XQXJDYnRGNG1tazJ4Y3BNeTQ4R2FPWk9OOW11SUFzMG5INUFxcTNWdUR4M0NRUms2KzBOdFpsbXd1OVJZMjNuSE1BY0lTd1NIR0ZnPT0iXX0 . eyJub25jZSI6IkcvS3FNWGt3dm1ya0Y2QkkrVmFaZ0tuMUkxN1UyTkwxQmovS3AzTmlqWHM9IiwidGltZXN0YW1wTXMiOjE1MDAwMjc2MjgzMDUsImFwa1BhY2thZ2VOYW1lIjoicGwubWc2LnNhZmV0eW5ldCIsImFwa0RpZ2VzdFNoYTI1NiI6IjRJSzlFa1ZyK2pyb296SW9rck1zQ25SSEJoZU9JcnRWMWV5R2J4NGRvQTg9IiwiY3RzUHJvZmlsZU1hdGNoIjp0cnVlLCJleHRlbnNpb24iOiJDYlN0cTRsSTdMNW8iLCJhcGtDZXJ0aWZpY2F0ZURpZ2VzdFNoYTI1NiI6WyJUVzVQZVpHQm9ycU5zVW9jam9VN3IxQkdNTlIxZ2dKaitQZU95QWdyazBNPSJdLCJiYXNpY0ludGVncml0eSI6dHJ1ZX0 . mY-GlSNHdAlX-P_6U4b9_xDSGZpFdt7NTZGtHmnqwvmS1mN7aZPI0yisNGcDdDpTwG2yomK6vR84zjaT1T2XHI4MEh-XBea2zPaSRxs9sUsdT7VL-Igx4IF7Nw1_3qsEtBvTjCwVnTe1GzewoXZcVQDWGD3hbunMio0PYUaF9XDObTznnybhi8syeBdvcSI0A3Foc1eZbEBuBHIqtlQPwf2gu1bxMY6LlNEuqwuGkw4UUWVlQjatoCEN59ovCeWODKg4lsqDDCaJTLAm3Sr7DdRwdpz5obFmZDGhwB1wwB5LCrkZmSF4OD-GaVRKsuCGYKerA4jcdP8WVWeqghOkeg
{ "alg": "RS256", "x5c": ["MIIEiDCCA3CgAwIBAgIINBcRBbJCIlA wDQYJKoZIhvcNAQELBQAwSTELMAkGA1 UEBhMCVVMxEzARBgNVBAoTCkdvb2dsZ SBJbmMxJTAjBgNVBAMTH ... OT/1wb", "MIID8DCCAtigAwIBAgIDAjqSMA0GCSq GSIb3DQEBCwUAMEIxCzAJBgNVBAYTAl VTMRYwFAYDVQQKEw1HZW9UcnVzdCBJb mMuMRswGQYDVQQDExJHZ ... HGFg=="] }
BASE64
inception!
openssl x509 -inform der -in cert_1 -pubkey -dates -subject -issuer
openssl x509 -inform der -in cert_1 -pubkey -dates -subject -issuer -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv/WOdZTFRe7oEPXnRCV9 Semlk4jgrFRwKEFx8waQMC+SssJWyuHiHsMtF607NpTu0+mlPJ8C9NHankdPIsKt K6btzc+x0esg5U/IRD4+bQ5ZRH0kOPq2fiwX5Zbgd5+8R39b2bLfWGC2bdWYqlpo MK5mxEYmAUWHoBx3bGRWBGNA2//4zZKLjsIEHWEbK18NJoL7VRNhLD6Y/reWTICu CGw5khDolBpaL4GLBjFoHEAzShf1eS8naAEpjsCvyeaBW34dbaPRZtTHUaAD4mav BghmkFvyTE/owIBEkJUjIbG1iP9gvushBaNlc8r0k/mGY5jmn56aUdUgRgZ1pv+j DQIDAQAB -----END PUBLIC KEY----- notBefore=May 17 10:40:38 2017 GMT notAfter=Dec 27 00:00:00 2017 GMT subject= /C=US/ST=California/L=Mountain View/O=Google Inc/CN=attest.android.com issuer= /C=US/O=Google Inc/CN=Google Internet Authority G2
openssl x509 -inform der -in cert_2 -pubkey -dates -subject -issuer -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnCoEd1zYUJE6BqOC4NhQ SLyJP/EZcBqIRn7gj8Xxic4h7lr+YQ23MkSJoHQLU09VpM6CYpXu61lfxuEFgBLE XpQ/vFtIOPRT9yTm+5HpFcTP9FMN9Er8n1Tefb6ga2+HwNBQHygwA0DaCHNRbH// OjynNwaOvUsRBOt9JN7m+fwxcfuU1WDzLkqvQtLL6sRqGrLMU90VS4sfyBlhH82d qD5jK4Q1aWWEyBnFRiL4U5W+44BKEMYq7LqXIBHHOZkQBKDwYXqVJYxOUnXitu0I yhT8ziJqs07PRgOXlwN+wLHee69FM8+6PnG33vQlJcINNYmdnfsOEXmJHjfFr45y aQIDAQAB -----END PUBLIC KEY----- notBefore=Apr 1 00:00:00 2015 GMT notAfter=Dec 31 23:59:59 2017 GMT subject= /C=US/O=Google Inc/CN=Google Internet Authority G2 issuer= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
eyJhbGciOiJSUzI1NiIsIng1YyI6WyJNSUlFaURDQ0EzQ2dBd0lCQWdJSU5CY1JCYkpDSWxBd0RRWUpLb1pJaHZjTkFRRUxCUUF3U1RFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBb1RDa2R2YjJkc1pTQkpibU14SlRBakJnTlZCQU1USEVkdmIyZHNaU0JKYm5SbGNtNWxkQ0JCZFhSb2IzSnBkSGtnUnpJd0hoY05NVGN3TlRFM01UQTBNRE00V2hjTk1UY3hNakkzTURBd01EQXdXakJzTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCd3dOVFc5MWJuUmhhVzRnVm1sbGR6RVRNQkVHQTFVRUNnd0tSMjl2WjJ4bElFbHVZekViTUJrR0ExVUVBd3dTWVhSMFpYTjBMbUZ1WkhKdmFXUXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF2L1dPZFpURlJlN29FUFhuUkNWOVNlbWxrNGpnckZSd0tFRng4d2FRTUMrU3NzSld5dUhpSHNNdEY2MDdOcFR1MCttbFBKOEM5TkhhbmtkUElzS3RLNmJ0emMreDBlc2c1VS9JUkQ0K2JRNVpSSDBrT1BxMmZpd1g1WmJnZDUrOFIzOWIyYkxmV0dDMmJkV1lxbHBvTUs1bXhFWW1BVVdIb0J4M2JHUldCR05BMi8vNHpaS0xqc0lFSFdFYksxOE5Kb0w3VlJOaExENlkvcmVXVElDdUNHdzVraERvbEJwYUw0R0xCakZvSEVBelNoZjFlUzhuYUFFcGpzQ3Z5ZWFCVzM0ZGJhUFJadFRIVWFBRDRtYXZCZ2hta0Z2eVRFL293SUJFa0pVakliRzFpUDlndnVzaEJhTmxjOHIway9tR1k1am1uNTZhVWRVZ1JnWjFwditqRFFJREFRQUJvNElCVHpDQ0FVc3dIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUIwR0ExVWRFUVFXTUJTQ0VtRjBkR1Z6ZEM1aGJtUnliMmxrTG1OdmJUQm9CZ2dyQmdFRkJRY0JBUVJjTUZvd0t3WUlLd1lCQlFVSE1BS0dIMmgwZEhBNkx5OXdhMmt1WjI5dloyeGxMbU52YlM5SFNVRkhNaTVqY25Rd0t3WUlLd1lCQlFVSE1BR0dIMmgwZEhBNkx5OWpiR2xsYm5Sek1TNW5iMjluYkdVdVkyOXRMMjlqYzNBd0hRWURWUjBPQkJZRUZCSitWS3BMSlNaK3VxOTEraW9ReHRTNzlMVzdNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVTdDBHRmh1ODltaTFkdldCdHJ0aUdycGFnUzh3SVFZRFZSMGdCQm93R0RBTUJnb3JCZ0VFQWRaNUFnVUJNQWdHQm1lQkRBRUNBakF3QmdOVkhSOEVLVEFuTUNXZ0k2QWhoaDlvZEhSd09pOHZjR3RwTG1kdmIyZHNaUzVqYjIwdlIwbEJSekl1WTNKc01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ1hoMjdtNG11ZEs3NEwxM3FSWml5K0Jrc2ZudmJzL0dEaW9ra0FwdDVveUEvMk10TTFFMGxHY2tEL2NjVWpuNUF1RWx5N3FkdGJnM2NOTk9BbGlWemxnVWFHWTZXNldUWnhrNGl2UVcwbmpwOUFrWkU3Y2N1VDJVU000MEp0dS9WQWxGYUZQV1N3RXBoa3J6VUNjQ2M3cjFTSGpya1FxekRGUnc5dmV0V1VZMWFJZmw3VklGcG1RdmZNMnV3TFlneXRsblBMbHNsMVdrMFBVbWNsc2lEMUg3MmtLelZLeE5ySkFuWk1CeC83SXBKY0Q3alhNTGhneGluK3FVUFBtNzF1M2pxS2VSZ0tVK3FlTjcvSnJOb1dlSXIrR1krbTE0VFljSzhhWkNad3p4VkczeXdVeUI3U1ZzR0tRTEtGRk1USDF1T3lSL1lnSjN2cmgyT1QvMXdiIiwiTUlJRDhEQ0NBdGlnQXdJQkFnSURBanFTTUEwR0NTcUdTSWIzRFFFQkN3VUFNRUl4Q3pBSkJnTlZCQVlUQWxWVE1SWXdGQVlEVlFRS0V3MUhaVzlVY25WemRDQkpibU11TVJzd0dRWURWUVFERXhKSFpXOVVjblZ6ZENCSGJHOWlZV3dnUTBFd0hoY05NVFV3TkRBeE1EQXdNREF3V2hjTk1UY3hNak14TWpNMU9UVTVXakJKTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNoTUtSMjl2WjJ4bElFbHVZekVsTUNNR0ExVUVBeE1jUjI5dloyeGxJRWx1ZEdWeWJtVjBJRUYxZEdodmNtbDBlU0JITWpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSndxQkhkYzJGQ1JPZ2FqZ3VEWVVFaThpVC94R1hBYWlFWis0SS9GOFluT0llNWEvbUVOdHpKRWlhQjBDMU5QVmFUT2dtS1Y3dXRaWDhiaEJZQVN4RjZVUDd4YlNEajBVL2NrNXZ1UjZSWEV6L1JURGZSSy9KOVUzbjIrb0d0dmg4RFFVQjhvTUFOQTJnaHpVV3gvL3pvOHB6Y0dqcjFMRVFUcmZTVGU1dm44TVhIN2xOVmc4eTVLcjBMU3krckVhaHF5ekZQZEZVdUxIOGdaWVIvTm5hZytZeXVFTldsbGhNZ1p4VVlpK0ZPVnZ1T0FTaERHS3V5Nmx5QVJ4em1aRUFTZzhHRjZsU1dNVGxKMTRyYnRDTW9VL000aWFyTk96MFlEbDVjRGZzQ3gzbnV2UlRQUHVqNXh0OTcwSlNYQ0RUV0puWjM3RGhGNWlSNDN4YStPY21rQ0F3RUFBYU9CNXpDQjVEQWZCZ05WSFNNRUdEQVdnQlRBZXBob2pZbjdxd1ZrREJGOXFuMWx1TXJNVGpBZEJnTlZIUTRFRmdRVVN0MEdGaHU4OW1pMWR2V0J0cnRpR3JwYWdTOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01DNEdDQ3NHQVFVRkJ3RUJCQ0l3SURBZUJnZ3JCZ0VGQlFjd0FZWVNhSFIwY0RvdkwyY3VjM2x0WTJRdVkyOXRNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUF3TlFZRFZSMGZCQzR3TERBcW9DaWdKb1lrYUhSMGNEb3ZMMmN1YzNsdFkySXVZMjl0TDJOeWJITXZaM1JuYkc5aVlXd3VZM0pzTUJjR0ExVWRJQVFRTUE0d0RBWUtLd1lCQkFIV2VRSUZBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQ0U0RXA0Qi9FQlpEWGdLdDEwS0E5TENPMHE2ejZ4RjlrSVFZZmVlUUZmdEpmNmlaQlpHN2VzbldQRGNZQ1pxMng1SWdCelV6Q2VRb1kzSU50T0F5bkllWXhCdDJpV2ZCVUZpd0U2b1RHaHN5cGI3cUVaVk1TR05KNlpsZElEZk0vaXBwVVJhVlM2bmVTWUxBRUhEMExQUHN2Q1FrMEU2c3BkbGVIbTJTd2Flc1NEV0IrZVhrbkdWcHpZZWtRVkEvTGxlbGtWRVNXQTZNQ2FHc2VxUVNwU2Z6bWhDWGZWVURCdmRtV0Y5ZlpPR3JYVzJsT1VoMW1Fd3BXanFOMHl2S25GVUV2L1RtRk5XQXJDYnRGNG1tazJ4Y3BNeTQ4R2FPWk9OOW11SUFzMG5INUFxcTNWdUR4M0NRUms2KzBOdFpsbXd1OVJZMjNuSE1BY0lTd1NIR0ZnPT0iXX0 . eyJub25jZSI6IkcvS3FNWGt3dm1ya0Y2QkkrVmFaZ0tuMUkxN1UyTkwxQmovS3AzTmlqWHM9IiwidGltZXN0YW1wTXMiOjE1MDAwMjc2MjgzMDUsImFwa1BhY2thZ2VOYW1lIjoicGwubWc2LnNhZmV0eW5ldCIsImFwa0RpZ2VzdFNoYTI1NiI6IjRJSzlFa1ZyK2pyb296SW9rck1zQ25SSEJoZU9JcnRWMWV5R2J4NGRvQTg9IiwiY3RzUHJvZmlsZU1hdGNoIjp0cnVlLCJleHRlbnNpb24iOiJDYlN0cTRsSTdMNW8iLCJhcGtDZXJ0aWZpY2F0ZURpZ2VzdFNoYTI1NiI6WyJUVzVQZVpHQm9ycU5zVW9jam9VN3IxQkdNTlIxZ2dKaitQZU95QWdyazBNPSJdLCJiYXNpY0ludGVncml0eSI6dHJ1ZX0 . mY-GlSNHdAlX-P_6U4b9_xDSGZpFdt7NTZGtHmnqwvmS1mN7aZPI0yisNGcDdDpTwG2yomK6vR84zjaT1T2XHI4MEh-XBea2zPaSRxs9sUsdT7VL-Igx4IF7Nw1_3qsEtBvTjCwVnTe1GzewoXZcVQDWGD3hbunMio0PYUaF9XDObTznnybhi8syeBdvcSI0A3Foc1eZbEBuBHIqtlQPwf2gu1bxMY6LlNEuqwuGkw4UUWVlQjatoCEN59ovCeWODKg4lsqDDCaJTLAm3Sr7DdRwdpz5obFmZDGhwB1wwB5LCrkZmSF4OD-GaVRKsuCGYKerA4jcdP8WVWeqghOkeg
{ "nonce": "G/KqMXkwvmrkF6BI+VaZgKn1I17U2NL1Bj/Kp3NijXs=", "timestampMs": 1500027628305, "apkPackageName": "pl.mg6.safetynet", "apkDigestSha256": "4IK9EkVr+jroozIokrMsCnRHBheOIrtV1eyGbx4doA8=", "ctsProfileMatch": true, "extension": "CbStq4lI7L5o", "apkCertificateDigestSha256": ["TW5PeZGBorqNsUocjoU7r1BGMNR1ggJj+PeOyAgrk0M="], "basicIntegrity": true }
{ "nonce": "G/KqMXkwvmrkF6BI+VaZgKn1I17U2NL1Bj/Kp3NijXs=", "timestampMs": 1500027628305, "apkPackageName": "pl.mg6.safetynet", "apkDigestSha256": "4IK9EkVr+jroozIokrMsCnRHBheOIrtV1eyGbx4doA8=", "ctsProfileMatch": true, "extension": "CbStq4lI7L5o", "apkCertificateDigestSha256": ["TW5PeZGBorqNsUocjoU7r1BGMNR1ggJj+PeOyAgrk0M="], "basicIntegrity": true }
{ "nonce": "G/KqMXkwvmrkF6BI+VaZgKn1I17U2NL1Bj/Kp3NijXs=", "timestampMs": 1500027628305, "apkPackageName": "pl.mg6.safetynet", "apkDigestSha256": "4IK9EkVr+jroozIokrMsCnRHBheOIrtV1eyGbx4doA8=", "ctsProfileMatch": true, "extension": "CbStq4lI7L5o", "apkCertificateDigestSha256": ["TW5PeZGBorqNsUocjoU7r1BGMNR1ggJj+PeOyAgrk0M="], "basicIntegrity": true }
{ "nonce": "G/KqMXkwvmrkF6BI+VaZgKn1I17U2NL1Bj/Kp3NijXs=", "timestampMs": 1500027628305, "apkPackageName": "pl.mg6.safetynet", "apkDigestSha256": "4IK9EkVr+jroozIokrMsCnRHBheOIrtV1eyGbx4doA8=", "ctsProfileMatch": true, "extension": "CbStq4lI7L5o", "apkCertificateDigestSha256": ["TW5PeZGBorqNsUocjoU7r1BGMNR1ggJj+PeOyAgrk0M="], "basicIntegrity": true }
{ "nonce": "G/KqMXkwvmrkF6BI+VaZgKn1I17U2NL1Bj/Kp3NijXs=", "timestampMs": 1500027628305, "apkPackageName": "pl.mg6.safetynet", "apkDigestSha256": "4IK9EkVr+jroozIokrMsCnRHBheOIrtV1eyGbx4doA8=", "ctsProfileMatch": true, "extension": "CbStq4lI7L5o", "apkCertificateDigestSha256": ["TW5PeZGBorqNsUocjoU7r1BGMNR1ggJj+PeOyAgrk0M="], "basicIntegrity": true }
{ "nonce": "G/KqMXkwvmrkF6BI+VaZgKn1I17U2NL1Bj/Kp3NijXs=", "timestampMs": 1500027628305, "apkPackageName": "pl.mg6.safetynet", "apkDigestSha256": "4IK9EkVr+jroozIokrMsCnRHBheOIrtV1eyGbx4doA8=", "ctsProfileMatch": true, "extension": "CbStq4lI7L5o", "apkCertificateDigestSha256": ["TW5PeZGBorqNsUocjoU7r1BGMNR1ggJj+PeOyAgrk0M="], "basicIntegrity": true }
{ "nonce": "G/KqMXkwvmrkF6BI+VaZgKn1I17U2NL1Bj/Kp3NijXs=", "timestampMs": 1500027628305, "apkPackageName": "pl.mg6.safetynet", "apkDigestSha256": "4IK9EkVr+jroozIokrMsCnRHBheOIrtV1eyGbx4doA8=", "ctsProfileMatch": true, "extension": "CbStq4lI7L5o", "apkCertificateDigestSha256": ["TW5PeZGBorqNsUocjoU7r1BGMNR1ggJj+PeOyAgrk0M="], "basicIntegrity": true }
val cert = jws.verifySignature() ?: error("Invalid signature")
hostnameVerifier.verify( "attest.android.com", cert)
if (!statement.ctsProfileMatch) { error(" ") } if (statement.apkPackageName != "pl.mg6.safetynet") { error("Wrong APK package name") } if (statement.apkCertificateDigestSha256[0] != "TW5PeZGBorqNsUocjoU7r1BGMNR1ggJj+PeOyAgrk0M=") { error("Wrong APK certificate") }
Demo time!
Where it applies?
Problems
- API rate limiting
- abusing your keys
- it's software only
- it's Android only
@mg6maciej
Make your Android banking app open-source!
By Maciej Górski
Make your Android banking app open-source!
- 2,401