miércoles, 6 de noviembre de 2013

Cómo decompilar y volver a compilar una aplicación de Android


Recientemente he descubierto una empresa que ofrece nada más y nada menos que 10 TB de almacenamiento en la nube de forma gratuita y sincronizada -podéis ver más detalles aquí-
El único pero que tiene es que tanto la página web como las aplicaciones de sincronización están únicamente en Chino y, teniendo en cuenta que este servicio lleva más de un año en marcha y que no está en otros idiomas -ni siquiera inglés-, a menos que conozcas Chino, es necesario traducir las aplicaciones.
Con la página web no hay tanto problema ya que navegadores como Chrome traducen en tiempo real de forma aceptable. Con las aplicaciones no tenemos tanta suerte pero afortunadamente descubrí que buena parte de los textos están almacenados en archivos XML. Basta cambiar estos archivos por unos traducidos -podéis descargarlas desde el enlace del otro post- y ya tenemos la aplicación traducida -parcialmente-

Un caso aparte ocurre con la aplicación para dispositivo móvil Android. En este caso, el formato es un archivo apk que no deja de ser un fichero comprimido en cuyo interior están los textos. El problema es que estos no están visibles directamente pero gracias al aporte de +Jean Carlos Concepcion, me enfocó la solución hacia la decompilación del archivo.

Esta técnica puede utilizarse para ingeniería inversa o crackear un programa pero en este caso lo utilizaremos para sustituir los textos escritos en Chino por Español




INTRODUCCION

No sólo será necesario decompilar la aplicación apk sino que una vez hechas las modificaciones, deberemos recompilar de nuevo la aplicación para obtener el instalador modificado.
El programa que permite hacer todos estos pasos se denomina Android ApkTool y es gratuito -licencia Apache 2.0-. Tenéis información detallada aquí https://code.google.com/p/android-apktool/ y está disponible tanto para linux, Mac como para Windows.

En esa página se explica el funcionamiento de la aplicación y las distintas opciones que ofrece pero es un programa que se ejecuta desde la línea de comandos por lo que su uso no es sencillo para los que no estén habituados al mundo de MS-DOS.

Existe una alternativa que encapsula la aplicación original con una interfaz gráfica de forma que todos los comandos y opciones las tenemos a golpe de clic.
El nombre de la aplicación es Android MultiTool y tenéis todos los detalles aqui: http://forum.xda-developers.com/showthread.php?t=2326604
Esta aplicación añade la posibilidad de decompilar y volver a compilar aplicaciones jar así como firmar digitalmente las aplicaciones apk compiladas -imprescindible para instalarlas en un dispositivo Android-. Para facilitar y verificar las operaciones, incluye un registro log con todas las acciones realizadas y sus resultados

REQUISITOS

Este tutorial explica los pasos para instalar y utilizar la aplicación en Windows -lo he probado en Windows 8 pero también está disponible para Windows 7 y XP-

Antes de nada deberemos tener instalados estos componentes en nuestro equipo:
  • Java: Algunos módulos que requiere ejecutar la aplicación están escritos en este idioma -jar-
  • Microsoft PowerPacks: Componente requerido para aplicaciones escritas en Visual Basic. Sin este componente, al intentar ejecutar la aplicación, o bien no aparece nada o nos saldrá un error indicando que el programa debe cerrarse.
  • .NET Framework: La aplicación requiere este framework.


INSTALACIÓN

A continuación descargaremos la aplicación según sea nuestro sistema operativo:
Nota: conviene descargarse las últimas versiones del post de XDA indicado arriba.
También deberemos tener en cuenta que si hacemos la descarga desde un navegador Chrome o Chromium, lo detectará como software malicioso!!!
Si lo pasáis por VirusTotal veréis que no es nada de eso.

Lo que nos descargaremos es un archivo zip que deberemos descomprimir en la raíz de nuestro disco duro. Si lo hacemos en subdirectorios, probablemente no funcione si estos contienen nombres con espacios en blanco.

Esto es lo que encontraremos en la carpeta C:\AndroidMultitool
  • Compiled_apk: Aquí se guardarán las aplicaciones recompiladas
  • Compiled _jar: Igual que antes pero para aplicaciones jar
  • Decompiled_apk: Directorio donde se guardará el apk decompilado
  • Decompiled_jar: Directorio de decompilación de archivos jari.
  • Files: Aquí deberemos depositar los archivos apk y jar originales
  • Log: En esta carpeta se guardan los logs.
  • Program_Files: Contiene los archivos binarios de Android ApkTool en los que se basa esta aplicación
  • Signed_apk: Aquí se guardan los archivos firmados digitalmente
  • AndroidMultiTool.exe: Este es el ejecutable de la interfaz gráfica el cual llamará a los archivos contenidos en Program_Files pasándole los parámetros necesarios.
Nota: Si tienes instalado el antivirus BitDefender, este detectará la aplicación exe como un archivo potencialmente peligroso por lo que deberemos indicarle que confiamos en él. Curiosamente esto sólo ocurre con la versión para XP/7

Este es el aspecto de la aplicación:



DECOMPILAR

El proceso no puede ser más sencillo.

  1. Copiar la aplicación a decompilar -apk o jar- en la carpeta C:\AndroidMultitool\Files
  2. Seleccionar el archivo desde la opción Decompile y el tipo de aplicación en el desplegable -apk/jar-
  3. Pulsar el botón Decompile.

El programa invocará a la aplicación ApkTool y,si no han habido errores, nos habrá decompilado la aplicación en la carpeta C:\AndroidMultitool\Decompiled_apk. Concretamente habrá creado una carpeta con el mismo nombre que el de la aplicación a decompilar.

Nota: El nombre de la apk no debe contener espacios en blanco ya que de lo contrario nos dará un error de que no encuentra el archivo.




En algunos casos es posible que para este proceso se requiera el framework-res.apk de nuestro dispositivo. Este archivo está ubicado en system/framework de nuestro teléfono.
Con un explorador root como EsEplorer podemos acceder a esta carpeta...


...  y descargarnos el archivo al directorio Files donde teníamos el apk a decompilar.


COMPILAR

Después de haber hecho las modificaciones al archivo decompilado deberemos recompilar la aplicación para obtener el nuevo fichero apk.
El proceso también es muy sencillo ya que basta con seleccionar la carpeta decompilada dentro de C:\AndroidMultitool\Decompiled_apk y pulsar el botón Compile



Tras finalizar el proceso, el archivo generado nos lo guardará en C:\AndroidMultitool\Compiled_apk.
Además el programa nos indica que deberemos copiar el archivo AndroidManifest.xml y la carpeta META-INF de la aplicación original a la nueva.


Para ello deberemos abrir ambos apk con un compresor tipo 7-ZIP, seleccionamos estos elementos y los arrastramos de la aplicación original a la recién compilada.
También es el momento de copiar archivos que el decompilador no ha incluido durante el proceso.
Normalmente esto queda reflejado en la carpeta de decompilación de nuestra aplicación bajo el nombre unknown.


Nota: en la imagen se puede apreciar a la izquierda el archivo recién compilado mientras que a la derecha tenemos el original.
El programa que utilicemos para abrir estos apk es importante. En mi caso suelo utilizar un compresor denominado HaoZIP pero no hacía correctamente la copia por lo que al final utilicé 7-ZIP


FIRMA

El último paso antes de poder instalar la aplicación en el dispositivo Android es firmarla digitalmente.
Este programa permite hacerlo de forma muy sencilla, bastando seleccionar la apk, y después pulsar el botón Sign.



ATENCION: La aplicación firmada se guarda en la carpeta C:\AndroidMultitool\Signed_apk. Esa es la aplicación que podemos instalar en nuestro dispositivo y aparecerá con el nombre del apk original seguido de la palabra signed.


INSTALACIÓN

Ya tenemos la apk recompilada y firmada lista para ser instalada en el dispositivo
Para ello deberemos copiar la aplicación en la SD y con un explorador de archivos seleccionarla. Automáticamente se instalará como una aplicación normal.

Nota: Para instalar aplicaciones fuera del Market, deberemos tener habilitados Orígenes desconocidos -dentro de ajustes -> aplicaciones-


OTRAS FUENTES

Estos son algunos links interesantes donde poder contrastar esta información.

http://forum.xda-developers.com/showthread.php?t=1891686
http://forum.xda-developers.com/showthread.php?t=1989533
http://apkmultitool.com/?q=node/5

Comentarios
2 comentarios
Para Comentar Elige el Sistema de Comentario de tu Agrado:
Comentarios Comentarios Comentarios