¿Cómo puedo proteger my.NET ensamblajes de descompilación?


Una si las primeras cosas que aprendí cuando empecé con C# fue la más importante. Puede descompilar cualquier ensamblado. NET con Reflector u otras herramientas. Muchos desarrolladores no son conscientes de este hecho y la mayoría de ellos se sorprenden cuando les muestro su código fuente.

La protección contra la descompilación sigue siendo una tarea difícil. Todavía estoy buscando una forma rápida, fácil y segura de hacerlo. No quiero ofuscar mi código para que los nombres de mis métodos sean a, b, c o así. Reflector u otro las herramientas deberían ser incapaces de reconocer mi aplicación como ensamblado de. NET en absoluto. Ya conozco algunas herramientas, pero son muy caras. ¿Hay alguna otra forma de proteger mis aplicaciones?

EDITAR:

La razón de mi pregunta no es prevenir la piratería. Solo quiero evitar que los competidores lean mi código. Sé que lo harán y ya lo hicieron. Incluso me lo dijeron. Tal vez soy un poco paranoico, pero los rivales de negocios leer mi código no me hace sentir bien.

Author: Holli, 2010-03-19

12 answers

Una cosa a tener en cuenta es que quieres hacer esto de una manera que tenga sentido para los negocios. Para hacer eso, necesitas definir tus metas. Por lo tanto, ¿cuáles son sus objetivos?

¿Prevenir la piratería? Ese objetivo no es alcanzable. Incluso el código nativo se puede descompilar o descifrar; la multitud de warez disponibles en línea (incluso para productos como Windows y Photoshop) es prueba de que un hacker determinado siempre puede obtener acceso.

Si no se puede prevenir la piratería, entonces ¿qué tal simplemente reducirla? Esto también es erróneo. Solo se necesita una persona descifrando su código para que esté disponible para todos. Tienes que tener suerte cada vez. Los piratas sólo tienen que tener suerte una vez.

Se lo planteo el objetivo debe ser maximizar los beneficios. Usted parece creer que detener la piratería es necesario para este esfuerzo. No lo es. Las ganancias son simplemente ingresos menos costos. Detener la piratería aumenta los costos . Se necesita esfuerzo, lo que significa agregar costos en algún lugar del proceso, y así reduce ese lado de la ecuación. Proteger su producto también hace nada para aumentar sus ingresos. Sé que miras a todos esos piratas y ves todo el dinero que podrías ganar si solo pagaran tus derechos de licencia en su lugar, pero la realidad es que esto nunca sucederá. Hay alguna hipérbole aquí, pero generalmente sostiene que los piratas que no pueden descifrar su seguridad encontrarán un producto similar que pueden descifrar o prescindir. Ellos nunca lo comprarán en su lugar, y por lo tanto lo hacen no representan ventas perdidas.

Además, asegurar su producto en realidad reduce los ingresos. Hay dos razones para ello. Uno es el pequeño porcentaje de clientes que tienen problemas con su activación o seguridad, y por lo tanto deciden no volver a comprar o pedir su dinero de vuelta. El otro es el pequeño porcentaje de personas que realmente prueban una versión pirateada del software para asegurarse de que funciona antes de comprar. Limitar la distribución pirateada de su producto (si de alguna manera puede tener éxito en esto) evita que estas personas prueben su producto, por lo que nunca lo comprarán. Además, la piratería también puede ayudar a que su producto se extienda a un público más amplio, llegando así a más personas que estarán dispuestas a pagar por él.

Una mejor estrategia es asumir que su producto será pirateado y pensar en formas de aprovechar la situación. Un par de enlaces más sobre el tema:
¿Cómo puedo evitar que mi código sea robado?
Protección de una aplicación. NET

 96
Author: Joel Coehoorn,
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-10-10 21:35:39

En el trabajo aquí usamos Dotfuscator de Soluciones preventivas.

Aunque es imposible proteger ensamblajes.NET 100% Dotfuscator lo hace lo suficientemente difícil, creo. Viene con un montón de técnicas de ofuscación;

Cambio de nombre del Ensamblaje cruzado
Renombrar Esquemas
Cambiar el nombre del Prefijo
Inducción de Sobrecarga Mejorada
Ofuscación incremental
Informe de Cambio de nombre HTML
Flujo de control
Cifrado de cadenas

Y resultó que no son muy caro para las pequeñas empresas. Tienen un precio especial para las pequeñas empresas.

(No, no estoy trabajando para apropiativo ; -))

Hay alternativas freeware por supuesto;

 14
Author: Rhapsody,
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-03-19 15:02:46

Aloje su servicio en cualquier proveedor de servicios en la nube.

 11
Author: David,
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
2015-06-02 12:58:18

Cómo prevenir la descompilación de cualquier aplicación de C#

Básicamente describe toda la situación.

En algún momento el código tendrá que ser traducido al bytecode de VM, y el usuario puede llegar a él entonces.

El código máquina tampoco es muy diferente. Un buen desensamblador/depurador interactivo como IDA Pro hace que casi cualquier aplicación nativa sea transparente. El depurador es lo suficientemente inteligente como para usar IA para identificar API comunes, compilador optimizaciones, etc. permite al usuario reconstruir meticulosamente construcciones de nivel superior a partir del ensamblado generado a partir del código máquina.

E IDA Pro también soporta.Net hasta cierto punto.

Honestamente, después de trabajar en un proyecto de ingeniería inversa ( para la compatibilidad ) durante unos años, lo principal que obtuve de mi experiencia es que probablemente no debería preocuparme demasiado de que la gente robe mi código. Si alguien lo quiere, nunca será muy difícil conseguirlo sin importar qué esquema implementar.

 10
Author: kervin,
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-05-23 10:31:33

Sé que no quieres ofuscar, pero tal vez deberías revisar dotfuscator, tomará tus ensamblados compilados y los ofuscará por ti. Creo que incluso puede cifrarlos.

 5
Author: Muad'Dib,
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
2015-06-22 17:07:23

Ningún obsfuscator puede proteger su aplicación, ni siquiera cualquiera descrito aquí. Ver este enlace, es un deobsfuscator que puede deobsfuscate casi todos los obsfuscator por ahí.

Https://github.com/0xd4d/de4dot

La mejor manera que puede ayudarle (pero recuerde que tampoco son full prof) es utilizar códigos mixtos, codificar sus códigos importantes en lenguaje no administrado y hacer una DLL como en C o C++ y luego protegerlos ya sea con Armageddon o Themida. Themida es no para cada galleta, es uno de los mejores protectores del mercado, también puede proteger su software.NET.

 4
Author: Tejashwi Kalp Taru,
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-05-10 16:59:28

He oído hablar de algunos proyectos que compilan directamente IL en código nativo. Puedes obtener información adicional de este post: ¿ Es posible compilar código. NET IL a código máquina?

 3
Author: Vitaliy Liptchinsky,
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-05-23 12:34:38

Utilizamos {SmartAssembly} para la protección.NET de una aplicación distribuida de nivel empresarial, y ha funcionado muy bien para nosotros.

 3
Author: Dana Holt,
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-03-19 15:01:55

Si quieres proteger completamente tu app de la descompilación, mira el Hasp de Aladdin. Puede envolver sus ensamblados en un shell cifrado al que solo puede acceder su aplicación. Por supuesto, uno se pregunta cómo son capaces de hacer esto, pero funciona. Sin embargo, no se si protegen su aplicación de archivos adjuntos/reflexión en tiempo de ejecución, que es lo que Crack.NET es capaz de hacerlo.

Edit Editar También tenga cuidado de compilar a código nativo como una solución...hay descompiladores para código nativo como bien.

 2
Author: Michael Brown,
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-03-19 15:00:55

Si alguien tiene que robar su código, probablemente significa que su modelo de negocio no está funcionando. ¿Qué quiero decir con eso? Por ejemplo, compro tu producto y luego pido ayuda. Estás demasiado ocupado o crees que mi petición no es válida y es una pérdida de tiempo. Descodifico su producto para apoyar mi negocio relativo. Su producto se vuelve más valioso para mí y priorizo mi tiempo de una manera de resolver el modelo de negocio para aprovechar su producto. Recodifico y cambio la marca de su producto y entonces sal y gana el dinero que decidiste dejar sobre la mesa. Hay razones para proteger el código, pero lo más probable es que esté mirando el problema desde la perspectiva equivocada. Por supuesto que lo eres. Tú eres el "codificador", y yo soy el hombre de negocios. ;- ) ¡Salud!

Ps. También soy desarrollador. es decir, "codificador"

 0
Author: Adam Cox,
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-06-19 13:58:14

¿Tienes API?

En lugar de intentar proteger su archivo ddl en uno de sus productos en todos los dispositivos de sus clientes, ¿por qué no crear un servicio API para sus características de producto preciosas? Deje que el producto real que se guarda en un dispositivo consuma esa API para entregar el producto como lo desee.

Creo que de esta manera está 100% seguro de que su código no se descompila y establece sus propios límites en su API para que los desarrolladores / hackers no consuman su API de una manera no lo quieres.

Seguro que es un poco más de trabajo, pero al final, usted tiene el control.

 0
Author: CularBytes,
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
2015-12-29 18:53:13

Sé que esto es viejo pero, Themida es el software anti-craqueo más avanzado que he usado.
Pero no es gratis.

 0
Author: sh4dowb,
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
2018-02-20 19:37:39