net full .net protection

full - .net reactor



Protección de software mediante cifrado (14)

¿Es esta información simplemente material comercial o cosas que compartes con los trabajadores y tan fuerte?

Si es el último, quizás puedas escribir un programa rápido de c ++ para xor. Básicamente, si la longitud de la clave es igual a la longitud del documento, debe ser "irrompible". Lo que hago en c ++ es crear un búfer de caracteres aleatorios del tamaño del documento, luego xor, y luego simplemente enviar el documento y el archivo de clave por separado y luego la otra persona o juntarlos para recuperar el documento.

No sé si eso te ayudará.

Para nuestro software usamos dongles de hardware para proteger el software. Ninguna protección es perfecta, pero esta solución comercial es asequible y mantiene a las personas honestas honestas (como se menciona en otro hilo). La ventaja es la clave de 128 bits que se almacena como ''ilegible'' en el dongle de hardware.

Queremos quitar este dongle de hardware y comenzar a usar la protección de software. Básicamente podemos usar un producto comercial, pero por otro lado eso tampoco será irrompible. No sé mucho sobre encriptación y es por eso que estoy publicando esto. ¿Cómo guardo una clave en una computadora con Windows que no será posible leer utilizando Reflector u otra cosa? Sin embargo, debería poder acceder a la clave para probar el código de la licencia.

Solo me gustaría una solución simple que no pueda ser pirateada simplemente usando Reflector.

¿O estoy haciendo una pregunta muy estúpida?

Gracias a todos por sus respuestas rápidas y útiles. No quiero usar licencias en Internet, ya que la aplicación se ejecuta no siempre en computadoras que están conectadas. Entonces tendré probablemente más problemas que resolverlos. Probablemente ahora vayamos por una solución comercial. Parece que la protección no es tan trivial.

¡¡Muchas gracias!!


Básicamente, necesitarás usar una solución comercial. El enfoque aquí es diferente de un dongle, y no se puede esperar simplemente replicar un dongle.

En cambio, la solución principal es usar algún tipo de clave que se calcula en parte a partir de cosas sobre la computadora que ejecuta el software. Los keygens que hacen lo mismo pueden ser hechos por los crackers, pero así es. Podrían haber simplemente parchado tu software para no buscar un dongle.


Dirijo una empresa de software que ha tratado este tema durante casi 20 años. Como desarrollador y propietario de un negocio, me gustaría animarlo un poco a que amplíe un poco sus objetivos. Por ejemplo, es simplemente un error definir su problema como "prevenir la piratería". Su objetivo debe ser maximizar los ingresos.

Con eso dicho, hay algunas personas que simplemente nunca comprarán su software, pero que pueden hacer esfuerzos bastante importantes para obtenerlo de forma gratuita. No es "justo" que reciban una copia gratuita, pero poner muchos recursos en el esfuerzo por evitarlo es en gran medida una pérdida de tiempo. De hecho, estas personas a menudo terminan "volviéndose legítimas" simplemente para ingresar a nuestra lista de actualizaciones, para obtener soporte o porque su negocio evoluciona hasta el punto en que ahora pueden pagar nuestra licencia. En estos casos, la piratería original termina mejorando nuestros ingresos.

Entonces, ¿cómo licenciamos?

Generamos un número de licencia aleatorio con cada nueva instalación (un número entre 10K y 99K funciona muy bien). Luego tenemos un algoritmo para generar un número coincidente (cualquier cosa no trivial servirá). Por cierto, utilizamos un número aleatorio, por lo que cualquier intento de reinstalación en otra computadora da como resultado diferentes números de licencia / coincidencia.

A continuación, pedimos a los usuarios que nos llamen por teléfono para obtener el número correspondiente para su licencia (esto es importante). El software mira el número coincidente que ingresan y lo compara con el valor coincidente generado por el lado del usuario. Si hay una coincidencia, el software está completamente activado.

Digo que es importante que nos llamen por teléfono porque lo usamos como una oportunidad para hablar con ellos sobre su configuración, responder a cualquier pregunta y hacerles saber que están tratando con personas reales. Muy pocas personas tienen el descaro de intentar llamar y hacerse pasar por otra compañía (las buscamos y comparamos su información con nuestra base de datos de compras). Tenga en cuenta que nuestro paquete cuesta casi $ 2K, por lo que las llamadas telefónicas son razonables. Si su paquete cuesta menos y tiene un volumen mayor, puede hacerlo por correo electrónico. Finalmente, usamos el call-in para decirles a los usuarios cómo obtener actualizaciones y soporte técnico con su nueva licencia.

Finalmente, almacenamos la clave en la base de datos de la aplicación (una base de datos MSDE / SQL Express instalada localmente) para que cualquier intento de copiar la aplicación A no sea trivial y B) brinde una gran cantidad de datos específicos a la organización que primero compró la versión legítima (lo que hace que sea menos probable que compartan). La clave de licencia está encriptada y "dividida" en dos claves diferentes que se guardan en dos tablas diferentes. Por lo tanto, un simple "encontrar la clave e ingresarlo en la versión pirateada" no funcionará.

¿La línea de fondo? Cuando crea todo el paquete más que solo el software, construye unos pocos mecanismos básicos de protección e introduce el elemento humano, debería ver que no necesita el gasto y los problemas de un dongle para maximizar los ingresos.


En general, el software en una máquina no conectada en red puede ser descifrado. Si su aplicación no es de un nicho suficiente como para que los piratas puedan vender copias rajadas de ella, lo verá por ahí. Una solución de la que he escuchado que aparentemente fue exitosa es el código de auto modificación.


Genere el hash (SHA1, MD5, etc.) para una clave y codifique el hash en su aplicación. Distribuya la clave a sus usuarios. En su ejecutable puede verificar el hash de la clave especificada por el usuario contra el hash codificado:

bool CheckKey(string keyFromUser) return SHA1(key) == "ABC2983CF293892CD298392FG"; }

Esto significa que cualquier persona que pueda obtener la clave de su organización (u otro usuario) puede ejecutar la aplicación. Será prácticamente difícil determinar la clave inspeccionando el ejecutable.

Esto obviamente no es una protección muy fuerte.


Mi recomendación es que, si es habitable, quédate con el dongle. Esos tienden a ser los enfoques más viables.

Si no es una opción, definitivamente ve a un proveedor externo. Estará buscando, entre otras cosas, algunas características clave (sin juego de palabras):

  • Almacenamiento seguro de la clave
  • Comprobación de licencia
  • Ofuscación en tiempo de compilación (para dificultar el desmontaje de su aplicación)

Nada de esto es seguro. La conclusión es que los desarrolladores han estado luchando contra la piratería durante mucho tiempo, y siempre perdemos cuando los piratas están lo suficientemente determinados. Si su principal objetivo es mantener a la gente honesta honesta, entonces un paquete decente de protección de software comercial probablemente lo haga por usted.


No hay forma de asegurar completamente la llave. Si su programa puede leerlo, puede leerlo otro programa.


Puede probar los métodos estándar generalmente utilizados en los juegos de PC como: SafeDisc , StarForce , SecuROM o cualquier otro software de protección contra copia . Estos sistemas se encuentran entre los sistemas de software más desarrollados para proteger su aplicación.

No obstante, la experiencia nos dice que no solo el sistema de protección de software es irrompible y que el tiempo que les lleva a los piratas informáticos romperlos es directamente proporcional al valor del contenido protegido. No importa qué tan avanzado haya sido un sistema de protección para evitar copias pirateadas de un juego popular, la grieta le espera unos meses más adelante.

Usted ha declarado que el servidor de licencias es un problema para su sistema, pero no lo descartaría de inmediato. Creo que un servidor de licencias, que emite una licencia al menos la primera ejecución del programa (digamos una clave de descifrado diferente por instalación) es la mejor medida disuasoria para reducir la piratería. No solo por la solidez del método de encriptación sino también, y principalmente, por el sistema de registro automático. Si les informa a sus clientes que la clave de activación del software es única por instalación / usuario y que está almacenada y combinada con el perfil del usuario, lo pensarían dos veces antes de regalar la clave + software.


Si almacena la clave en la computadora local del usuario, un cracker podrá acceder a ella sin importar cuánto intente evitarlo.

¿Por qué no almacenar de forma remota la clave o una parte crucial del código de protección contra copia y tal vez procesarla de forma remota?


Si bien nada va a ser perfecto, revisa la API CryptProtectData si quieres hacerlo tú mismo.

Sin embargo, para ser honesto, es probable que tenga menos dolores de cabeza al comprar una solución.


Y esta es la razón por la que Copy Protection y ''mantener honestos a los usuarios honestos'' es una batalla perdida. No es necesario que los usuarios honestos sean honestos, ya lo son.

La mayoría de los esquemas efectivos de protección contra copia actualmente se centran en realizar controles de clave ocasionales contra un servidor central. Haga que la aplicación verifique su clave contra el servidor central de vez en cuando, y usted puede determinar si el software tiene licencia correcta. Estoy simplificando mucho las cosas, obviamente, pero ese es un enfoque.



Permítanme agregar algunas reflexiones a su pregunta:

  • ¿Su software requiere algún tipo de conexión a internet?
    • Si la respuesta es "sí", puede monitorear el uso. (¡Dígale al cliente sobre esta funcionalidad!)
    • Si la respuesta es "no", aún puede controlar el uso en la mayoría de los casos, pero no puede exigir una conexión a sus servidores para que el producto funcione.
  • ¿Desea agregar protección contra copia a su software? Esta no es una pregunta retórica, porque
    • parte del software debe ser personalizado por la compañía de software o sus socios. Si alguien hace una copia del software, tiene que ser personalizado por expertos, simplemente no le será de ninguna utilidad.
    • por ejemplo, si un empleado de su cliente desea utilizar su software de diseño de circuitos de gama alta para sus proyectos privados en casa y le da permiso para hacerlo, entonces tiene a alguien en el sitio de sus clientes, quien votará por su producto en cada decisión de compra.
    • el esfuerzo para una protección de copia de trabajo podría ser mayor que la pérdida creada por copias no autorizadas. (Recuerde, todavía puede incluirlo en la próxima versión).

La respuesta absoluta es, por supuesto, que un atacante determinado y hábil puede romper cualquier protección, pero, especialmente para el software que no tiene un alto nivel de demanda o fama, los atacantes hábiles y decididos son raros, por lo que tomar medidas de protección tiene sentido.

Para validar una licencia, enviar la clave a una ubicación central es la manera más segura, porque tendrían que romper su servidor (o protocolo, cuidado) para poder validar. Eso requeriría conectividad para usar el software que puede o no ser factible. También podría distribuir un ''servidor de licencias'' junto con su software para grandes instalaciones que solo requerirían acceso a la red local. Si no puede y debe validar solo localmente, podría escribir un dll en código nativo que dificultaría la ingeniería inversa.

Para proteger el código en sí mismo y hacer que su protección sea más difícil de evitar, ofusque:

Con todo, puede obtener un mejor valor de una solución empaquetada.