jueves, septiembre 26, 2024

Deshacer las .apk para obtener el "source code" de una aplicación Android

Está Escrito:

El es Todopoderoso, al cual no alcanzamos, grande en poder; Y en juicio y en multitud de justicia no afligirá. Lo temerán por tanto los hombres; El no estima a ninguno que cree en su propio corazón ser sabio. (Job 37:23-24)

Hoy voy a hablaros de como obtener el código fuente (o como se conoce más comúnmente, el source code) de una .apk. A veces, yo, como desarrollador de aplicaciones, me gusta "espiar" (sí queréis el término que yo uso, es "mirar el trabajo de los otros para aprender y aplicarlo al mío propio", pero que vamos, viene a ser lo mismo) el trabajo de los demás. Pero hay una barrera, que se llama .apk. Que yo sepa, no existe ningún editor de código que pueda leer los .apk y abrirlos como si fuera un source code, para poder leerlos, y por eso, tenemos que usar técnicas un poco más "oscuras" y deshacer esos .apk para convertirlos en source code.


Bien, demasiada explicación aburrida, vayamos manos a la obra.
¿Qué vamos a necesitar?

  • Un programa que se llama apktool (¿original, eh?). La copia que os doy es una preparada por mí :).
  • Otro programa para leer el source code (Yo usaré Eclipse configurado con el ADT de Android (o si queréis ahorraros todo el paso de intalar el JDK, y las ADT y todo, usad el ADT-Bundle de Android)). Vosotros podéis usar Netbeans o lo que queráis.
  • Descargar el .apk que queramos descomprimir.
  • Otro programa para leer .jar y descomprimir las clases. Yo uso el JD-GUI.
Bien, empecemos instalando el apk tool. Ya que es un poco "complicado", os voy a enseñar cómo se hace. 
  1. Nos descargamos el archivo que he preparado (este).
  2. Lo descomprimimos y ponemos la carpeta en C:\Windows.
  3. Y ya está. No era tan complicado, ¿eh? ;).
Vamos a usarlo. Os he dejado dos archivos preparados. Uno que se llama cmd.lnk y otro que se llama Procedure.txt. Procedures es por sí alguna vez tenemos alguna duda de lo que debemos hacer.

Os voy a explicar como funciona. Voy a usar una app propia que hice para un amigo que se llama Drama Button y que podéis descargar, si queréis, aquí (es una tontería realmente, pero es divertida). Empecemos.

  1. Ejecutamos el cmd.lnk como administradores (Click derecho -> Ejecutar como administrador).
  2. Os debería salir una línea de código que ponga C:\Windows\apktool1.5.2>. Si no os sale, escribís "cd C:\Windows\apktool1.5.2" y le dais a enter. 
  3. Una vez aquí, es útil copiar y pegar el archivo que queremos descomprimir dentro de la misma carpeta del apktool. Cuando lo tenemos dentro, escribimos apktool d NombreDelArchivo.apk. Como ya os he dicho, en mi caso estoy usando una app que se llama DramaButton.apk, así que se vería así: 
    CMD en el paso 3
    CMD en el paso 3.
  4. Ejecutamos y obtenemos una carpeta:
  5. CMD y Carpeta nueva en el paso 4
    CMD y Carpeta nueva en el paso 4
  6. Ahora vamos a ejecutar el siguiente comando para obtener las clases de la app. Escribimos jar xvf NombreDelArchivo.apk classes.dex y se nos creará un archivo que se llamará classes.dex 
    CMD y classes.dex en el paso 5
    CMD y classes.dex en el paso 5
  7. Es raro que alguien conozca que es el archivo .dex, así que vamos a pasarlo a .jar para poder pasarlo al JD-GUI y poder leer las clases. Escribimos dex2jar classes.dex y se nos crea un archivo que se llama classes_dex2jar.jar. 
    CMD y classes_dex2jar.jar en el paso 6
    CMD y classes_dex2jar.jar en el paso 6
  8. Abrimos el JD-GUI y arrastramos el archivo classes_dex2jar.jar al programa. Veremos esto: 
    JD-GUI
    JD-GUI
  9. Damos doble click en "MainActivity" y se nos abre. Ahora si queremos llevarlo a Eclipse para unirlo con los res, le damos a "File->Save All Souces" y lo guardamos cómo y donde queramos. Lo descomprimimos y vamos a la carpeta que se nos ha creado en el paso 4 (C:\Windows\apktool1.5.2\NombreDelArchivo) y creamos una carpeta que se llame src. Copiamos y pegamos las carpetas del zip que nos ha creado el JD-GUI. 
  10. Ahora simplemente, abrimos Eclipse, le damos a "File->Import" y se nos abre una ventana. Vamos a la carpeta Android y le damos a "Existing Android Code Into Workspace". Clicamos en next, y como root directory pondremos el de la aplicación extraída, es decir: C:\Windows\apktool1.5.2\NombreDelArchivo. Se nos creará un project nuevo y tendremos ahí los res y el código. 
  11. Nota final: Muchas veces hay errores de compatibilidad o de archivos que faltan o lo que sea. El apktool no es perfecto. Yo recomiendo leer los archivos de java desde el JD-GUI, ya que es lo mismo y es más cómodo. Pero esto ya, a vuestra elección.
En unos 5 minutos si somos lentos y vamos leyendo y haciendo poco a poco, hemos obtenido el source code de cualquier aplicación que queramos ver. 

A mí me ha ayudado muchas veces para ver cómo la gente programa las cosas y espero que os sea útil a vosotros también.

Muchas gracias por leerme un día más.

¡Saludos a todos!

No hay comentarios.: