¿Es realmente imposible proteger las aplicaciones de Android de la ingeniería inversa?


Como sabemos, las aplicaciones de Android están escritas en Java. En Java, no importa lo que haga, es imposible proteger el código compilado de la descompilación o la ingeniería inversa, ya que la pregunta de desbordamiento de pila ¿Cómo bloquear las clases Java compiladas para evitar la descompilación? sugiere.

¿Cómo se protegería una aplicación que contiene secretos comerciales algorítmicos de la ingeniería inversa?

Por "cómo" me refiero no solo a las técnicas de software, sino también a otros enfoques creativos.

Author: Community, 2010-12-02

10 answers

La primera parada para mí sería optimizar y ofuscar el código con ProGuard que se sabe que funciona con código de bytes dirigido a Android Dalvik VM (a través de Dex). Es una gran herramienta y puede aumentar la dificultad de' invertir ' su código mientras reduce la huella de su código (en algunos casos dramáticamente: un applet reciente mío pasó de unos 600 KB a unos 50 KB).

Como otros dicen, nunca obtendrá 100% de seguridad de su algoritmo detalles mientras su implementación se está distribuyendo a los clientes. Para eso, tendría que mantener el código solo en sus servidores. Los intentos de casi el 100% de seguridad para el código de cliente equivalen efectivamente a DRM y pueden hacer que su código de cliente sea frágil ante las interrupciones de la red y, en general, frustrar a los usuarios (legítimos).

El blog de desarrolladores de Android tiene algunos útiles artículos sobre la cuestión de las aplicaciones Android 'a prueba de manipulaciones' (y recomiendan el uso de ProGuard como parte del enfoque global).

Con respecto a los enfoques' creativos': algunos desarrolladores emplean técnicas de detección de depuradores para evitar el análisis en tiempo de ejecución y combinar esto con el cifrado de porciones de código binario (para disuadir el análisis estático), pero para ser honesto, un atacante lo suficientemente determinado puede eludir estos, mientras que puede causar frustración legítima al usuario, como se ilustra en el artículo de Windows KB Juegos: Mensaje De Error: Un Depurador Ha Sido Detectado: Descargue el Depurador e Inténtelo de nuevo. El software de DVD' Learn to drive ' de mi novia no se ejecutará bajo VirtualBox por esta razón, pero ella culpa a Linux, por supuesto!

OpenRCE y El artículo de Wikipedia sobre código ofuscado puede ser un buen punto de partida si desea profundizar en esto. Pero tenga cuidado, puede perder más a través del uso celoso de estas técnicas frustrando a sus usuarios de lo que lo haría a través de la pérdida de secretos comerciales por ingeniería inversa. Como dice Anton S , tal vez el enfoque más "creativo" radica en ajustar el modelo de negocio en lugar de la tecnología.

La última actualización del SDK de Android el 6 de diciembre de 2010 (coincidiendo con la versión de Android 2.3 Gingerbread):

Soporte ProGuard integrado: ProGuard ahora está empaquetado con las herramientas SDK. Los desarrolladores ahora pueden ofuscar su código como parte integrada de una compilación de lanzamiento.

 70
Author: willjcroz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:20

Si es posible: procedimiento remoto llama a un servidor bien protegido (el servidor tiene el código que desea proteger).

 13
Author: jcomeau_ictx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-18 21:39:59

Haga que sea tan barato molestarse y no construya su modelo de negocio sobre los secretos que se ejecutan en el lado del cliente. En otras palabras, no compartas tus secretos.

 6
Author: Anton S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-18 21:39:16

Es imposible proteger cualquier código del lado del cliente de la ingeniería inversa. Puedes usar formas más o menos eficientes de ofuscar tu código. Y el ensamblador x86 optimizado resulta ser una muy buena ofuscación.

Así que si tienes secretos algorítmicos ponlos en el lado del servidor.

 5
Author: CodesInChaos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-02 15:35:54

Cómo bloquear clases Java compiladas para evitar la descompilación

No puedes. Cualquier esquema puede ser derrotado por alguien con suficientes habilidades, tiempo y motivación.

(Por cierto, esto también se aplica al software que se compila en binario. La única diferencia está en la cantidad de esfuerzo involucrado en la descompilación.)

Mi pregunta es cómo se podría proteger una aplicación que contiene secretos comerciales algorítmicos de ¿ingeniería inversa?

Simplemente no instale la aplicación en el teléfono del usuario. O (más útil), ejecute el código que contiene los secretos comerciales en un servidor remoto (correctamente protegido).

 3
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-02 15:36:15

No puede proteger su aplicación completamente, ya que siempre habrá alguien que la descifrará...

Sin embargo, podría impedirles hacer esto haciendo que su aplicación sea gratuita, o al menos muy barata para que la gente no se moleste.

Alternativa, trate de mantener su aplicación de Android "tonto", como en mantener toda la lógica de negocio secreto en un servidor backend, y solo tiene que datos de visualización de la aplicación utilizando alguna forma de servicio expuesto.

 2
Author: Jimmy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-02 15:39:39

No importa lo que hagas, tal vez al menos puedas hacer que sea muy difícil descompilar, pero: Si algo se ejecuta/calcula en un programa, la información sobre el algoritmo tiene que estar ahí, y siempre habrá una posibilidad de averiguar cómo obtenerlo (se asume suficiente habilidad y motivación en el lado de tus oponentes). Siempre.

 1
Author: oezi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-18 21:41:26

Tengo mi algoritmo en un servidor e invoco ese servicio desde la aplicación de mi teléfono inteligente. Un perpetrador puede aplicar ingeniería inversa a mi aplicación de teléfono inteligente para ver mi protocolo con mi servidor. Puedo proteger mi algoritmo, pero no puedo protegerme contra el uso no autorizado de mi servicio. Tengo que aceptar esta realidad sin una solución. Tengo que contentarme con que mientras esté ganando dinero con mi propio servicio, entonces tengo que vivir con el potencial de que otros desvíen mi servicio.

 0
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-06 21:02:18

Si quieres un enfoque creativo, aquí hay uno.

¿Cuál es el programa principal en los teléfonos que no han sido descompilados hoy? Radio firmwares. ¿Por qué? No se ejecuta en el chipset ARM del teléfono, sino en un hexágono Qualcomm separado que está cada vez más presente en los teléfonos inteligentes. No es x86, no es ARM, utiliza una arquitectura e instrucciones propietarias de Qualcomm.

  • La descompilación de Java es fácil.

  • La descompilación del brazo es más difícil (Licencias de descompilador de rayos hexadecimales comience en 1129 USD... y la mezcla entre el código de pulgar y el código de brazo estándar en los binarios es un dolor) = > usted podría intentar compilar con el Android NDK.

  • ¡Actualmente no hay descompiladores hexagonales! Y las especificaciones de QDSP no están disponibles públicamente, incluso las versiones pirateadas.

La pregunta es, ¿puede un proveedor de software independiente utilizar el firmware Hexagon incluido en los teléfonos del mercado masivo? Parece ser la dirección Qualcomm tomar. Echa un vistazo a su sitio web y los productos SnapDragon.

NB: No soy pro-Qualcomm ni pro-closed-source. Pero este hilo apela a este tipo de solución.

 0
Author: KrisWebDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-27 18:54:09

Usted no puede 100% seguro que el código de Android de la ingeniería inversa. Si desea proteger alguna clave, puede tomar la ayuda de integrar el servidor que le da la clave cifrada mientras llama al servicio web y usar esa clave en su código.

 0
Author: M.Noman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-05 12:24:24