Introducción

 

La ingeniería inversa consiste en descubrir cómo se ha realizado un diseño a partir del producto disponible al público. En el mundo del software consiste en tomar como partida una aplicación y tratar de descubrir cómo funciona u obtener el código que se ha utilizado en su desarrollo.

Las empresas usan la ingeniería inversa para estudiar a la competencia y de esta manera mejorar sus propios productos. En el mundo del software la mayoría de las veces que se utiliza la ingeniería inversa es para tratar de evitar las comprobaciones de licencia que se incluyen en las aplicaciones comerciales, y de esta manera, poder utilizarlas de manera fraudulenta sin tener que pagar por ellas. Por supuesto, el objetivo de este capítulo no es este. Vamos a explicar varias técnicas de ingeniería inversa con el fin de que el lector conozca las vulnerabilidades, y así, pueda introducir técnicas que dificulten la ingeniería inversa en sus desarrollos. Existen otros ámbitos donde la ingeniería inversa estaría justificada, como aprender cómo funcionan internamente las cosas o descubrir comportamientos maliciosos de ciertas aplicaciones.

En este capítulo se puede dividir en dos partes, cómo realizar ingeniería inversa en Android y cómo intentar evitarla.

En la primera parte comenzaremos describiendo el formato APK utilizado para distribuir aplicaciones Android. Veremos cómo obtener estos ficheros, como analizarlos, cuál es su contenido y cómo se firman. Luego aprenderemos a decompilar el código de un APK. Veremos cómo obtener el código ensamblador de la máquina Dalvik y estudiaremos su diferencia con los byte codes de la máquina Java. También veremos que es posible obtener un código en Java similar al de la aplicación original. Esta parte termina describiendo como podemos modificar partes de la aplicación comercial. Veremos cómo modificar recursos binarios, recursos XML y el código.

En la segunda parte trataremos de evitar la ingeniería inversa. Primero aprenderemos a ofuscar el código y así evitar que sea fácilmente decompilado. Luego aprenderemos a utilizar el servicio de licencias de Google Play y así evitar usos no autorizados de nuestras aplicaciones.    

 Objetivos

  • Repasar el concepto de ingeniería inversa y aplicarlo a aplicaciones Android.
  • Mostrar varios mecanismos para impedir la aplicación de ingeniería inversa en nuestras aplicaciones.
  • Describir cómo se distribuyen las aplicaciones en ficheros APK y cuál es su contenido.
  • Comparar la máquina virtual Dalvik con la máquina virtual Java.
  • Ilustrar cómo podemos decompilar una aplicación Android tanto a ensamblador como a Java.
  • Mostrar cómo podemos modificar aplicaciones Android: tanto sus recursos binarios, recursos XML como su código.
  • Enumerar los pasos a seguir para ofuscar nuestras aplicaciones.
  • Describir el uso de licencias de Google Play para impedir usos fraudulentos de nuestras aplicaciones.
  • Aprender a introducir anuncios de Google Add Sense en nuestras aplicaciones.