Cómo ofuscar código en tus apps Android

2

En muchas ocasiones te hemos hablado sobre cómo modificar una aplicación Android desarrollada por otro usuario para cambiar algún icono, corregir algún bug o incluso incluir alguna nueva funcionalidad.

Esto, que normalmente se aplica a programas de sistema, que son los que se alojan en la partición /system, puede aplicarse igualmente al resto de aplicaciones lo que, en caso de que seas un desarrollador, puede no resultarte especialmente divertido, ya que posibilita que cualquiera decompile tu aplicación y tenga acceso a su código fuente (si bien el código decompilado no es especialmente sencillo de leer) obteniendo información de primera mano sobre cómo implementas determinadas funciones que pueden haberte costado un esfuerzo considerable.

Afortunadamente, existen herramientas que, si bien no impiden que la aplicación sea decompilada, realizan complejas transformaciones en su código que impiden que éste pueda ser entendido incluso por alguien acostumbrado a su lectura.

Banner con las instalaciones de Google

La herramienta para ofuscar el código en Android es Proguard, que se integra perfectamente con Eclipse, que si bien no es el único IDE que permite desarrollar apps para este sistema, tal como ya te comentamos hace algunas semanas, sí que es el más usado.

Así, para usar Proguard (en Eclipse) tan sólo deberás seguir unas pequeñas instrucciones:

  1. Editar el archivo project.propierties de tu proyecto, que se encuentra en el directorio raíz del mismo y descomentar la línea que indica el path de los archivos de configuración de Proguard (es la línea que empieza con proguard.propierties=) que por defecto son dos: uno global y situado en el path del propio SDK y otro local al proyecto.
  2. Editar el archivo proguard-project.txt de tu proyecto, que también se encuentra en el directorio raíz del mismo e incluir la configuración que creas conveniente (no incluir nada ya es suficiente).

Al usar Proguard debes tener en cuenta que, por eficiencia, el código no es ofuscado cuando ejecutas en el emulador, por lo que el apk que se encuentra en el directorio bin de tu proyecto mostrará el código tal cual, sin transformaciones de ningún tipo, las cuales sólo se aplican cuando exportas el binario mediante el comando export (menú Fileexport).

Adicionalmente, deberás tener en cuenta que los mensajes de error (excepciones) que almacene el sistema sobre tu aplicación no incluirán información fácilmente interpretable, ya que se eliminan los números de línea y los nombres de clases y funciones se ofuscan, por lo que los logs de los usuarios no serán excesivamente útiles; por lo que, si bien es posible llegar a interpretarlos, lo más sencillo es, seguramente, forzar a que estos logs incluyan la información original, para lo que debes incluir la siguiente línea en el archivo de configuración local de Proguard.

-keepattributes SourceFile,LineNumberTable

Por otro lado, si tu proyecto utiliza librerías externas tales como la archiconocida ActionBarSherlock, deberás impedir que las clases relacionadas con dichas librerías se ofusquen, lo que en el caso de la mencionada librería se hace incluyendo las siguientes líneas.

-keep class android.support.** { *; }

-keep interface android.support.** { *; }

-keep class com.actionbarsherlock.** { *; }

-keep interface com.actionbarsherlock.** { *; }

Finalmente, en caso de que tu aplicación muestre publicidad mediante Google Ads, deberás incluir una línea adicional que inactiva un warning en Eclipse.

-dontwarn com.google.ads.**

2 comentarios

  1. Primero de todo felicitarte por el gran trabajo que realizas.. Gracias por compartir tus conocimientos con todos nosotros.

    Seguna, disculpa por abrir un hilo antiguo 😉

    Tercera y última, ¿como se puede utilizare el ofuscador SIN utilizar eclipse??

    Gracias dde antemano

Dejar respuesta

Please enter your comment!
Please enter your name here