Para la misma aplicación, tengo:
- un APK de una tienda de aplicaciones,
- lo que se afirma que es el código fuente de la misma versión. Con un script de construcción Gradle y estructura bastante habitual.
Quiero verificar si el APK fue realmente construido a partir de ese código fuente o no.
¿Cómo puedo verificar eso?
Notas:
- El APK no está obfuscado.
- No tengo motivo para confiar en la firma de nadie. Solo confío en el código fuente.
- Ya construí la aplicación para mí mismo, pero ahora quiero saber si el APK estaba bien o no.
- Preferiblemente con herramientas de línea de comandos de Linux, pero cualquier herramienta está bien.
2 votos
No he probado eso, pero deberías poder usar Apktool para este propósito: Ingeniería inversa de ambos archivos
.apk
, luego ejecutar una diferencia contra los directorios resultantes. La única diferencia entonces debería ser la firma (que no puede coincidir por razones obvias). Pensándolo bien: simplemente descomprimir los archivos.apk
y hacer una diferencia binaria debería hacer lo mismo. Ambos requerirían, por supuesto, haber usado las mismas versiones de biblioteca, etc. al compilar en primer lugar :)0 votos
@Izzy: "mismas versiones de bibliotecas": La versión de la API está escrita en el manifiesto y las versiones de las bibliotecas en el script Gradle, así que esa parte debería estar bien, supongo. Una lista de archivos/carpetas que se pueden ignorar haría que esa sea una gran respuesta (bono por las líneas de comando reales).
1 votos
Podría hacer eso si estuviera en mi computadora en casa, lo cual no es el caso actualmente. Pero para que sea una "respuesta honrosa", necesitaría probarlo por mí mismo primero :) En caso de que me olvide (y nadie más lo haya hecho antes que yo), siéntete libre de enviarme otro ping (por ejemplo, en el chat) en unas 8..10 horas :)
0 votos
@Izzy El método
diff
parece genial... ¿pero qué pasa si los chicos de la tienda de aplicaciones ofuscaron el APK mientras lo compilaban?0 votos
En mi humilde opinión, ahí es donde Apktool entra en juego. ¿Has revisado el enlace? También echa un vistazo a LibRadar que utiliza esto. Hasta donde recuerdo, ayuda en la desofuscación (algo debe hacerlo, o LibRadar tendría difícil detectar esas librerías).
0 votos
Solo iba a decir verificaciones MD5. Puede que no ayude con las firmas, pero puede mostrar si hay una diferencia. Una vez que ambos estén en un estado compilado o descompilado, por supuesto.
0 votos
@DanBrown: ¿Quieres decir que el APK de la tienda y el que compilé yo mismo deben ser exactamente iguales, byte por byte? Eso supone que no se incluyen marcas de tiempo de compilación, etc.
0 votos
@NicolasRaoul No lo están, que yo sepa.
0 votos
@DanBrown ¿Entonces en qué archivos dentro del APK sugieres realizar comparaciones de suma de comprobación? ¡Gracias!
0 votos
@NicolasRaoul probablemente deberías hacerlo en un formato decompilado. Solo necesitarás desglosar el APK. Asegúrate de que las bibliotecas y las versiones de la aplicación sean las mismas entre las aplicaciones