Estaba pensando en ofuscar una aplicación comercial .Net. ¿Pero realmente vale la pena el esfuerzo de seleccionar, comprar y usar dicha herramienta? ¿Los binarios ofuscados están realmente a salvo de la ingeniería inversa?
Es posible que no tenga que comprar una herramienta: Visual Studio.NET viene con una versión comunitaria de Dotfuscator. Otras herramientas de ofuscación gratuitas se enumeran aquí , y pueden satisfacer sus necesidades.
Es posible que los binarios ofuscados no estén a salvo de la ingeniería inversa, al igual que es posible que el bloqueo de su bicicleta sea rompible/seleccionable. Sin embargo, a menudo ocurre que un pequeño inconveniente es suficiente para disuadir a los ladrones de código/bicicleta.
Además, si alguna vez llega el momento de hacer valer sus derechos sobre una pieza de código en la corte, haber visto que se esfuerza por protegerlo (al ofuscarlo) puede darle puntos adicionales. :-)
Sin embargo, debe tener en cuenta las desventajas: puede ser más difícil usar la reflexión con código ofuscado, y si está usando algo como log4net para generar partes de líneas de registro basadas en el nombre de la clase involucrada, estos mensajes pueden convertirse Mucho más difícil de interpretar.
Recuerde que la ofuscación es solo una barrera para el examinador casual de su código. Si alguien se toma en serio averiguar lo que escribió, le será muy difícil detenerlo.
Si tiene secretos en su código (como contraseñas), lo está haciendo mal.
Si le preocupa que alguien pueda producir su propio software con sus ideas, tendrá más suerte en el mercado al proporcionar nuevas versiones que sus clientes deseen, con soporte técnico y al ser un socio para ellos. El buen negocio gana.
En nuestra empresa evaluamos varias tecnologías diferentes de ofuscación, pero todas tenían problemas. El mayor problema fue que confiamos mucho en la reflexión, p. para crear dinámicamente cuadrículas basadas en nombres de propiedad.
Entonces, todos los ofuscadores cambian el nombre de las cosas, por supuesto, puede deshabilitarlo, pero luego pierde gran parte del beneficio de la ofuscación.
Además, en nuestro código tenemos muchas pruebas de NUnit que dependen de muchos más métodos y propiedades que son públicas, 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 descompilación al mezclar cualquier ensamblaje .NET puro (escrito en C #, VB.NET, Delphi.NET, J #, MSIL ...) con código de máquina nativo. En detalle, .NET Reactor crea un muro nativo entre los posibles piratas informáticos 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 .NET original el código no se copia en el disco duro en ningún momento. No existe una herramienta que pueda descompilar los ensamblados protegidos con .NET Reactor ".
El hecho de que realmente pueda realizar ingeniería inversa no hace que la ofuscación sea inútil. Realmente eleva el listón significativamente.
Un ensamblado .NET no ofuscado le mostrará toda la fuente, resaltada y todo simplemente descargando .NET Reflector . Agregue ofuscación a eso y reducirá de manera muy significativa la cantidad de personas que podrán modificar el código.
Depende de ti de qué te estás protegiendo. Si lo envía sin ofuscación, también puede abrir el código fuente de la aplicación y beneficiarse del marketing. Enviarlo ofuscado solo permitirá a las personas generar archivos binarios modificados con relativa facilidad a través de parches en lugar de poder robar su código y crear un competidor directo. Obtención de la fuente real del código ofuscado es muy difícil, dependiendo del ofuscador, por supuesto.
Cosas que debes tener en cuenta:
El único problema que la ofuscación 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 económica y poco atractiva.
Pero volviendo a la realidad:
Por lo tanto, la realidad es que puede hacer que sea más difícil y más lento examinar su aplicación, pero realmente no obtendrá ninguna protección confiable. Independientemente de si utiliza un producto gratuito o comercial.
Las tecnologías avanzadas como la ofuscación del flujo de control o la virtualización de código pueden ayudar a hacer que la comprensión de la lógica a veces sea realmente difícil, pero también pueden causar muchos problemas divertidos y difíciles de depurar o resolver. Entonces, a veces se parecen más a un problema adicional que a una solución.
Desde mi punto de vista, la ofuscación no vale el dinero que algunas compañías cobran por sus productos. Si quiere fastidiar a los desarrolladores casuales, los ofuscadores de código abierto son lo suficientemente buenos. . Si desea que sea lo más difícil posible examinar el corazón 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 una bolsa llena de problemas .
Su propiedad intelectual y sus productos están protegidos en la mayoría de los países por ley. Entonces, si hay un competidor analizando y copiando su código, puede demandarlo. Si un malo o un pirata informático o un pirata informático toma su aplicación, se le bromea, pero un ofuscador no hace la diferencia.
Por lo tanto, primero debe pensar en sus objetivos, su mercado y lo que desea lograr con un ofuscador. Como puede leer aquí (y en otros lugares), la ofuscación no resuelve realmente el problema de la ingeniería inversa. Solo lo hace más difícil y requiere más tiempo. Pero si esto es lo que desea, puede echar un vistazo a los ofuscadores de código abierto como p. Ej. sharpObfuscator u obfuscar que puede ser lo suficientemente bueno como para fastidiar a los programadores casuales (puede encontrar una Lista aquí: Lista de ofuscadores .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, seguro y eficaz.
Creo que depende del tipo de su producto. Si está dirigido a ser utilizado por desarrolladores, la ofuscación perjudicará a sus clientes. Hemos estado usando los productos ArcGIS en el trabajo, y todas las DLL están ofuscadas. Está haciendo nuestro trabajo 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.
Así que por favor, no te ofusques a menos que realmente tengas que hacerlo.
Solo una nota para cualquiera que lea esto 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 o para ofuscar el código de un proyecto que involucra a cualquier desarrollador que no sea usted. Entonces, para los desarrolladores de aplicaciones comerciales, en realidad es solo una versión de prueba.
No, se ha comprobado que la ofuscación no impide que alguien pueda descifrar el código compilado. Hace que sea más difícil hacerlo, pero no imposible.
Me siento muy cómodo leyendo el código x86 Assembly, ¿qué pasa con las personas que trabajan con Assembly durante más de 20 años?
Siempre encontrará a alguien que solo necesite un minuto para ver qué está haciendo su código C # o C ...
... recortar ... estos mensajes pueden volverse mucho más difíciles de interpretar
Sí, pero la edición comunitaria gratuita que viene con Visual Studio tiene una funcionalidad de mapa. Con eso, puede realizar un seguimiento de los nombres de métodos ofuscados a los nombres originales.
He tenido éxito al poner 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 tenga diferentes trucos lo hace más ofuscado.
Es bastante simple aplicar ingeniería inversa a una aplicación .net usando . Net reflector - ya que la aplicación generará VB, VC y código C # directamente desde el MSIL, y es posible para sacar todo tipo de gemas útiles.
Los ofuscadores de código ocultan el código bastante bien de la mayoría de los hacks de ingeniería inversa, y sería una buena idea usarlo en código propietario y competitivo que agregue valor a su aplicación.
Hay un artículo bastante bueno sobre ofuscación y su funcionamiento aquí
Sí, definitivamente deberías. No para protegerlo de una persona determinada, sino para obtener ganancias y tener clientes. Por cierto, si llegas a un punto aquí, alguien intenta descifrar tu software, eso significa que vendes un software popular.
El problema es qué herramienta elegir para el trabajo. Consulte mi experiencia con ofuscadores comerciales: https://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575
Esta publicación y la pregunta que lo rodea tienen alguna discusión que podría ser de valor. No es un problema de sí o no.
Sí. Utilizamos el ofuscador BitHelmet. Es nuevo, pero funciona muy bien.
¿Pero realmente vale la pena el esfuerzo de seleccionar, comprar y usar dicha herramienta?
Encontré Eazfuscator barato (gratis) y fácil de usar: me llevó alrededor de un día. Ya tenía extensas pruebas automatizadas (buena cobertura), por lo que creo que podría encontrar cualquier error que se haya introducido por ofuscación.