87 votos

¿Cómo puedo verificar la autenticidad de un archivo APK que he descargado?

La última actualización de Google Maps no está disponible en mi país, así que descargué una versión buscando en Google "Google Maps 5.4.0 apk". De hecho, lo encontré, pero ahora me pregunto cómo puedo saber si esta es realmente la misma versión que la del mercado.

¿Cómo puedo estar seguro de que no ha sido manipulado? ¿Las aplicaciones están firmadas de alguna manera? ¿Hay alguna forma de verificar las firmas?

0 votos

Si visitas, desde tu móvil, la página: m.google.com/maps, ¿te ofrece un enlace de descarga o algo similar?

0 votos

@Nicolás: El enlace lleva al mercado, desde donde no puedo descargarlo.

0 votos

¿De dónde lo descargaste, ya que tu pregunta ha sido editada recientemente? Yo uso gappsandroid.blogspot.com, he cruzado algunas de las aplicaciones y todas han coincidido en los sumas MD5 con las aplicaciones oficiales lanzadas en Play Store.

77voto

Chris Stratton Puntos 1086

Evitando el debate sobre la legitimidad de instalar esa aplicación en tu teléfono, la cuestión de la verificación es algo que he estado queriendo entender por un tiempo, y me has incitado a intentar descubrir una posible manera de verificar quién firmó un apk.

Las aplicaciones de Android se firman de la manera normal de los archivos .jar (.apk es realmente solo un .jar especial que es simplemente un .zip especial) sin embargo, puede no ser trivial rastrear la autenticidad de los certificados a menos que tengas algo conocido bueno con qué comparar. Eso es básicamente lo que hace el teléfono en sí: verifica que algo que afirma ser de la misma parte que algo que ya está en el teléfono realmente sea - el teléfono no se niega a instalar cosas con firmantes desconocidos, solo puede (objetar o eliminar los datos de la aplicación) falsificaciones aparentes cuando algo nuevo no coincide con algo viejo que afirma hacerlo.

Necesitarás tener jarsigner y keytool. Creo que estos vienen del JDK que es un prerrequisito para el SDK de Android en lugar del propio SDK.

Primero querrás intentar verificar la clave pública contenida en el .apk. Por lo general, esto está en META-INF/CERTS.RSA pero puede estar en otro archivo - unzip -l te lo dirá. Querrás ver qué puedes averiguar al respecto:

unzip -p sospechoso.apk META-INF/CERT.RSA | keytool -printcert

Esto va a arrojar mucha información sobre quién afirma ser el firmante. Algunos certificados aparentemente están firmados por partes conocidas, pero sin descubrir cómo rastrear eso, sospecho que podrías hacer algo así:

unzip -p sospechoso.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
unzip -p buenconocido.apk META-INF/CERT.RSA | keytool -printcert | grep MD5

Si tienes un apk confiable conocido del mismo autor que utilizó el mismo certificado. Entiendo que los certificados que tengan el mismo sum MD5 son suficientes.

Suponiendo que has decidido confiar en el certificado, entonces puedes ver si ha sido utilizado para firmar cada uno de los archivos dentro del .apk

jarsigner -verbose -verify sospechoso.apk

(Si hay más de un archivo .RSA en el archivo, debes agregar la bandera -certs para que te diga qué certificado(s) se han utilizado para firmar cada archivo, así puedes estar seguro de que es el certificado que verificaste)

0 votos

@Chris Stratton ¿Es posible copiar el apk de Google Maps de un dispositivo? Entonces uno puede verificar los certificados como dijiste.

0 votos

Además, puedes extraer un APK de un dispositivo con la siguiente aplicación: play.google.com/store/apps/details?id=com.ext.ui. Saludos, Paul.

1 votos

Las aplicaciones recientes de Android a menudo ya no contienen una firma v1 que se pueda verificar con jarsigner (solo una firma v2 o v3). Por lo tanto, apksigner del SDK de Android debería ser la forma preferida de verificar una firma de un archivo APK.

20voto

pr0nin Puntos 353

Verificando la firma de un APK

La forma correcta de verificar un archivo APK es usando apksigner.

apksigner es parte de las herramientas de compilación de Android (Android SDK), por lo tanto es posible encontrar varias versiones instaladas, una para cada versión de build-tools instalada.

Un ejemplo de la ruta dentro del SDK de Android para apksigner es:

android-sdk/build-tools/30.0.1/apksigner

Para más detalles sobre cómo obtener apksigner, consulte el último capítulo de esta respuesta.

Ejecute apksigner de esta manera:

apksigner verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

Verifica
Verificado usando el esquema v1 (firma JAR): true
Verificado usando el esquema v2 (Esquema de firma APK v2): true
Verificado usando el esquema v3 (Esquema de firma APK v3): true
Número de firmantes: 1
DN del certificado del firmante #1: CN=Whisper Systems, OU=Investigación y Desarrollo, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Resumen SHA-256 del certificado del firmante #1: 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Resumen SHA-1 del certificado del firmante #1: 45989dc9ad8728c2aa9a82fa55503e34a8879374
Resumen MD5 del certificado del firmante #1: d90db364e32fa3a7bda4c290fb65e310
Algoritmo de clave del firmante #1: RSA
Tamaño de clave del firmante #1 (bits): 1024
Resumen SHA-256 de la clave pública del firmante #1: 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Resumen SHA-1 de la clave pública del firmante #1: b46cbed18d6fbbe42045fdb93f5032c943d80266
Resumen MD5 de la clave pública del firmante #1: 0f9c33bbd45db0218c86ac378067538d

Estimar la autenticidad del certificado del firmante

Ahora has verificado el APK, pero aún no sabes si puedes confiar en la persona/organización que ha firmado el archivo APK. Esto se debe a que en Android las firmas de APK utilizan por definición certificados autofirmados. Por lo tanto, determinar si se puede confiar en un certificado es una pregunta difícil. La única forma es verificar las otras aplicaciones que han sido firmadas con el mismo certificado.

La única forma que conozco para hacerlo es mediante servicios online de rastreo de PlayStore como androidobservatory.org. Tiene una API para verificar qué aplicaciones han sido firmadas por el mismo certificado utilizando el resumen SHA-1 del certificado:

Editar: apkmirror.com también permite buscar el resumen del certificado. Simplemente ingrese el resumen del certificado SHA-1 o SHA-256 sin puntos ni espacios en el campo de búsqueda:

En esta página puedes ver todos los otros archivos APK en Google Play Store que están firmados con el mismo certificado.

Obtener y ejecutar apksigner

Apksigner es una herramienta Java que Google proporciona al inicio con un archivo por lotes apksigner.bat (Windows) o un script de shell apksigner.sh (Linux, MacOS).

Como se mencionó antes, está incluido en cada versión de build-tools del Android SDK. Pero no está ubicado en el PATH, por lo que no se puede abrir simplemente un símbolo del sistema o terminal y ejecutar apksigner, en su lugar hay que proporcionar manualmente la ruta completa a apksigner.bat/apksigner.sh.

Si no quieres instalar todo el Android SDK (con o sin Android Studio) puedes descargar directamente las herramientas de compilación, extraerlas y ejecutar apksigner. Los enlaces a todas las herramientas de compilación se proporcionan en este sitio web (los enlaces proporcionados van a las ubicaciones originales de descarga de Google).

Prefiero apksigner de build-tools v30:

Solo necesitas el archivo lib/apksigner.jar del archivo. Extráelo y abre una terminal en la carpeta. Luego ejecuta java -jar apksigner.jar. Para ejecutarlo necesitas Java 9 o superior (mejor Java 11 o 17).

Usando este enfoque directo, el comando para ejecutar apksigner es

java -jar apksigner.jar verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

O si usas nombres de ruta completos - reemplaza las secciones <..> con la ruta apropiada que funcione en tu sistema operativo:

/java -jar /apksigner.jar verify --verbose --print-certs ""

0 votos

Esta es la respuesta que más ayudó, ¡gracias! Usé apksigner para comparar el certificado de una aplicación del mismo desarrollador que obtuve de Google Play Store y la que obtuve de ApkMirror

0 votos

Para cualquier persona que no quiera descargar 1 GB de SDK, este es el enlace de descarga directa a las herramientas de compilación (actuales): dl.google.com/android/repository/…

1 votos

@BorislavIvanov Deberías mencionar que tu enlace es solo para Windows. Aparte de eso, todavía está la opción de descargar solo el SDK de Android sin Android Studio. Verifica la sección "Solo herramientas de línea de comandos" aquí: developer.android.com/studio#downloads Contiene el administrador del SDK que permite descargar las "Herramientas de compilación r30" que has enlazado. En total, terminas con aproximadamente 150MB de descarga.

7voto

kahbou Puntos 151

Ahora hay una herramienta apksigner en build-tools que hace lo que quieres. De la documentación:

Comprueba si se espera que las firmas del APK se confirmen como válidas en todas las plataformas Android que el APK soporta:

apksigner verify [opciones] nombre-de-la-app.apk

0 votos

¿Dónde descargar?

0 votos

(de fuentes oficiales/"confiables")

2voto

Amy Puntos 1

También puedes intentar subir el APK al verificador de virus VirusTotal.com gratuito. Generará un hash único para el APK y si otros ya lo han subido para probarlo (muy probablemente) entonces tendrás una mejor idea de que el APK es válido.

El servicio también escaneará el APK con más de 60 escáneres de virus y te informará si cree que tiene firmas similares a virus ya encontrados.

3 votos

No confiaría en la comprobación de virus, ya que dudo que estos programas antivirus se centren en cada APK de Android distribuido. Además, el MD5 no te dirá mucho, aparte de que el mismo archivo ha sido subido anteriormente.

0 votos

@Stan - Escanea los bytes del archivo en busca de bytes de malware. No tiene que conocer todos los APK distribuidos. Además, no es un MD5, es un SHA256 y hay un poco de información adicional comunicada en eso si es la primera vez que el APK se carga, tal vez sea algo desconocido y posiblemente más malicioso. Además, la mayoría de los APK válidos probablemente estarán allí. ¿Por qué no incluir esto como parte del análisis como otra herramienta para usar? Puede proporcionar simplemente otro nivel de confianza o no confianza sobre el paquete. No tienes que considerarlo la última palabra, pero considerando más datos.

0 votos

Está bien, estoy de acuerdo en que es útil como fuente adicional, simplemente no la única.

0voto

Nozalys Puntos 1

Para comparar los certificados de un archivo apk sospechoso, tal vez una idea sea descargar su versión en la tienda oficial Play Store en tu teléfono, hacer una copia de seguridad en tu computadora y ir al directorio de la copia de seguridad, seleccionar el archivo apk en cuestión y hacer las mismas comprobaciones. También puedes ver los certificados de Google haciendo la comprobación en una aplicación predeterminada del dispositivo (como cualquier archivo apk com.google.android.*)

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X