0 votos

¿Cómo detectar si un apk es de la Play Store o Sideloaded?

Tengo entendido que las aplicaciones están firmadas tanto por Google como por el desarrollador.

¿Cómo puedo detectar si un apk es de la Play Store o si es sideloaded.

Preferiría que el método funcionara en todas las plataformas principales sólo si es posible, incluyendo el propio Android.

Incluso si sideloaded me gustaría saber la fuente de la aplicación. Al igual que es de Play Store.

Estoy pensando en utilizar una aplicación o método que utilice la detección de firmas.

1 votos

La detección de firmas no ayuda mucho a detectar cómo se instaló una aplicación. Pero está la propiedad "installerPackageName" que te dice que al usar adb dumpsys package (lleva el nombre del paquete de la app que lo ha instalado, que sería el de playstore cuando se ha usado ese, o F-Droids, etc., o "fuente desconocida" cuando se ha cargado completamente de forma lateral.

0 votos

@Izzy Me preocupa más lidiar con el apk en sí. Si utiliza un grabber apk o adb es irrelevante si el apk es sideloaded. Quiero la verificación de que es de Play store.

2voto

Izzy Puntos 45544

No se puede saber si el .apk originalmente vino de Playstore - pero se puede saber si coincide con el que está disponible en Playstore. Esto es lo que necesitas:

  • el .apk en cuestión
  • el .apk de la misma aplicación en la misma versión de Playstore
  • openssl

Descomprimir ambos .apk (cada uno en su propio directorio), y comparar sus certificados (almacenados en el META-INF/ directorio. Los detalles de una comparación exhaustiva pueden ser, por ejemplo se encuentra aquí . El comando que necesitas es:

openssl pkcs7 -inform DER -in META-INF/CERT.RSA -noout -print_certs -text

Alternativamente, si no tiene openssl instalado sino el JDK de Oracle:

keytool -printcert -file META-INF/CERT.RSA

o

jarsigner -verify -certs -verbose ../Example.apk

Si los certificados coinciden, ambos archivos APK fueron firmados con la misma clave. A menos que la clave del desarrollador se vea comprometida, eso debería significar que el APK potencialmente cargado de forma lateral debería estar bien (no hay garantías de que el propio desarrollador no haya jugado, pero si el tamaño y el MD5 del APK también coinciden, yo diría que es seguro).

0 votos

Mientras que la parte sobre la comparación de la firma en el META-INF es útil, la única forma de estar seguro de que un APK es el mismo que el de la Play Store, es comparar sus checksums MD5, como has dicho. De hecho, la herramienta llamada apktool contiene una configuración alfa para intentar recompilar un APK y conservar la firma original en el proceso, por lo que comprobar sólo el RSA puede resultar poco fiable en el futuro.

0 votos

@DeathMaskSalesman por eso usé eso de "conjuntivitis" (debería..debería). Otro punto es: un MD5 mismatch no necesariamente debe apuntar a una clave comprometida. Algunos desarrolladores tienen sus aplicaciones en diferentes variantes con el mismo número de versión (por ejemplo, Tasker): debido a las restricciones de Playstore, ofrecen una "versión completa" (con opciones que Playstore rechazaría) a través de un canal diferente.

1 votos

Correcto. Así que la única forma de estar casi seguro sería comprobar tanto la firma como la suma de comprobación, como ya has dicho.

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