visual studio ofuscar inversa ingenieria evitar encriptar descompilar como codigo c# licensing obfuscation decompiling piracy-prevention

studio - Cómo evitar la descompilación de cualquier aplicación de C#



ofuscar codigo c# (12)

Aquí hay una pregunta similar acerca de los Obfuscators . Puede ser que proporcione alguna buena información para usted.

Estamos planeando desarrollar una aplicación de servidor cliente usando C # y MySQL. Planeamos vender el producto en la estantería como cualquier otra utilidad de software. Estamos preocupados por la descompilación de nuestro producto, que tiene algún tipo de ventaja sobre nuestros competidores en términos de usabilidad y funcionalidad combinada.

¿Cómo podemos evitar que nuestro software se descompile para que la lógica de negocios del producto permanezca intacta?

Hemos escuchado acerca de Reflector y otros descompiladores que hacen que nuestro código sea muy vulnerable para copiar.

Nuestra base de clientes no son empresas, sino profesionales médicos que pueden no hacerlo, pero nuestros competidores pueden querer copiar / deshabilitar licencias o incluso replicar el código / funcionalidad para que el valor de nuestro producto baje en el mercado.

Cualquier sugerencia para evitar esto es muy bienvenida.


El ofuscador confunde el código pero el protector lo protege. Puedes usar .Net protector: NetWinProtector


Es posible que desee considerar Remotesoft Salamander Protector, esto es mucho mejor que cualquier otra cosa, ya que hace que sea imposible de descompilar al lenguaje de alto nivel.

Por supuesto, cualquiera que sea un experto puede pasar suficiente tiempo con su software y descifrarlo porque descompila algo, pero oculta todo el conjunto y obtiene métodos.

Por lo tanto, pueden obtener un pico, pero eso es todo. tienen que descubrir el resto, lo que reduce la probabilidad de que alguien lo rompa.

espero que esto ayude


Escribiendo en este hilo después de mucho tiempo. Hemos comprado un software llamado Intellilock que es útil para prevenir la descompilación, la ofuscación y también tiene un fuerte módulo de licencias.

No optamos por .Net Reactor a pesar de que tiene más controles de prevención ya que Intellilock estaba cumpliendo nuestro propósito suficientemente bien.


Google para .NET Obfuscator. Encontrarás muchos productos que te ayudarán en esto. También hay preguntas relacionadas ya formuladas en .

Aquí están algunas:

EDITAR : Mientras buscaba herramientas de De4Dot , encontré una herramienta de código abierto De4Dot . Esta herramienta es compatible con la descompilación de archivos DLL creados por la mayoría de las herramientas comerciales y también hace un buen trabajo.


Intellilock ha servido bien a nuestro propósito en términos de ofuscación y licencia. Pero no recomendaría el producto ya que el soporte no está a la altura. Nunca recibimos respuestas a tiempo para el problema que enfrentábamos. Tuvimos que buscar e investigar por nuestra cuenta o incluso cambiar los requisitos del negocio para lograr algunos objetivos.

A través de esta respuesta, no pretendo promocionar ni degradar ningún software, solo quiero informar a las personas sobre el producto que estamos utilizando para que puedan tomar decisiones acertadas.


La última vez que miré esto, Spices.Net Obfuscator parecía la mejor cosa en el mercado.

No, no trabajo para ellos. :)


Los ofuscadores que otros han mencionado son probablemente muy buenos.

Un enfoque alternativo que tal vez no haya considerado es codificar parte de la lógica de negocios central utilizando un lenguaje que está completamente compilado en código de máquina, como C ++.

El beneficio de hacer esto es que hace que sea mucho más difícil para alguien descompilar su código. Una desventaja de esto es que tiene un código en dos idiomas para mantener. Es posible que este no sea el mejor enfoque para su situación, pero es útil en casos donde solo una pequeña parte del código necesita ser confusa, mientras que el resto del código es UI fluff.

Como ejemplo, su paquete de software médico podría estar realizando la detección de bordes de, por ejemplo, ciertas glándulas con el propósito de decirle a un médico el tamaño de dicha glándula. El algoritmo para calcular el tamaño de la glándula a partir de una imagen de mapa de bits estaría contenido en una DLL escrita en C ++.


Si fuera yo, no estaría intentando ofuscar; Me gustaría:

  1. No te preocupes por eso y apunta a mejorar continuamente y estar al frente.

Pero en segundo lugar

  1. Considere proporcionar los servicios ''secretos'' a través de la web. Depende de usted decidir cuán crítico y posible es esto; pero sí "evita" la descompilación, porque el usuario final ni siquiera tiene el código.

Si implementa ensamblados .NET en las máquinas de sus clientes, siempre será posible algún tipo de descompilación utilizando el reflector y herramientas similares.

Sin embargo, esta situación no es sustancialmente diferente a la que encontraría si escribiera la aplicación en C ++ nativo. Siempre es posible descompilar cosas: si fuera imposible, el procesador tampoco podría entenderlo.

Nunca derrotarás al experto cracker: tratarán tu seguridad como un rompecabezas intelectual que se resolverá solo para el desafío.

La pregunta gira en torno a cuán difícil es vencer sus prácticas de licenciamiento y el retorno de la inversión .

Siéntese con una hoja de cálculo y observe los posibles escenarios: el peligro es probablemente menor de lo que cree.

Factores como la "facilidad de uso" son visibles en su software para que cualquier usuario los observe, por lo que le parecería fácil de copiar. Pero, una buena experiencia de usuario es rara (y rara vez se copia bien), porque la mayoría de los desarrolladores (yo incluido) no se parecen en nada a los usuarios típicos.

Te sugiero que te concentres en hacer que el trabajo de una galleta sea más difícil, porque nunca puedes hacerlo imposible, solo sin fines de lucro.

Una posibilidad para intentarlo: es posible compilar previamente los ensamblados en código nativo como parte del proceso de instalación. Paint.NET hace esto por razones de rendimiento. Creo que una vez que haya hecho esto, puede descartar los ensamblajes originales y usar las ediciones de código nativo optimizadas.


Yo uso smartassembly . Es fácil de usar y también tiene la capacidad de enviar informes de fallos también incorporados.


para responder a su pregunta sobre el envoltorio de C ++ alrededor del código .net; No creo que funcione, porque cuando implementes la aplicación, la dll de c ++ final y dll .net que contiene el código de lógica de negocios serán entidades separadas y las que quieran acceder a la lógica de tu negocio aún podrán seleccionar la .net dll y echar un vistazo dentro.