Mitigación de Ingeniería Inversa en Apps Android

Fecha de publicación:
Última actualización: 2021-07-07
Autor:

 

No es posible evitar que una aplicación móvil sea descompilada y su funcionamiento interno sea expuesto. El propósito de la ingeniería inversa puede ser el uso ilegal del aplicativo (piratería informática), explotación de sus posibles vulnerabilidades, entre otros efectos perjudiciales para el desarrollador y los usuarios legales. Existen métodos de protección, los cuales encriptan el código del aplicativo, pero dicho código eventualmente es desencriptado por el mismo aplicativo para poder ser ejecutado en la máquina virtual Dalvik de Android. Por eso, el título de este artículo hace referencia a la mitigación, no a la prevención. Los desarrolladores de apps Android, especialmente las apps comerciales, pueden tomar medidas para que la ingeniería inversa resulte ser más compleja y dispendiosa. De esta manera se logra diferir y minimizar el impacto. Por ejemplo, si fuera necesario invertir varias semanas de esfuerzo para romper la protección anti-copia de un videojuego, es probable que una nueva versión del juego sea liberada antes de que se logre piratear la anterior.

Ingeniería inversa Android

 

No confíe en las soluciones genéricas

Un error común consiste en asumir que una protección comercial de tipo DRM o afín puede ser más afectiva que desarrollar un sistema anti-copia propio. El uso de librerías comerciales para protección de apps puede simplificar la labor de los piratas. Tan pronto se identifique la referencia de la librería comercial, una simple búsqueda en los foros especializados en ingeniería inversa podrá arrojar los pasos exactos para desactivar dicha protección. En cambio, crear un sistema anti-copia propio puede complicar mucho más este proceso. Algunas compañías de software han contratado a hacker éticos para crear sus propios sistemas de protección avanzados. Por ejemplo, en los años 2000 la compañía canadiense SSG había contratado los servicios del hacker ético Kris Kaspersky para implementar un sistema anti-copia de CD.

Inclusive sin recurrir al conocimiento de los hacker más expertos, es posible implementar mecanismos anti-piratería efectivos. A continuación se comparten recomendaciones que han demostrado su efectividad en diversos proyectos de apps.

 

La estrategia del señuelo

Una buena táctica es hacerle creer al reverser (en inglés, reverser hace referencia a quien practica la ingeniería inversa) que el algoritmo es simple. Por ejemplo:

if(!isRegistered()){
   Toast.makeText(ctx,
      "Error de registro", 0).show();
   // ...
}
 

Una manipulación mínima de este código sería suficiente para que la copia pirata del aplicativo funcione como si estuviera debidamente registrada. Eso es lo que debería de creer quién haya descompilado este código. Lo ideal es que el aplicativo realmente funcione de manera correcta durante algún tiempo. Por ejemplo, la compañía de videojuegos Aterdux había sacado al mercado un juego con esta misma táctica del señuelo. Los piratas lograron hackearlo rápidamente, pero luego se supo que la versión pirata funcionaba sólo hasta cierto punto de la campaña del juego. Más adelante se realizaba una nueva comprobación de autenticidad. Entonces, lo que realmente lograron los piratas fue convertir el juego en una especie de "demo".

La estrategia del señuelo, si se usa de manera inteligente, puede generar una gran frustración en quienes pretenden usar la app de manera ilegal.

 

Trasladar la funcionalidad de la app

Esto significa alojar de manera externa parte o toda la funcionalidad del aplicativo. El concepto no es nuevo. Por ejemplo, en los años 90 la compañía Rainbow Tech comenzó a alojar bloques funcionales de aplicativos ejecutables en dispositivos llamados dongle, los cuales se conectaban al puerto de impresora del PC. La misma idea se aplica hoy en día en los dispositivos de seguridad llamados token. En el caso de un teléfono móvil la SIMcard puede hacer las veces de token. Es muy difícil replicar la información que se encuentra almacenada en el interior de un dispositivo de seguridad. Algunos proveedores como Ubirch implementan algoritmos de blockchain utilizando la SIMcard. Esta tecnología se desarrolló para garantizar la autenticidad (ej: el registro de un usuario en la red celular, la propiedad de una cuenta bancaria, la telemetría, etc.) El mismo principio se puede usar para proteger la licencia de una aplicación.

Sin embargo, puede ser más simple y efectivo trasladar una parte o toda la funcionalidad de la app hacia la nube. La app podría ser una simple interfaz de usuario para acceder a un servicio que se ejecuta en un servidor en Internet.

Esta estrategia es utilizada por las compañías de desarrollo de software más grandes. Además, se puede decir que las apps de los bancos funcionan de ese modo, ya que las transacciones son procesadas por los sistemas bancarios en línea.

No en todos los casos puede ser posible que la app tenga acceso a Internet para verificación de autenticidad. Por ejemplo, el acceso a Internet puede ser limitado o demasiado costoso a bordo de un avión, entre otros medios de transporte. Otro detalle importante a tener en cuenta es que una falla en la nube puede dejar sin servicio a todos los usuarios legales del aplicativo.

 

Minimizar el impacto

Anti-piratería en AndroidSi la app se actualiza frecuentemente y su costo es bajo, esta app no sería particularmente atractiva para los piratas. Sin embargo, inclusive las apps gratuitas pueden ser distribuidas ilegalmente. Los piratas pueden contaminar las apps con diferentes tipos de malware para luego sustraer la información personal de los usuarios, claves, etc.

Se recomienda generar conciencia en los usuarios, explicando los riesgos que conlleva la instalación de apps provenientes de fuentes no oficiales.