Cómo sacar el código fuente de un archivo APK
Tanto para desarrolladores como para curiosos que quiere conocer que es lo que verdaderamente está pasando dentro del dispositivo y con quién se comunica en el exterior. Podemos tener el código fuente de una aplicación con tan solo unos sencillos pasos. Puede que el código no sea todo lo limpio que nos gustaría pero algo se puede ver.
- Programar es cosa de chicas
- Aplicaciones paraprogramar y escribir código
Ingeniería inversa con un archivo APK ¿es legal?
El proceso para conseguir el código de programación desde un archivo ejecutable o cualquier otro archivo ya compilado se denomina ingeniería inversa. La ingeniería normal, por llamarla de alguna manera sería el propio desarrollo del código fuente.
Esta actividad es legal dependiendo del caso. En cada país la legislación puede ser diferente y puede permitir más o menos. En caso particular de España la legislación permite hacer ingeniería inversa con una serie de condiciones que podemos leer en los artículo 100 de la Ley de Propiedad Intelectual.
Resumiendo. Vamos a poder extraer el código siempre y cuando seamos propietarios o tengamos licencia de uso, la información no haya sido expuesta previamente y que la información obtenida no se utilice para la comercialización de un programa sustancialmente similar el cual infrinja los derechos de autor.
En nuestro caso principalmente es útil para aprender a desarrollar código viendo ejemplos reales.
Sacar el código de un APK
Si la aplicación es Open Source solo tienes que buscar el código fuente que normalmente se cuelga en repositorios tipo GitHub. Si no es Open Source vamos a tener que hacer lo siguiente:
Para poder leer el código de un archivo con extensión .apk necesitamos varias herramientas y para empezar necesitamos el susodicho archivo APK de la aplicación. Para conseguirlo podemos buscarlo en los repositorios de aplicaciones online o si tenemos la aplicación instalada en el dispositivo podemos extraer la APK desde un explorador de archivos.
A partir de aquí hay varios métodos, varios caminos que llevan más o menos al mismo resultado. Aquí os expongo el que me resulta más sencillo.
Descarga dos herramientas que vamos a necesitar posteriormente. Una es un archivo para exportar las clases del APK a un archivo java con extensión .jar dex2jar. Y una aplicación para leer los archivos con extensión .jar JD-GUI, disponible para diferentes sistemas.
Haz una copia del archivo APK de la aplicación y cambia la extensión de .apk a .zip. Guárdalo.
Abre el archivo .zip y extrae el archivo classes.dex. Coloca este archivo en la carpeta descomprimida de dex2jar.
En un lugar vacío de la carpeta pulsa el botón derecho del ratón a la vez que presionas en el teclado shift (en Windows). Del menú elige 'Abrir aquí una ventana de comandos'.
En la consola que se acaba de abrir introduce el siguiente comando 'd2j-dex2jar.bat classes.dex'. Pulsa intro y después de unos segundos en la misma carpeta encontraras un nuevo archivo llamado 'classes-dex2jar.jar'. Como alternativa puedes usar la plataforma online APK decompiler.
Con este nuevo archivo 'classes-dex2jar.jar' podemos explorar el código fuente de la aplicación y ver todas sus clases con el programa JD-GUI.
Descomprime el archivo .zip con el JD-GUI y ejecuta el archivo .exe que encontrarás en su carpeta. Una vez que arranca el programa. Selecciona el icono para abrir un archivo o entra en File > Open file... elige el archivo 'classes-dex2jar.jar' que se encuenta en la carpeta de dex2jar y ábrelo.
Podrás ver las librerías que usa la aplicación y las clases que tiene
Problemas que pueden surgir con el código
Las herramientas de ingeniería inversa no suelen conseguir el código original al 100%. Hay un cierto desfase entre el código que se escribe y el código que se recupera. Por lo general los creadores de una aplicación no le gusta que terceros puedan jugar con el código que tanto trabajo les ha llevado desarrollar.
Para proteger el código de las aplicaciones Google creó hace unos años una herramienta llamada ProGuard. Esta herramienta optimiza el código de la aplicación y lo protege de una posterior ingeniería inversa. Hoy en día la mayoría de las aplicaciones suelen tener el código optimizado con ProGuard así que el código puede ser muy complicado de entender por la perdida de organización.
¿Has querido saber alguna vez que hace de verdad una aplicación?
Me podrias darme tu correo psra hacerte unas pregunticas
Al inicio solo pense en ver el codigo como ejemplo y tomar muchos ejemplos, pero luego me imagine en en inyectar codigo en la aplicacion osea vulneralna. Asi que mi proxima investigacion es: como se inyecta informacion sobre una apk ya instalada.
buenas tardes muy bueno el tutorial, pero no puedo completar el paso de convertir el archivo 'classes.dex' en un jar porque me sale un error en la ventana de comandos que dice: "java" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable. NO puedo avanzar más de allí. Ayuda
Me pasa lo mismo de ahi no puedo avanzar... Alguien nos poderia ayudar por favor?
Estimado, eso ocurre porque de momento en tu pc no se reconoce el lenguaje de programación java dentro de tu consola de comandos y por eso puede que el codigo este bien escrito pero el compilador cmd no lo reconoce como lengua del pc. Para solucionarlo debes descargar e instalar el jdk de java que se descarga gratis por oracle.org creo.. y luego. Una vez instalada una carpeta de jdk en tu pc debes ir a mi pc, click derecho, propiedades, configuración avanzada, opciones avanzadas, variables de entorno, y agregar una nueva variable para tu sistema. Te pedirá elegir una carpeta... Selecciona la carpeta donde instalaste el jdk,por lo general es en program files/java/jdk.versionx/bin es importante que dejes seleccionada la carpeta bin... Una vez que la agreges reinicia tu pc y ahora en tu consola podras escribir ciertos comandos usando java (creo que no puedes usar como IDE la consola.. es por eso que no reconoce todos los códigos que escribas por mas que este en java.. pero algunas acciones puntuales como la de este post si que podras.. saludos desde Chile.
Desde aquí se puede descargar el JDK http://www.oracle.com/technetwork/es/java/javase/downloads/index.html
muy buen, tutorial...te felicito
Deberia ser:
Hoy en día la mayoría de las aplicaciones que "NO", son open source suelen tener el código optimizado con ProGuard así que el código puede ser muy complicado de entender por la perdida de organización.
Si es Open Source es que su código fuente esta disponible para ser leído.
Luis por favor me envías un correo a Marcostatocarrero@gmail.com. necesito hacerte una consulta
Le puede contactar a traves de la pagina tambien, http://www.androidpit.es/usuario/6970559/luis-ortega y luego enviar mensaje, eso solo le llega a el.
gracias iñaki
La verdad que no me interesa pero igual gracias
Muchas gracias Luis. Interesante articulo. Saludos
Interesante articulo @Luis, jijiji, habrá que probarlo, algo me dice que veré cosas curiosas ...
A menos que fuera programador o hacker me serviría descomprimir los APK.
Algo me dice que a @Luis se le ocurrió el artículo por un hilo en el foro 😀😀
Algo me dice lo mismo jajaja
._. En vez de eso, mejor hago mi propia app
No termino de entender de que sirve sacar el codigo fuente ._.