Intenta interpretar el código de forma correcta antes de utilizarlo a tu trabajo si tdeseas aportar algo puedes comentarlo.
Solución:
Dejando de lado el debate sobre la legitimidad de instalar esa aplicación en su teléfono, la cuestión de la verificación es una que he querido entender por un tiempo, y me ha pedido que intente encontrar una posible forma de verificar quién firmó una aplicación
Las aplicaciones de Android se firman de la manera normal de los archivos .jar (.apk es realmente solo un .jar especial que es solo un .zip especial), sin embargo, puede que no sea trivial rastro la autenticidad de los certificados a menos que tenga algo bueno conocido para comparar. Eso es básicamente lo que hace el teléfono en sí mismo: verifica que algo que dice ser de la misma parte que algo que ya está en el teléfono realmente lo es: el teléfono no se niega a instalar cosas con firmantes desconocidos, solo puede (objetar/borrar aplicación datos de) aparentes falsificaciones cuando algo nuevo no coincide con algo antiguo que pretende.
Necesitarás tener jarsigner y keytool. Creo que estos provienen del JDK, que es un requisito previo para el SDK de Android en lugar del SDK en sí.
Primero quieres intentar verificar el público. key contenido dentro del .apk. Por lo general, esto está en META-INF/CERTS.RSA, pero puede estar en otro archivo: descomprimir -l se lo dirá. Quieres ver lo que puedes averiguar al respecto:
unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert
Eso arrojará mucha información sobre quién dice ser el firmante. Aparentemente, algunos certificados están firmados por partes conocidas, pero sin descubrir cómo rastrear eso, sospecho que podría hacer algo como esto:
unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
unzip -p knowngood.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
Si tiene un apk confiable conocido del mismo autor que usó el mismo certificado. Supongo que los certificados que tienen la misma suma MD5 son suficientes.
Suponiendo que haya decidido confiar en el certificado, puede ver si se ha utilizado para firmar cada uno de los archivos dentro del .apk.
jarsigner -verbose -verify suspect.apk
(Si hay más de un archivo .RSA en el archivo, debe agregar el indicador -certs para indicar qué certificado(s) se han utilizado para firmar cada archivo, para que pueda estar seguro de que es el certificado que verificó)
La forma correcta de verificar un archivo APK es usar apksigner
.
apksigner
es parte de las herramientas de compilación de Android, por lo tanto, es posible que encuentre varias versiones instaladas, una para cada versión instalada de las herramientas de compilación.
Una ruta de ejemplo dentro del SDK de Android para apksigner
es:
android-sdk/build-tools/29.0.2/apksigner
Ejecute apksigner de esta manera:
apksigner verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Number of signers: 1
Signer #1 certificate DN: CN=Whisper Systems, OU=Research and Development, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Signer #1 certificate SHA-256 digest: 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Signer #1 certificate SHA-1 digest: 45989dc9ad8728c2aa9a82fa55503e34a8879374
Signer #1 certificate MD5 digest: d90db364e32fa3a7bda4c290fb65e310
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 1024
Signer #1 public key SHA-256 digest: 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Signer #1 public key SHA-1 digest: b46cbed18d6fbbe42045fdb93f5032c943d80266
Signer #1 public key MD5 digest: 0f9c33bbd45db0218c86ac378067538d
Ahora ha verificado el APK, pero aún no sabe si puede confiar en la persona/organización que firmó el archivo APK. Esto se debe a que en las firmas APK de Android se utilizan, por definición, certificados autofirmados. Si puede confiar en un certificado, por lo tanto, es una pregunta difícil. La única forma es verificar las otras aplicaciones que se han firmado con el mismo certificado.
La única forma que conozco de hacerlo es usar los servicios de rastreo en línea de PlayStore como androidobservatory.org. Tiene una API para verificar qué aplicaciones han sido firmadas por el mismo certificado usando el resumen del certificado SHA-1:
- SHA-1: https://androidobservatory.org/cert/45989DC9AD8728C2AA9A82FA55503E34A8879374
Editar: apkmirror.com también permite buscar el resumen del certificado. Simplemente ingrese el resumen del certificado SHA-1 o SHA-256 simple (sin dos puntos ni espacios) en el campo de búsqueda:
- SHA-1: https://www.apkmirror.com/?post_type=app_release&searchtype=app&s=45989DC9AD8728C2AA9A82FA55503E34A8879374
- SHA-256: https://www.apkmirror.com/?post_type=app_release&searchtype=apk&s=29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
En esta página puede ver todos los demás archivos APK en Google Play Store que están firmados con el mismo certificado.
Hay (ahora) un apksigner
herramienta en build-tools
que hace lo que quieres. De los documentos:
Compruebe si se espera que las firmas del APK se confirmen como válidas en todas las plataformas de Android compatibles con el APK:
apksigner verify [options] app-name.apk