Descompilar aplicaciones Android

Hay herramientas que te permiten ver el código fuente y recursos (imágenes, archivos, etc.) de aplicaciones Android empaquetadas en archivos .apk, ya que generalmente los archivos .apk suelen tener el código ofuscado, es decir (en palabras sencillas) tener el código inentendible para el usuario y así evitar su piratería.

Una vez que tengas una aplicación (un archivo .apk) que te interesa conocer su interior tu puedes seguir el siguiente flujo para descompilarlo.
Un .apk es un archivo comprimido en formato .zip y para extraerlo puedes hacer cualquiera de lo siguiente:

  • Cambiar la extensión de .apk a .zip y descomprimirlo normalmente.
  • Abrir el .apk con un programa compresor (por ejemplo WinRar en Windows) y extraerlo.

Una vez extraido podrás ver todos los archivos que usa la aplicación mas o menos como si vieras un proyecto Android en desarrollo, pero los archivos .xml estarán codificados y el código fuente Java estarán empaquetados en un archivo .dex.

Convertir de .dex a .jar

dex2jar es una herramienta para convertir los archivos .dex de un proyecto Android a un archivo .jar de Java que contiene los archivos .class.

Descargar dex2jar

Ejemplo:

sh d2j-dex2jar.sh classes.dex

Si existiera algún problema de permisos en MacOS, adicionalmente ejecutar la siguiente línea:

sudo chmod +x d2j_invoke.sh

Convertir de .jar a .java

Un archivo .jar de Java contiene las clases compiladas de los archivos .java, extraer o descompilar estos archivos se lo puede hacer con la herramienta Java Decompiler.

Descargar Java Decompiler

Decodificar archivos .xml de un .apk

Cuando extraes los archivos .xml de un .apk verás que solo tenemos archivos codificados e inentendibles, para verlos como si estuvieran dentro un proyecto en desarrollo puedes usar android4me.

Descargar android4me

El modo de uso es mediante una terminal (consola o línea de comandos) de la siguiente forma:

java -jar AXMLPrinter.jar AndroidManifest.xml > XmlDecodificado.xml

Si bien hay herramientas que te permiten modificar directamente ciertas partes de la aplicación y volverlas a compilar en un archivo .apk, esta es una manera de reconstruir el proyecto con todos los elementos y ver ciertos trozos de recursos o código que se requiera.

Daniel Alvarez

Software engineer, developer and producer of native mobile applications for Android and iOS, Angular, Firebase. Teacher. Speaker. Creating bots.