Pregunta

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 eliminar este dongle de hardware y comenzar a usar la protección del software. Básicamente podemos usar un producto comercial, pero, por otro lado, tampoco será irrompible. No sé mucho sobre el cifrado y es por eso que estoy publicando esto. ¿Cómo almaceno una clave en una computadora con Windows que no será posible leer usando Reflector u otra cosa? Sin embargo, debería poder acceder a la clave para probar el código de licencia.

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

¿O estoy haciendo una pregunta muy estúpida?


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

¡Muchas gracias!

¿Fue útil?

Solución

Dirijo una compañía de software que se ha ocupado de este problema durante casi 20 años. Como desarrollador y como propietario de un negocio, primero me gustaría animarle a ampliar un poco sus objetivos. Por ejemplo, es simplemente un error definir su problema como " prevenir la piratería. & Quot; Tu objetivo debe ser maximizar los ingresos.

Dicho esto, hay algunas personas que simplemente nunca comprarán su software, pero que pueden hacer esfuerzos bastante significativos para obtenerlo de forma gratuita. No es " justo " que obtengan una copia gratuita, pero poner una gran cantidad de recursos en el esfuerzo para prevenirla es en gran medida una pérdida de tiempo. De hecho, estas personas a menudo terminan "yendo legítimamente" simplemente para ingresar a nuestra lista de actualizaciones, para obtener asistencia 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 al azar con cada nueva instalación (un número entre 10K y 99K lo hace muy bien). Luego tenemos un algoritmo para generar un número coincidente (cualquier cosa que no sea trivial hará). Por cierto, utilizamos un número aleatorio para que cualquier intento de reinstalación en otra computadora resulte en diferentes números de licencia / coincidencia.

A continuación, les pedimos a los usuarios que nos llamen al 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 en 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 empresa (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, utilizamos el llamado para informar 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) sea no trivial y B) proporcione una gran cantidad de datos específicos para la organización que primero compró la versión legítima (haciendo que sea menos probable que compartan). La clave de licencia está encriptada y " dividida " en dos claves diferentes que se mantienen en dos tablas diferentes. Por lo tanto, un simple " buscar la clave e ingresarla en la versión pirateada " no funcionará.

La línea de fondo? Cuando crea el paquete completo más que solo el software, integra algunos mecanismos básicos de protección e introduce el elemento humano, debería ver que no necesita el gasto y la molestia de un dongle para maximizar los ingresos.

Otros consejos

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

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 está en un alto nivel de demanda o fama, los atacantes hábiles y determinados 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 forma más segura, ya que tendrían que descifrar su servidor (o protocolo, cuidado) para poder validar. Eso requeriría conectividad para usar el software que puede o no ser factible. También puede distribuir un 'servidor de licencias' junto con su software para grandes instalaciones que requieren solo acceso a la red local. Si no puede y tiene que 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í y hacer que su protección sea más difícil de omitir, ofuscar:

En general, puede obtener un mejor valor de una solución empaquetada.

Y esta es la razón por la cual la Protección contra Copias 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 de Copias en estos días se centran en hacer chequeos de teclas 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 la licencia correcta. Estoy simplificando mucho las cosas, obviamente, pero ese es un enfoque.

Leí una interesante presentación sobre cómo skype se acerca a la tarea de proteger el software mediante cifrado.

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

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

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

Si no es una opción, entonces definitivamente vaya a un proveedor externo. Buscará, entre otras cosas, algunas características clave (no pretendía hacer un juego de palabras):

  • Almacenamiento seguro de la clave
  • Comprobación de licencias
  • Ofuscación en tiempo de compilación (para que sea más difícil desmontar tu 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 objetivo principal es mantener a las personas honestas, entonces un paquete de protección de software comercial decente lo hará por usted.

Si bien nada va a ser perfecto, echa un vistazo a CryptProtectData API si desea hacerlo usted mismo.

Para ser honesto, es probable que tengas menos dolores de cabeza solo por comprar una solución.

¿Estos datos son simplemente cosas comerciales o cosas que comparte con los trabajadores y son tan fuertes?

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

Aunque no sé si eso te ayudará.

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 la clave o una parte crucial del código de protección de copia de forma remota y tal vez procesarlo de forma remota?

Genere el hash (SHA1, MD5, etc.) para una clave y codifique el hash en su aplicación. Distribuye la clave a tus usuarios. En su archivo 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. Es prácticamente difícil determinar la clave al inspeccionar el archivo ejecutable.

Esto obviamente no es una protección muy fuerte.

En general, el software en una máquina no conectada a la red puede ser crackeado. Si tu aplicación no es lo suficientemente especializada como para que los piratas puedan vender copias agrietadas de la misma, lo verás ahí fuera. Una solución de la que he oído hablar que aparentemente fue exitosa es el código de auto-modificación.

Puede probar métodos estándar que se usan normalmente en 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 indica que no solo el sistema de protección de software es irrompible y que el tiempo que toman los piratas informáticos para romperlos es directamente proporcional al valor del contenido protegido. No importa qué tan avanzado se haya usado un sistema de protección para evitar las copias pirateadas de un juego popular, el crack espera unos meses más.

Ha declarado que el servidor de licencias es un problema para su sistema, pero no lo abandonaría de inmediato. Creo que un servidor de licencias, que emite una licencia al menos la primera vez que se ejecuta el programa (es decir, una clave de descifrado diferente para cada instalación) es la mejor medida disuasoria para reducir la piratería. No solo por la fuerza del método de encriptación sino también y principalmente por el sistema de registro automático. Si les dice a sus clientes que la clave de activación del software es única por instalación / usuario y que está almacenada y que coincide con el perfil del usuario, se lo pensaría dos veces antes de entregar la clave + software.

Por favor, permítame agregar algunas ideas a su pregunta:

  • ¿Su software requiere algún tipo de conexión a Internet?
    • Si la respuesta es " sí " ;, puede controlar el uso. (¡Dígale al cliente acerca de esta funcionalidad!)
    • Si la respuesta es " no " ;, en la mayoría de los casos, aún puede monitorear el uso, pero no puede imponer 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
    • la empresa de software o sus socios deben personalizar algunos programas. Si alguien hace una copia del software, que debe ser personalizada por expertos, no será de ninguna utilidad para él.
    • por ejemplo Si un empleado de su cliente desea usar su software de diseño de circuito de alta gama para sus proyectos privados en el hogar y usted 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 por 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).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top