Saltar al contenido

¿Cómo evitar la ingeniería inversa de un archivo APK?

Solución:

1. ¿Cómo puedo evitar completamente la ingeniería inversa de un APK de Android? es posible?

AFAIK, no hay ningún truco para evitar por completo la ingeniería inversa.

Y también muy bien dicho por @inazaruk: Hagas lo que hagas con tu código, un atacante potencial puede cambiarlo de cualquier forma que considere factible.. Básicamente, no puede proteger su aplicación para que no se modifique. Y cualquier protección que coloque allí puede desactivarse / eliminarse.

2. ¿Cómo puedo proteger todos los recursos, activos y código fuente de la aplicación para que los piratas informáticos no puedan piratear el archivo APK de ninguna manera?

Sin embargo, puedes hacer diferentes trucos para dificultar la piratería. Por ejemplo, use ofuscación (si es código Java). Por lo general, esto ralentiza significativamente la ingeniería inversa.

3. ¿Hay alguna forma de hacer que la piratería sea más difícil o incluso imposible? ¿Qué más puedo hacer para proteger el código fuente en mi archivo APK?

Como todo el mundo dice, y como probablemente sepa, no hay seguridad al 100%. Pero el lugar para comenzar con Android, que Google ha incorporado, es ProGuard. Si tiene la opción de incluir bibliotecas compartidas, puede incluir el código necesario en C ++ para verificar el tamaño de los archivos, la integración, etc. Si necesita agregar una biblioteca nativa externa a la carpeta de la biblioteca de su APK en cada compilación, puede usarla según la sugerencia a continuación.

Coloque la biblioteca en la ruta de la biblioteca nativa que por defecto es “libs” en la carpeta de su proyecto. Si creó el código nativo para el ‘armeabi’ objetivo y luego ponlo debajo libs / armeabi. Si fue construido con armeabi-v7a luego ponlo debajo
libs / armeabi-v7a.

<project>/libs/armeabi/libstuff.so

AFAIK, no puede proteger los archivos en el directorio / res más de lo que están protegidos en este momento.

Sin embargo, hay pasos que puede seguir para proteger su código fuente, o al menos lo que hace, si no todo.

  1. Utilice herramientas como ProGuard. Estos ofuscarán su código y harán que sea más difícil de leer cuando se descompila, si no imposible.
  2. Mueva las partes más críticas del servicio de la aplicación a un servicio web, oculto detrás de un lenguaje del lado del servidor como PHP. Por ejemplo, si tiene un algoritmo que le ha costado un millón de dólares escribirlo. Obviamente, no quieres que la gente lo robe de tu aplicación. Mueva el algoritmo y haga que procese los datos en un servidor remoto, y use la aplicación para simplemente proporcionarle los datos. O utilice el NDK para escribirlos de forma nativa en archivos .so, que es mucho menos probable que se descompilen que los apks. No creo que exista un descompilador para archivos .so a partir de ahora (e incluso si lo hiciera, no sería tan bueno como los descompiladores de Java). Además, como @nikolay mencionó en los comentarios, debe usar SSL al interactuar entre el servidor y el dispositivo.
  3. Al almacenar valores en el dispositivo, no los almacene en formato sin procesar. Por ejemplo, si tiene un juego y está almacenando la cantidad de moneda del juego que el usuario tiene en SharedPreferences. Asumamos que es 10000 monedas En lugar de ahorrar 10000 directamente, guárdelo usando un algoritmo como ((currency*2)+1)/13. Entonces en lugar de 10000, ahorras 1538.53846154 en SharedPreferences. Sin embargo, el ejemplo anterior no es perfecto, y tendrá que trabajar para encontrar una ecuación que no pierda moneda por errores de redondeo, etc.
  4. Puede hacer algo similar para las tareas del lado del servidor. Ahora, por ejemplo, tomemos su aplicación de procesamiento de pagos. Digamos que el usuario tiene que realizar un pago de $200. En lugar de enviar un crudo $200 valor al servidor, envíe una serie de valores predefinidos más pequeños que sumen $200. Por ejemplo, tenga un archivo o tabla en su servidor que equipare palabras con valores. Así que digamos que Charlie corresponde a $47, y John para $3. Entonces en lugar de enviar $200, puedes enviar Charlie cuatro veces y John cuatro veces. En el servidor, interprete lo que significan y súmelo. Esto evita que un hacker envíe valores arbitrarios a su servidor, ya que no saben qué palabra corresponde a qué valor. Como medida adicional de seguridad, también podría tener una ecuación similar al punto 3 para esto y cambiar las palabras clave cada n número de días.
  5. Finalmente, puede insertar código fuente inútil aleatorio en su aplicación, de modo que el hacker esté buscando una aguja en un pajar. Inserte clases aleatorias que contengan fragmentos de Internet, o simplemente funciones para calcular cosas aleatorias como la secuencia de Fibonacci. Asegúrese de que estas clases se compilen, pero que no las utilice la funcionalidad real de la aplicación. Agregue suficientes de estas clases falsas y el pirata informático tendrá dificultades para encontrar su código real.

Con todo, no hay forma de proteger su aplicación al 100%. Puedes hacerlo más difícil, pero no imposible. Su servidor web podría verse comprometido, el pirata informático podría descubrir sus palabras clave al monitorear múltiples cantidades de transacciones y las palabras clave que envía, el pirata informático podría revisar minuciosamente la fuente y averiguar qué código es falso.

Solo puedes contraatacar, pero nunca ganar.

En ningún momento de la historia de la informática ha sido posible evitar la ingeniería inversa del software cuando le da una copia de trabajo a su atacante. Además, lo más probable es que nunca sera posible.

Con eso entendido, hay una solución obvia: no le dé sus secretos a su atacante. Si bien no puede proteger el contenido de su APK, lo que pueden proteger es cualquier cosa que no distribuyas. Por lo general, este es un software del lado del servidor que se usa para cosas como activación, pagos, aplicación de reglas y otros jugosos bits de código. Puede proteger activos valiosos no distribuyéndolos en tu APK. En su lugar, configure un servidor que responda a las solicitudes de su aplicación, “use” los activos (sea lo que sea que eso signifique) y luego envíe el resultado a la aplicación. Si este modelo no funciona para los activos que tiene en mente, es posible que desee reconsiderar su estrategia.

También, si su objetivo principal es prevenir la piratería de aplicaciones: ni siquiera te molestes. Ya ha gastado más tiempo y dinero en este problema de lo que cualquier medida contra la piratería podría esperar salvarlo. El retorno de la inversión para resolver este problema es tan bajo que no tiene sentido ni siquiera pensar en ello.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *