. NET herramientas de ofuscación / estrategia [cerrado]


Mi producto tiene varios componentes: ASP.NET, Aplicación de Windows Forms y Servicio de Windows. el 95% del código está escrito en VB.NET.

Por razones de Propiedad Intelectual, necesito ofuscar el código, y hasta ahora he estado usando una versión de dotfuscator que ahora tiene más de 5 años. Creo que es hora de pasar a una herramienta de nueva generación. Lo que estoy buscando es una lista de requisitos que debería considerar al buscar un nuevo ofuscador.

Lo que sé que debería buscar hasta ahora:

  • Serialización/deserialización. En mi solución actual, simplemente le digo a la herramienta no que ofusque cualquier miembro de datos de clase porque el dolor de no poder cargar datos que se serializaron previamente es simplemente demasiado grande.
  • Integración con el Proceso de Compilación
  • Trabajar con ASP.NET. En el pasado, he encontrado esto problemático debido al cambio .nombres dll (a menudo tiene uno por página) - que no todas las herramientas manejan bien.
Author: csmba, 2008-08-05

30 answers

De vuelta con.Net 1.1 la ofuscación era esencial: descompilar código era fácil, y se podía ir de ensamblado, a IL, al código C# y compilarlo de nuevo con muy poco esfuerzo.

Ahora con.Net 3.5 no estoy del todo seguro. Intenta descompilar un ensamblado 3.5; lo que obtienes es un largo camino desde la compilación.

Agregue las optimizaciones de 3.5 (mucho mejores que 1.1) y la forma en que los tipos anónimos, los delegados, etc. son manejados por reflexión (son una pesadilla para recompilar). Añadir expresiones lambda, compilador 'magic' como Linq-syntax y var, y funciones de C#2 como yield (lo que resulta en nuevas clases con nombres ilegibles). Tu código descompilado termina muy lejos de ser compilable.

Un equipo profesional con mucho tiempo todavía podría realizar ingeniería inversa de nuevo, pero entonces lo mismo es cierto de cualquier código ofuscado. Qué código sacaron de eso sería inalcanzable y muy probable que sea muy defectuoso.

Yo recomendaría la firma de claves asambleas (es decir, si los hackers pueden recompilar uno que tienen que recompilar todos), pero no creo que la ofuscación vale la pena.

 39
Author: Keith,
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
2008-08-12 12:19:13

Hemos probado varios ofuscadores. Ninguno de ellos funciona en una aplicación cliente/servidor grande que utiliza la comunicación remota. El problema es que el cliente y el servidor comparten algunas DLL, y no hemos encontrado ningún ofuscador que pueda manejarlo.

Hemos probado DotFuscator Pro, SmartAssembly, XenoCode, Salamander y varias aplicaciones de poca monta cuyos nombres se me escapan.

Francamente, estoy convencido de que la ofuscación es un gran truco.

Incluso los problemas que aborda no son del todo un problema real. El lo único que realmente necesitas proteger son cadenas de conexión, códigos de activación, cosas sensibles a la seguridad como esas. Esta tontería de que otra compañía va a hacer ingeniería inversa a toda su base de código y crear un producto competidor a partir de ella es algo de la pesadilla de un administrador paranoico, no de la realidad.

 47
Author: Judah Himango,
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
2009-05-04 18:12:46

Estoy 'Hasta las rodillas' en esto ahora, tratando de encontrar una buena solución. Aquí están mis impresiones hasta ahora.

Xenocode - tengo una vieja licencia para Xenocode2005 que solía usar para camuflar mi .net 2.0 asambleas. Funcionó bien en XP y fue una solución decente. Mi proyecto actual es. net 3.5 y estoy en Vista, el soporte me dijo que lo intentara, pero la versión de 2005 ni siquiera funciona en Vista (se bloquea), así que ahora tengo que comprar 'PostBuild2008' a un precio engorroso de $1900. Esta puede ser una buena herramienta, pero no voy a averiguarlo. Demasiado caro.

Reactor.Net - Este es un precio mucho más atractivo y funcionó bien en mi Ejecutable independiente. El módulo de licencia también fue agradable y me habría ahorrado un montón de esfuerzo. Desafortunadamente, Le falta una característica clave y es la capacidad de Excluir cosas de la ofuscación. Esto hace que sea imposible lograr el resultado que necesitaba (Combinar varios ensamblajes juntos, ofuscar algunos, no-Ofuscar otros).

SmartAssembly - Descargué la evaluación para esto y funcionó perfectamente. Pude lograr todo lo que quería y la interfaz era de primera clase. El precio sigue siendo un poco fuerte.

Dotfuscator Pro - No se pudo encontrar el precio en el sitio web. Actualmente en discusiones para obtener una cotización. Suena siniestro.

Confuser - un proyecto de código abierto que funciona bastante bien (para confundir a ppl, como su nombre lo indica). https://confuser.codeplex.com/
( añadido por jgauffin)

Nota: ConfuserEx está supuestamente "roto" de acuerdo con Edición #498 en su repositorio de GitHub.

 40
Author: Michael Dausmann,
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-06-23 22:10:03

Si buscas uno gratuito, puedes probar DotObfuscator Community Edition que viene con Visual Studio o Eazfuscator.NET .


Desde el 29 de junio de 2012, Eazfuscator.NET ahora es comercial. La última versión gratuita disponible es la 3.3.

 21
Author: Israel Rodriguez,
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-03-29 04:13:05

He estado usando smartassembly. Básicamente, eliges un dll y lo devuelve ofuscado. Parece que funciona bien y no he tenido problemas hasta ahora. Muy, muy fácil de usar.

 18
Author: Shawn,
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
2008-08-05 16:21:56

He probado casi todos los ofuscadores del mercado y SmartAssembly es el mejor en mi opinión.

 10
Author: Andrew Peters,
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
2008-08-07 10:44:33

También he estado usando SmartAssembly. Encontré que Ezrinz. Net Reactor mucho mejor para mí en aplicaciones. net. Ofusca, admite Mono, fusiona ensamblajes y también tiene un módulo de licencias muy bueno para crear una versión de prueba o vincular la licencia a una máquina en particular (muy fácil de implementar). El precio también es muy competitivo y cuando necesitaba apoyo, eran rápidos. Eziriz

Para que quede claro, solo soy un cliente al que le gusta el producto y no está relacionado de ninguna manera con la compañía.

 8
Author: Ronnie,
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
2008-08-22 17:41:21

La respuesta corta es que no puedes.

Existen varias herramientas que harán que sea más difícil para alguien leer su código, algunas de las cuales han sido señaladas por otras respuestas.

Sin embargo, todo esto hace que sea más difícil de leer - aumentan la cantidad de esfuerzo requerido, eso es todo. A menudo esto es suficiente para disuadir a los lectores casuales, pero alguien que está decidido a profundizar en su código siempre será capaz de hacerlo.

 7
Author: Bevan,
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
2009-07-16 21:45:02

Tenemos una aplicación de varios niveles con un asp.net e interfaz winform que también admite la comunicación remota. No he tenido problemas con el uso de cualquier ofuscador con la excepción del tipo de cifrado que genera un cargador que puede ser problemático en todo tipo de formas inesperadas y simplemente no vale la pena en mi opinión. En realidad, mi consejo sería más en la línea de"Evitar cifrar ofuscadores tipo cargador como la plaga". :)

En mi experiencia cualquier ofuscador funcionará bien con cualquier aspecto de. net incluyendo asp.net y de forma remota, solo tienes que familiarizarte con la configuración y aprender hasta dónde puedes empujarla en qué áreas de tu código. Y tómese el tiempo para intentar la ingeniería inversa en lo que obtiene y ver cómo funciona con las diversas configuraciones.

Usamos varios a lo largo de los años en nuestras aplicaciones comerciales y nos decidimos por Spices ofuscator de 9rays.net porque el precio es correcto, hace el trabajo y tienen un buen soporte, aunque realmente no hemos necesitado el soporte en años más, pero para ser honesto, no creo que realmente importe qué ofuscador use, los problemas y la curva de aprendizaje son todos iguales si desea que funcione correctamente con la comunicación remota y asp.net.

Como otros han mencionado, todo lo que realmente estás haciendo es el equivalente a un candado, manteniendo a las personas honestas fuera o haciendo más difícil simplemente recompilar una aplicación.

Las licencias suelen ser el área clave para la mayoría de las personas y definitivamente debería estar utilizando algún tipo de sistema de certificado firmado para licenciar de todos modos. Su mayor pérdida provendrá del intercambio casual de licencias si no tiene un sistema inteligente en su lugar, las personas que rompen el sistema de licencias nunca iban a comprar en primer lugar.

Es muy fácil llevar esto demasiado lejos y tener un impacto negativo en sus clientes y su negocio, hacer lo que es simple y razonable y luego no se preocupe por ello.

 6
Author: JohnC,
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
2008-11-16 19:57:28

Durante los últimos dos días he estado experimentando con Dotfuscator Community Edition advanced (una descarga gratuita después de registrar el CE básico que viene incluido con Visual Studio).

Creo que la razón por la que más personas no usan la ofuscación como opción predeterminada es que es una molestia grave en comparación con el riesgo. En proyectos de prueba más pequeños, podía hacer que el código ofuscado se ejecutara con mucho esfuerzo. Implementar un proyecto simple a través de ClickOnce fue problemático, pero se puede lograr después de forma manual firmando los manifiestos con mage. El único problema era que, por error, el rastro de la pila volvía ofuscado y el CE no tenía un desobfuscador o clarificador empaquetado.

Traté de ofuscar un proyecto real que es VSTO basado en Excel, con integración Virtual Earth, muchas llamadas de servicio web y un contenedor IOC y muchos de reflexión. Era imposible.

Si la ofuscación es realmente un requisito crítico, debe diseñar su aplicación con eso en mente desde el principio, probando las compilaciones ofuscadas a medida que progresas. De lo contrario, si es un proyecto bastante complejo, vas a terminar con una gran cantidad de dolor.

 5
Author: burnside,
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
2009-02-04 22:40:14

Crypto Obfuscator dirección de todas sus preocupaciones y escenarios. It:

  1. Excluye automáticamente tipos/miembros de la ofuscación basada en reglas. Los tipos/campos serializados son uno de ellos.
  2. Se puede integrar en el proceso de compilación usando MSBuild.
  3. Soporta ASP.Net proyectos.
 5
Author: logicnp,
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
2009-10-09 09:42:26

Recientemente he intentado canalizar la salida de un ofuscador libre en otro ofuscador libre, a saber, Dotfuscator CE y el nuevo ofuscador Babel en CodePlex. Más detalles en mi blog.

En cuanto a la serialización, he movido ese código a un DLL diferente e incluido en el proyecto. Razoné que no había ningún secreto allí que no están en el XML de todos modos, por lo que no necesitaba ofuscación. Si hay algún código serio en esas clases, usando clases parciales en la asamblea principal debe cubrirlo.

 4
Author: harriyott,
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
2008-09-11 11:53:35

Debe usar lo que sea más barato y mejor conocido para su plataforma y llamarlo un día. La ofuscación de lenguajes de alto nivel es un problema difícil, porque los flujos de opcode de VM no sufren los dos mayores problemas que los flujos de opcode nativos tienen: identificación de función/método y alias de registro.

Lo que debe saber sobre la inversión de bytecode es que ya es una práctica estándar para los probadores de seguridad revisar el código X86 recto y encontrar vulnerabilidades en él. En raw X86, usted no necesariamente puede encontrar funciones válidas, y mucho menos rastrear una variable local a lo largo de una llamada a función. En casi ninguna circunstancia los inversores de código nativo tienen acceso a nombres de funciones y variables, a menos que estén revisando el código de Microsoft, para lo cual MSFT proporciona esa información al público.

"Dotfuscation" funciona principalmente codificando nombres de funciones y variables. Probablemente es mejor hacer esto que publicar código con información de nivel de depuración, donde la Reflector está literalmente renunciando a su código fuente. Pero cualquier cosa que hagas más allá de esto es probable que obtenga rendimientos decrecientes.

 3
Author: tqbf,
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
2008-09-10 21:38:59

No he tenido problemas con Smartassembly.

 3
Author: Geoff Appleford,
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
2008-09-16 11:12:55

Puede usar "Dotfuscator Community Edition" - viene por defecto en Visual Studio 2008 Professional. Puedes leer sobre ello en:

Http://msdn.microsoft.com/en-us/library/ms227240%28VS.80%29.aspx
http://www.preemptive.com/dotfuscator.html

La versión "Profesional" del producto cuesta dinero, pero es mejor.

¿Realmente necesita su código ofuscado? Por lo general, hay muy poco mal con su aplicación se descompila, a menos que se utiliza con fines de seguridad. Si le preocupa que la gente "robe" su código, no lo haga; la gran mayoría de las personas que miran su código lo harán con fines de aprendizaje. De todos modos, no hay una estrategia de ofuscación totalmente efectiva para.NET - alguien con suficiente habilidad siempre será capaz de descompilar/cambiar su aplicación.

 3
Author: Callum Rogers,
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
2009-08-28 15:34:17

Evite el reactor. Es completamente inútil (y sí, pagué por una licencia). Xenocode fue el mejor que encontré y también compré una licencia. El apoyo fue muy bueno, pero no lo necesitaba mucho, ya que simplemente funcionó. Probé todos los ofuscadores que pude encontrar y mi conclusión es que xenocode era, por mucho, el más robusto e hizo el mejor trabajo (también la posibilidad de publicar el proceso de su.NET exe en un exe nativo que no vi en ningún otro lugar.).

Hay dos diferencias principales entre reactor y xenocode. La primera es que Xenocode realmente funciona. La segunda es que la velocidad de ejecución de sus ensamblajes no es diferente. Con el reactor era aproximadamente 6 millones de veces más lento. También tuve la impresión de que el reactor era una operación de un solo hombre.

 3
Author: Michael Finlan,
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-05-04 09:43:43

Encontré la Agile.Net proporcione una protección bastante buena para su ensamblaje.Net porque no solo ofrece ofuscación, sino también cifrado. Descargar un sendero gratis.
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx

 3
Author: user2743618,
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-09-03 15:26:53

He estado ofuscando código en la misma aplicación desde.Net 1, y ha sido un gran dolor de cabeza desde una perspectiva de mantenimiento. Como has mencionado, el problema de serialización se puede evitar, pero es realmente fácil cometer un error y ofuscar algo que no querías ofuscar. Es fácil romper la compilación o cambiar el patrón de ofuscación y no poder abrir archivos antiguos. Además, puede ser difícil averiguar qué salió mal y dónde.

Nuestra elección fue Xenocode, y si tuviera que hacer la elección de nuevo hoy preferiría no ofuscar el código, o utilizar Dotfuscator.

 2
Author: Jon Dewees,
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
2008-08-21 20:31:40

Aquí hay un documento de Microsoft. Espero que eso ayude..., es de 2003, pero aún podría ser relevante.

 2
Author: nullArray,
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
2009-07-16 21:38:16

Estamos usando SmartAssembly en nuestro cliente Windows. Funciona bien.

También añade algunos problemas adicionales. La impresión de los nombres de las clases en los archivos de registro / excepciones tiene que ser de-ofuscado. Y por supuesto no se puede crear una clase a partir de su nombre. Por lo tanto, es una buena idea echar un vistazo a su cliente y ver qué problemas puede obtener al ofuscar.

 1
Author: Carra,
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
2009-04-04 11:28:07

Todo depende del lenguaje de programación que utilice. Leer el artículo: código Ofuscado

 1
Author: Michał Ziober,
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
2009-07-16 21:31:20

La forma gratuita sería usar dotfuscator desde visual studio, de lo contrario tendrás que salir y comprar un ofuscador como Postbuild ( http://www.xenocode.com/Landing/Obfuscation.aspx )

 1
Author: Russ Bradberry,
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
2009-07-16 21:38:38

Tuve que usar una ofuscación/protección de recursos en mi último proyecto y encontré Cripto Ofuscador como una herramienta agradable y fácil de usar. El problema de serialización es solo una cuestión de configuración en esta herramienta.

 1
Author: logicnp,
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
2012-06-28 04:57:38

Hay una buena versión de código abierto llamada Obfuscar. Parece funcionar bien. Se pueden excluir tipos, propiedades, campos y métodos. El original está aquí: https://code.google.com/p/obfuscar / , pero como parece que ya no está actualizado, alguien lo bifurcó a aquí: https://obfuscar.codeplex.com /

 1
Author: erict,
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-12-19 04:24:37

Es posible que también desee ver las nuevas tecnologías de protección de código como Metaforic y V. i.Labs y las nuevas tecnologías de protección de copia de software como ByteShield. Divulgación: Trabajo para ByteShield.

 0
Author: Christian Olsson,
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
2009-01-03 18:56:59

También uso smartassembly. Sin embargo, no se como funciona para una aplicación web. Sin embargo, me gustaría señalar que si su aplicación usa protección de tipo shareware, asegúrese de que no verifique una licencia con una devolución booleana. es muy fácil romper bytes. http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx

 0
Author: Rick Ratayczak,
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
2009-04-04 10:53:56

SmartAssembly es genial, me usaron en la mayoría de mis proyectos

 0
Author: guaike,
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-01 04:49:21

Probé la versión demo de Eziriz....Me gustó. Pero nunca trajo el software.

 -1
Author: Kalpak,
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
2009-09-04 03:21:58

Ofuscar no es una protección real.

Si tiene un archivo Exe.NET, hay una solución MUCHO mejor.

Utilizo Themida y puedo decir que funciona muy bien.

El único inconveniente de Themida es que no puede proteger.NET Dll. (También protege el código C++ en Exe y DLL)

Themida es mucho más barato que los ofuscadores aquí mencionados y es el mejor en anti piratería protección en el mercado. Crea un máquina virtual fueron partes críticas de su código se ejecutan y ejecuta varios subprocesos que detectan la manipulación o puntos de interrupción establecidos por un cracker. Convierte el. NET Exe en algo que Reflector ya ni siquiera reconoce como un ensamblado.NET.

Por favor, lea la descripción detallada en su sitio web: http://www.oreans.com/themida_features.php

 -1
Author: Elmue,
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-03-06 03:47:11

He probado un producto llamado Rummage y hace un buen trabajo al darle un poco de control ... Aunque carece de muchas cosas que Eziriz ofrece, pero el precio del Rummage es demasiado bueno...

 -2
Author: DotOftheDotNet,
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-09-06 17:27:45