¿Debes ofuscar una aplicación comercial de .Net?

Estaba pensando en ofuscar una aplicación .Net comercial. Pero, ¿realmente vale la pena el esfuerzo seleccionar, comprar y usar una herramienta de este tipo? ¿Están los binarios ofuscados realmente a salvo de la ingeniería inversa?

Puede que no tenga que comprar una herramienta: Visual Studio.NET viene con una versión de comunidad de Dotfuscator. Aquí se enumeran otras herramientas de ofuscación gratuitas que pueden satisfacer sus necesidades.

Es posible que los binarios ofuscados no sean seguros contra ingeniería inversa, al igual que es posible que su candado de bicicleta sea rompible / elegible. Sin embargo, a menudo ocurre que un pequeño inconveniente es suficiente para disuadir a los ladrones de códigos / bicicletas.

Además, si alguna vez llega el momento de hacer valer sus derechos sobre una pieza de código en la corte, el hecho de haber hecho un esfuerzo para protegerla (al ofuscarla) puede otorgarle puntos adicionales. 🙂

Sin embargo, debe tener en cuenta los inconvenientes: puede ser más difícil usar la reflexión con código ofuscado, y si está utilizando algo como log4net para generar partes de líneas de registro basadas en el nombre de la clase involucrada, estos mensajes pueden convertirse en mucho más difícil de interpretar.

Recuerde que la ofuscación es solo una barrera para el examinador ocasional de su código. Si alguien toma en serio lo que ha escrito, le será muy difícil detenerlo.

Si tiene secretos en su código (como contraseñas), lo está haciendo mal.

Si te preocupa que alguien pueda producir tu propio software con tus ideas, tendrás más suerte en el mercado al proporcionar las nuevas versiones que tus clientes quieran, con asistencia técnica y siendo un socio para ellos. Buen negocio gana.

En nuestra compañía evaluamos varias tecnologías diferentes de ofuscación, pero todas tuvieron problemas. El mayor problema fue que confiamos mucho en la reflexión, por ejemplo, para crear dinámicamente grillas basadas en nombres de propiedades.

Así que todos los ofuscadores cambian el nombre de las cosas, puedes desactivarlas, por supuesto, pero luego pierdes mucho el beneficio de la ofuscación.

Además, en nuestro código tenemos muchas pruebas de NUnit que se basan en que muchos de los métodos y propiedades son públicos, esto impidió que algunos de los ofuscadores pudieran ofuscar esas clases.

Al final, nos decidimos por un producto llamado .NET Reactor

Funciona muy bien, y no tenemos ninguno de los problemas asociados con los otros productos.

“A diferencia de los ofuscadores .NET Reactor detiene por completo cualquier descomstackción mezclando cualquier ensamblado .NET puro (escrito en C #, VB.NET, Delphi.NET, J #, MSIL …) con código de máquina nativo. En detalle, Reactor .NET construye una pared nativa entre piratas informáticos potenciales y su código .NET. El resultado es un archivo estándar basado en Windows, no compatible con MSIL. El código .NET original permanece intacto, bien protegido por código nativo e invisible para miradas indiscretas. el código no se copia en el disco duro en ningún momento. No hay ninguna herramienta que pueda descomstackr los ensamblados protegidos de .NET Reactor “.

El hecho de que realmente puedas hacer ingeniería inversa no hace que la ofuscación sea inútil. Aumenta la barra significativamente.

Un ensamblado .NET no difuminado le mostrará todo el origen, resaltado y todo simplemente descargando el reflector .NET . Agregue ofuscación a eso y reducirá significativamente la cantidad de personas que podrán modificar el código.

Depende de ti te estás protegiendo. Si lo envía sin ser descifrado, también podría abrir la aplicación de código fuente y beneficiarse de la comercialización. Enviarlo ofuscado solo permitirá a las personas generar fácilmente binarios modificados a través de parches en lugar de poder robar su código y crear un competidor directo. Obtener la fuente real del código ofuscado es muy difícil, dependiendo del ofuscador, por supuesto.

Creo que depende del tipo de tu producto. Si está dirigido a ser utilizado por los desarrolladores, la ofuscación dañará a sus clientes. Hemos estado utilizando los productos de ArcGIS en el trabajo, y todas las DLL están ofuscadas. Hace que nuestro trabajo sea mucho más difícil, ya que no podemos usar Reflector para descifrar comportamientos extraños. Y estamos comprando clientes que pagaron miles de dólares por el producto.

Entonces, por favor, no te ofusques a menos que realmente tengas que hacerlo.

Cosas que debes tener en cuenta:

  • La ofuscación no protege su código o lógica. Simplemente hace que sea más difícil de leer y entender.
  • La ofuscación no se detiene en la ingeniería inversa. Simplemente ralentiza el proceso.
  • Su propiedad intelectual está protegida por la ley en la mayoría de los países. Entonces, si un competidor usa su código o implementación específica, puede demandarlo.

La única ofuscación de problema que puede resolver es que alguien crea una copia 1: 1 (o cerca de 1: 1) de su implementación específica.

También en un mundo ideal, la ingeniería inversa de una aplicación ofuscada es poco atractiva desde el punto de vista económico.

Pero volviendo a la realidad:

  • No existe ninguna herramienta en este planeta que impida que alguien copie las interfaces de usuario, los comportamientos o los resultados que cualquier aplicación proporcione o produzca. La ofuscación es en estas situaciones 100% inútil
  • El mejor ofuscador del mercado no puede evitar el uso de algún tipo de desensamblador o editor hexadecimal y para algunos geeks esto es bastante bueno para buscar en el corazón de una aplicación. Es más difícil que en un código discreto.

Entonces, la realidad es que puede hacer que sea más difícil y tome más tiempo examinar su aplicación, pero no obtendrá una protección confiable. Independientemente de si usa un producto gratuito o comercial.

Las tecnologías avanzadas como la ofuscación del flujo de control o la virtualización del código pueden ayudar a hacer que la comprensión de la lógica a veces sea muy difícil, pero también pueden causar muchos problemas divertidos y difíciles de resolver o resolver. Entonces, a veces son más como un problema adicional que una solución.

Desde mi punto de vista, la ofuscación no vale el dinero que algunas compañías cobran por sus productos. Si quieres molestar a los desarrolladores ocasionales, los ofuscadores de código abierto son lo suficientemente buenos. Si desea que sea lo más difícil posible analizar el núcleo de sus aplicaciones, debe usar contenedores criptográficos con entornos de ejecución virtual y sistemas de archivos virtuales, pero también proporcionan vectores de ataque y también pueden ser una fuente de problemas para una bolsa llena de problemas. .

Su propiedad intelectual y sus productos están en la mayoría de los países protegidos por la ley. Entonces, si hay un competidor analizando y copiando su código, puede demandarlo. Si un chico malo o un pirata informático o un pirata informático toman tu aplicación, te piden una broma, pero un ofuscador no hace la diferencia.

Por lo tanto, primero debe pensar en sus objectives, su mercado y lo que quiere lograr con un ofuscador. Como puede leer aquí (y en otros lugares), la ofuscación en realidad no resuelve el problema de la ingeniería inversa. Solo hace que sea más difícil y consume más tiempo. Pero si esto es lo que quieres, puedes echar un vistazo a los ofuscadores de código abierto como, por ejemplo, sharpObfuscator u obfuscar, que pueden ser lo suficientemente buenos para molestar a los codificadores casuales (puedes encontrar una lista aquí: Lista de offuscadores .NET en Wikipedia ).

Si es posible en su escenario, también podría estar interesado en SaaS-Concepts. Esto significa que proporciona acceso a su software, pero no al software en sí. Por lo tanto, el cliente normalmente no tiene acceso a sus ensamblajes. Pero dependiendo del nivel de servicio, la seguridad y la base de usuarios, puede ser costoso, complejo y difícil realizar un servicio SaaS confiable, confiable y de alto rendimiento.

No, se ha comprobado que la ofuscación no impide que alguien pueda descifrar el código comstackdo. Hace que sea más difícil hacerlo, pero no imposible.

Estoy muy cómodo leyendo el código de ensamblaje x86, ¿qué hay de las personas que trabajan con ensamblaje desde hace más de 20 años?

Siempre encontrarás a alguien que solo necesita un minuto para ver qué está haciendo tu código c o c …

Solo una nota para cualquier persona que lea estos años más tarde: acabo de leer la licencia de Dotfuscator Community Edition (que viene con VS2008) hace unas horas, y creo que no puede usar esta versión para distribuir un producto comercial u ofuscar el código de un proyecto que involucra a cualquier desarrollador que no sea usted mismo. Entonces, para los desarrolladores de aplicaciones comerciales, es solo una versión de prueba.

… snip … estos mensajes pueden ser mucho más difíciles de interpretar

Sí, pero la edición de comunidad gratuita que viene con Visual Studio tiene una funcionalidad de mapa. Con eso puedes hacer un seguimiento de los nombres de métodos ofuscados a los nombres originales.

He tenido éxito al colocar la salida de un ofuscador libre en un ofuscador diferente . En Dotfuscator CE, solo se incluyen algunos de los trucos de ofuscación, por lo que usar un segundo ofuscador que tiene diferentes trucos lo ofusca más.

Es bastante simple aplicar ingeniería inversa a una aplicación .NET utilizando .Net reflector , ya que la aplicación generará código VB, VC y C # directamente desde MSIL, y es posible extraer todo tipo de gems útiles.

Los ofuscadores de código ocultan el código bastante bien en la mayoría de los hacks de ingeniería inversa, y sería una buena idea utilizarlo en un código propietario y competitivo que agregue valor a su aplicación.

Hay un artículo bastante bueno sobre la ofuscación y su funcionamiento aquí

Esta publicación y la pregunta que la rodea tienen alguna discusión que podría ser valiosa. No es un problema de sí o no.