Decompilar APK (app de Android) y obtener código fuente (casi) original

Una de las debilidades de Java (y otros lenguajes que compilan a bytecode) es que se puede decompilar o descompilar, como le quieras llamar. O decompile, si hablas inglés.

Hoy vamos a ver un decompilador de aplicaciones de android, es decir, de apps con extensiones APK.

Estuve probando el decompilador y funciona de maravilla, obtiene casi el mismo código que el original.

Para hacer esta demostración y no hacer nada ilegal, voy a usar el CRUD de SQLite con Android cuyo código fuente está aquí, y su APK está aquí.

Descargo de responsabilidad

Ya deberías saber que esto debe tener algo de ilegal, así que no lo hagas en casa. Si lo haces, es bajo tu propia responsabilidad, no me hago cargo de nada.

Se supone que estos decompiladores son útiles cuando existe una app maliciosa y se quiere analizar su comportamiento.

Obtener código fuente original de APK

El decompilador del que hablo es deguard cuyo sitio está aquí. En el sitio dice:

DeGuard invierte el proceso de ofuscación realizado por las herramientas de ofuscación de Android. Esto permite numerosos análisis de seguridad, incluyendo inspección de código y predicción de bibliotecas.

Para comenzar hay que seleccionar un archivo en donde dice “Select APK File” y luego hacer click en Upload.

1 – Seleccionar app

Cuando la app que vamos a decompilar se haya subido, comenzará el proceso de decompilación en el servidor.

2 – Decompilando apk

Al terminar se mostrará una interfaz amigable. A la izquierda estará un árbol de directorios, el cual contiene los archivos del código fuente.

A la derecha aparece el código fuente del archivo seleccionado.

3 – Resultados de decompilación

Los archivos que deberían importarnos son aquellos que tienen el id de quien lo creó, no los que tienen el prefijo de android, ya que son las librerías propias del sistema.

En mi caso voy a analizar el paquete “in.parzibyte.crudsqlite.controllers” pues parece que no es de android.

4 – Código del controlador decompilado

El archivo es MascotasController.java (incluso supo cuál era el nombre) y si lo comparamos con el original veremos que no hay muchos cambios, solo optimizaciones de código que el compilador hace por nosotros.

5 – Código original

En la parte de abajo podemos descargar el código fuente, la lista de librerías, entre otros.

6 – Descargar código decompilado

Nota: no solo podemos ver ese archivo, podemos ver todo el código; en este caso solo analicé un archivo, pero los demás están ahí, decompilados.

Conclusión

Si quieres ver la diferencia en profundidad, aquí dejo ambos archivos.

El original:

El decompilado:

Con esto queda claro que nuestro código de Android puede ser leído por cualquier persona que conozca herramientas para decompilar, así que nunca pongas claves o cosas sensibles en tu código.

Te invito a probarlo por ti mismo con la app que puse al inicio.

Por cierto, no he probado con Kotlin pero supongo que también se puede, ya que ambos (Java y Kotlin) compilan para la JVM.

Decompilar APK (app de Android) y obtener código fuente (casi) original

Por parzibyte Tiempo de lectura: 2 min
0