Pregunta

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

Por motivos de propiedad intelectual, necesito ofuscar el código y hasta ahora he estado usando una versión de dotfuscator que ya tiene más de 5 años.Estoy pensando que es hora de pasar a una herramienta de nueva generación.Lo que estoy buscando es una lista de requisitos que debo considerar al buscar un nuevo ofuscador.

Lo que sé que debo buscar hasta ahora:

  • Serialización/Desserialización.En mi solución actual, simplemente le digo a la herramienta no ofuscar a los miembros de datos de la clase porque la molestia de no poder cargar datos que fueron previamente serializados es simplemente demasiado grande.
  • Integración con el proceso de construcción
  • Trabajar con ASP.NET.En el pasado, esto me resultó problemático debido al cambio de nombres de archivos .dll (a menudo hay uno por página), algo que no todas las herramientas manejan bien.
¿Fue útil?

Solución

En .Net 1.1, la ofuscación era esencial:Descompilar el código era fácil y se podía pasar del código ensamblador a IL y C# y compilarlo nuevamente con muy poco esfuerzo.

Ahora con .Net 3.5 no estoy del todo seguro.Intente descompilar un ensamblado 3.5;lo que obtienes está muy lejos de compilar.

Agregue las optimizaciones de 3.5 (mucho mejor que 1.1) y la forma en que la reflexión maneja los tipos anónimos, delegados, etc. (recompilarlos es una pesadilla).Agregue expresiones lambda, compilador 'mágico' como la sintaxis Linq y var, y C#2 funciona como yield (lo que da como resultado nuevas clases con nombres ilegibles).Su código descompilado termina muy lejos de ser compilable.

Un equipo profesional con mucho tiempo aún podría realizar ingeniería inversa nuevamente, pero lo mismo ocurre con cualquier código ofuscado.El código que obtuvieron sería imposible de mantener y probablemente tendría muchos errores.

Recomendaría firmar claves en sus ensamblajes (es decir, si los piratas informáticos pueden recompilar uno, tendrán que recompilarlos todos), pero no creo que valga la pena la ofuscación.

Otros consejos

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

Hemos probado DotFuscator Pro, SmartAssembly, XenoCode, Salamander y varias aplicaciones pequeñas 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 reales.Lo único que realmente necesita proteger son las cadenas de conexión, los códigos de activación y cosas así sensibles a la seguridad.Esta tontería de que otra empresa vaya a aplicar ingeniería inversa a todo su código base y crear un producto competitivo a partir de él es algo que proviene de la pesadilla de un gerente paranoico, no de una realidad.

Estoy 'hasta las rodillas' en esto ahora, tratando de encontrar una buena solución.Aquí tenéis mis impresiones hasta el momento.

Xenocódigo - Tengo una licencia antigua de Xenocode2005 que solía utilizar para ofuscar mis ensamblados .net 2.0.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 2005 ni siquiera funciona en Vista (falla), así que ahora tengo que comprar 'PostBuild2008' a un precio increíble. de $1900.Esta podría ser una buena herramienta, pero no voy a descubrirlo.Muy caro.

Reactor.Net - Este es un precio mucho más atractivo y funcionó bien en mi ejecutable independiente.El módulo de Licencias también fue bueno y me habría ahorrado mucho esfuerzo.Desafortunadamente, le falta una característica clave y es la capacidad de excluir elementos de la ofuscación.Esto hace que sea imposible lograr el resultado que necesitaba (fusionar varios ensamblajes, ofuscar algunos y no ofuscar otros).

Asamblea inteligente - Descargué Eval para esto y funcionó perfectamente.Pude lograr todo lo que quería y la interfaz fue de primera clase.El precio sigue siendo un poco elevado.

Fuscador de puntos Pro - No se pudo encontrar el precio en el sitio web.Actualmente en conversaciones para obtener una cotización.Suena siniestro.

Confuso - un proyecto de código abierto que funciona bastante bien (para confundir a la gente, tal como su nombre lo indica). https://confuser.codeplex.com/
(agregado por jgauffin)

Nota:Se informa que ConfuserEx está "roto" según Número 498 en su repositorio de GitHub.

Si busca uno gratuito, puede 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.

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

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

También he estado usando SmartAssembly.Descubrí que Ezrinz .Net Reactor es mucho mejor para mí en aplicaciones .net.Ofusca, admite Mono, fusiona ensamblajes y también tiene un módulo de licencia 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 necesité soporte, fueron rápidos.Eziriz

Para que quede claro, solo soy un cliente al que le gusta el producto y no tengo ninguna relación con la empresa.

La respuesta corta es que no puedes.

Existen varias herramientas que dificultarán que alguien lea su código, algunas de las cuales han sido señaladas en otras respuestas.

Sin embargo, lo único que hacen es dificultar la lectura: aumentan la cantidad de esfuerzo requerido, eso es todo.A menudo esto es suficiente para disuadir a los lectores ocasionales, pero alguien que esté decidido a profundizar en su código siempre podrá hacerlo.

Tenemos una aplicación de varios niveles con asp.net y una interfaz winform que también admite la comunicación remota.No he tenido problemas con el uso de ningún 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, en mi opinión, simplemente no vale la pena.En realidad, mi consejo sería más parecido a "Evitar el cifrado de ofuscadores de tipo cargador como la plaga".:)

En mi experiencia, cualquier ofuscador funcionará bien con cualquier aspecto de .net, incluido asp.net y la comunicación remota, solo tiene que familiarizarse con la configuración y aprender hasta dónde puede llevarlo en qué áreas de su código.Y tómate el tiempo para intentar realizar ingeniería inversa en lo que obtienes y ver cómo funciona con las distintas configuraciones.

Usamos varios a lo largo de los años en nuestras aplicaciones comerciales y nos decidimos por el ofuscador Spices de 9rays.net porque el precio es correcto, hace el trabajo y tienen un buen soporte, aunque realmente ya no hemos necesitado el soporte en años, pero para ser honesto. No creo que realmente importe qué ofuscador uses, los problemas y la curva de aprendizaje son todos iguales si quieres 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 alejadas a las personas honestas o haciendo que sea más difícil simplemente recompilar una aplicación.

La concesión de licencias suele ser el área clave para la mayoría de las personas y, de todos modos, definitivamente debería utilizar algún tipo de sistema de certificado firmado digitalmente para la concesión de licencias.Su mayor pérdida vendrá del intercambio casual de licencias. Si no cuenta con un sistema inteligente, las personas que rompen el sistema de licencias nunca comprarían en primer lugar.

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

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 utilizan 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 pude ejecutar el código ofuscado con mucho esfuerzo.Implementar un proyecto simple a través de ClickOnce fue problemático, pero se pudo lograr después de firmar manualmente los manifiestos con mage.El único problema fue que, por error, el seguimiento de la pila volvió ofuscado y el CE no tiene un desofuscador o clarificador empaquetado.

Intenté ofuscar un proyecto real que está basado en VSTO en Excel, con integración de Virtual Earth, muchas llamadas a servicios web y un contenedor IOC y mucha reflexión.Fue imposible.

Si la ofuscación es realmente un requisito crítico, debes diseñar tu aplicación teniendo eso en mente desde el principio, probando las compilaciones ofuscadas a medida que avanzas.De lo contrario, si se trata de un proyecto bastante complejo, terminarás sufriendo mucho dolor.

Ofuscador criptográfico abordar todas sus inquietudes y escenarios.Él :

  1. Excluye automáticamente tipos/miembros de la ofuscación según reglas.Los tipos/campos serializados son uno de ellos.
  2. Se puede integrar en el proceso de compilación mediante MSBUild.
  3. Soporta proyectos ASP.Net.

Recientemente intenté canalizar la salida de un ofuscador gratuito a otro ofuscador gratuito, concretamente Dotfuscator CE y el nuevo ofuscador Babel en CodePlex.Más detalles en mi blog.

En cuanto a la serialización, moví ese código a una DLL diferente y lo incluí en el proyecto.Razoné que no había ningún secreto allí que no estuviera en el XML de todos modos, por lo que no era necesario ofuscarlo.Si hay algún código importante en esas clases, el uso de clases parciales en el ensamblado principal debería cubrirlo.

Debe utilizar lo que sea más barato y más conocido para su plataforma y dar por terminado el día.La ofuscación de lenguajes de alto nivel es un problema difícil, porque los flujos de código de operación de VM no sufren los dos mayores problemas que padecen los flujos de código de operación nativos:identificación de función/método y alias de registro.

Lo que debe saber sobre la inversión de códigos de bytes es que ya es una práctica estándar que los evaluadores de seguridad revisen el código X86 directo y encuentren vulnerabilidades en él.En X86 sin formato, ni siquiera es posible encontrar funciones válidas, y mucho menos rastrear una variable local durante 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.

La "fuscación de puntos" funciona principalmente codificando nombres de funciones y variables.Probablemente sea mejor hacer esto que publicar código con información de nivel de depuración, donde Reflector literalmente entrega su código fuente.Pero cualquier cosa que haga más allá de esto probablemente generará rendimientos decrecientes.

No he tenido problemas con Smartassembly.

Puede utilizar "Dotfuscator Community Edition": viene de forma predeterminada en Visual Studio 2008 Professional.Puedes leer sobre esto 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 necesitas ofuscar tu código?Por lo general, hay muy pocos problemas con la descompilación de su aplicación, a menos que se utilice por motivos de seguridad.Si le preocupa que la gente "robe" su código, no lo esté;la gran mayoría de las personas que verán su código lo harán con fines de aprendizaje.De todos modos, no existe una estrategia de ofuscación totalmente efectiva para .NET: alguien con suficiente habilidad siempre podrá descompilar/cambiar su aplicación.

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

Hay dos diferencias principales entre reactor y xenocódigo.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.

Descubrí que Agile.Net proporciona una protección bastante buena para su ensamblaje .Net porque ofrece no solo ofuscación sino también cifrado.Descarga un recorrido gratuito.
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx

He estado ofuscando el código en la misma aplicación desde .Net 1, y ha sido un gran dolor de cabeza desde la perspectiva del mantenimiento.Como mencionaste, el problema de serialización se puede evitar, pero es muy 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 resultar difícil saber qué salió mal y dónde.

Nuestra elección fue Xenocode, y si volviera a elegir hoy, preferiría no ofuscar el código o usar Dotfuscator.

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

Estamos usando SmartAssembly en nuestro cliente de Windows.Funciona bien.

También agrega algunos problemas adicionales.La impresión de los nombres de sus clases en archivos de registro/excepciones debe estar libre de ofuscaciones.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 tener al ofuscarlo.

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

la forma gratuita sería usar dotfuscator desde Visual Studio; de lo contrario, tendrías que salir y comprar un ofuscador como Postbuild (http://www.xenocode.com/Landing/Obfuscation.aspx)

Tuve que usar una ofuscación/protección de recursos en mi último proyecto y encontré Ofuscador criptográfico como una herramienta agradable y sencilla de usar.El problema de la serialización es sólo una cuestión de configuración de esta herramienta.

Existe 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 cambió aquí: https://obfuscar.codeplex.com/

También es posible que desees consultar nuevas tecnologías de protección de códigos, como metafórico y V.i.Labs y nuevas tecnologías de protección de copia de software como Escudo de bytes.Divulgación:Trabajo para ByteShield.

También uso smartassembly.Sin embargo, no sé cómo funciona para una aplicación web.Sin embargo, me gustaría señalar que si su aplicación utiliza protección de tipo shareware, asegúrese de que no marque una licencia con un resultado booleano.Es demasiado fácil bytear el crack.http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx

SmartAssembly es genial, lo usé en la mayoría de mis proyectos

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

Ofuscar no es una protección real.

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

yo suelo Themida y puedo decir que funciona muy bien.

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

Themida es mucho más barato que los ofuscadores mencionados aquí y es el mejor en anti piratería proteccion en el mercado.Crea una máquina virtual donde se ejecutan partes críticas de su código y ejecuta varios subprocesos que detectan 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.

Lea la descripción detallada en su sitio web:http://www.oreans.com/themida_features.php

Probé un producto llamado Rummage y hace un buen trabajo al brindarte algo de control...Aunque le faltan muchas cosas que ofrece Eziriz, el precio de Rummage es demasiado bueno...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top