En el post que publicamos ayer, pudisteis ver una explicación detallada en torno a la ofuscación de código. Hoy vamos a verlo desde una perspectiva práctica.

android_shadesProGuard. Instalación y configuración
Si trabajáis con eclipse ADT, no es necesaria instalación ya que viene integrado. Para configurarlo primero es necesario activarlo, esto se hace en el fichero “project.properties” descomentando la línea “proguard.config =${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”. Lo que hace esta línea es utilizar la plantilla de configuración de ProGuard almacenada en la ruta “RUTA_ SDK/tools/proguard/proguard-android.txt”. Esa plantilla está configurada sólo para ofuscación, si queréis también optimización habría que cambiarla por “RUTA_ SDK/tools/proguard/proguard-android-optimize.txt”, almacenada en el mismo directorio. A partir de ahí sólo queda añadir vuestra configuración particular y ProGuard la añadirá (muy importante: añade no machaca) a la plantilla y la ejecutará. Es recomendable revisar que la configuración de la plantilla se adecua a vuestro proyecto.

Modo release
Una cosa importante a tener en cuenta es que sólo se ofusca lanzando en modo “release” o exportando la aplicación con el “wizard” del Eclipse. Si tienes o no ofuscación se puede comprobar de forma rápida imprimiendo los nombres de los métodos o clases para verificarlo. Todo esto siempre en un dispositivo físico.

Ofuscación de cadenas de caracteres
Otro dato muy importante y que se menciona en la comparativa que ofrece Proguard en su web, es que no ofusca ni encripta cadenas de caracteres, así que si disponemos de claves en nuestro código seguirán tal cual después de la ofuscación.

Un truco para solventarlo es usar Android NDK para almacenar en nativo esas claves.

Android-NDK

Ficheros auto generados
Cuando se lanza una ofuscación automáticamente se genera una carpeta “proguard” en nuestro proyecto con varios ficheros: dump, mapping, seeds, usage. Todos en formato “.txt”.

  • El primero describe la estructura interna de todas las clases.
  • El segundo mapea los cambios.
  • El tercero lista lo que no se ofusca.
  • Y por último lo que se elimina.

Para empezar a solventar los inconvenientes comentados previamente que rodean al uso de ofuscadores en nuestro código haremos uso de las herramientas que nos ofrece Proguard para poder entender los “logs” ofuscados. Ejecutar el comando “retrace -verbose mapping.txt TU_FICHERO_DE_ LOG.txt” desde la ruta “RUTA_ SDK/tools/proguard/bin/” y mostrará la traducción de nuestro “log”.

Es importante saber que este fichero “mapping.txt” se machaca cada vez que se se hace una “release” por lo que hay que tener un exhaustivo control de versiones del mismo para evitar perder el mapeo de una versión modificada.

Herramienta gráfica
Si os apetece trastear disponéis de la aplicación gráfica que se encuentra en “RUTA_ SDK/tools/proguard/lib/proguardgui.jar”, se os abrirá una ventana donde podéis hacer uso de todas las herramientas de Proguard.

Conclusión
Como hemos visto es muy sencillo acceder al código fuente de nuestra aplicación y llegar a datos sensibles. Se pueden aplicar pseudo capas de seguridad pero, al final, ‘los malos’ con unos conocimientos técnicos pueden llegar a cualquier parte de nuestra aplicación. Es por ello que la lógica sensible de una aplicación Android no debe residir en la propia aplicación si no en una parte servidora, si la hubiera. Si no hubiera esa parte servidora y la lógica de la aplicación fuera sensible, la ofuscación por si sola no vale. Habría que complementarla con encriptación y otras técnicas de seguridad.

Saber más…
Si queréis saber más, o realizar alguna prueba, se recomienda revisar la documentación de Proguard que  viene en la carpeta “…/adt/sdk/tools/proguard” ahí encontrareis ayuda sobre la sintaxis de los ficheros, ejemplos de uso, etc.

Podéis encontrar también, información en este interesante artículo sobre la encriptación de aplicaciones Phonegap en iOS http://oleksiy.pro/2012/12/27/cordova-ios-security/

O consultar las siguientes referencias:

Proguard – Web Oficial: http://proguard.sourceforge.net/
Proguard – Comparativa ofuscadores: http://proguard.sourceforge.net/index.html#alternatives.html
Proguard – Android Developers: http://developer.android.com/tools/help/proguard.html
DexGuard – Web Oficial: http://www.saikoa.com/dexguard
Apache Cordova – Web Oficial: http://cordova.apache.org/#top
YUI – Web Oficial: http://yuilibrary.com/
Google Closure Tools – Web Oficial: https://developers.google.com/closure/
Google Closure Compiler – Web oficial: http://closure-compiler.appspot.com/home/
UglifyJS2: Web Oficial: https://github.com/mishoo/UglifyJS2/
YUI Online: http://refresh-sf.com/yui/

Román R. B. @ameu8