2008-10-22 11 views
13

Para nuestro software utilizamos llaves 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.Protección de software mediante cifrado

Queremos quitar este dongle de hardware y comenzar a utilizar la protección del 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.

Me gustaría simplemente 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!

+1

¿Podría decirnos algo más sobre qué tipo de comportamiento desea evitar? ¿Desea evitar que las personas enciendan el programa sin una clave? ¿Bloquear intentos de instalación pirateados? ¿Algo más? ¿Desea asignar una clave por cliente o varias claves que funcionen, o una clave por cada copia? etc. – ojrac

Respuesta

17

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

0

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

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

3

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 eficaces esquemas 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.

1

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

En su lugar, la solución principal es utilizar 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.

1

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

Si no es una opción, definitivamente debe ir a un proveedor externo.Se le busca, entre otras cosas, algunas de las características clave (sin doble sentido):

  • Almacenamiento seguro de la llave
  • Licencia comprobar
  • tiempo de compilación ofuscación (para hacer que sea más difícil Desarme 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.

+0

Gracias por señalar que su uso de la palabra "clave" podría ser un juego de palabras, pero esta no era su intención. Si no hubieras hecho esto, me hubiera sentido inmensamente confundido al leer tu publicación y tuve que hacer varios días de análisis para darte cuenta de si * podría * ser un juego de palabras y si, de hecho, lo intentabas. – OwenP

10

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 medidas 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 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 propio código, y hacer que su protección más difícil de derivación, ofuscar:

Con todo, se podría obtener un mejor valor de un paquete solución.

+0

Estaba a punto de actualizar mi publicación con algunos de esos enlaces; ¡bien que me hayas vencido! +1 –

0

¿Son estos datos simplemente cosas comerciales o cosas que compartes con los trabajadores y tan fuerte?

Si es el último, quizás pueda escribir un programa rápido de C++ para xor it. 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, luego simplemente enviar el documento y el archivo de clave por separado y luego la otra persona o los junta para recuperar el documento.

No sé si eso te ayudará.

0

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

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

0

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 comprobar el hash de la clave especificada por el usuario con el hash codificado:

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

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

Esto obviamente no es una protección muy fuerte.

0

En general, el software en una máquina no conectada a la red puede estar agrietado. 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.

0

Usted podría intentar métodos estándar utilizados habitualmente en los juegos de PC, tales como: SafeDisc, StarForce, SecuROM o cualquier otro copy protection software. Estos sistemas se encuentran entre los sistemas de software más desarrollados para proteger su aplicación.

No obstante, la experiencia dice que no solo el sistema de protección de software es irrompible y que el tiempo que tardan los piratas informáticos en 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.

Ha declarado que el servidor de licencias es un problema para su sistema, pero no quise dejarlo 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 le 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.

13

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.

Dicho esto, 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 obtengan 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, solicitamos a los usuarios llamenos al 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 usamos eso como una oportunidad para hablar con ellos sobre su configuración, responder 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 la 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á.

¿El resultado final? 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.

+0

Pero si el usuario puede descompilar fácilmente su software, pueden deshabilitar el algoritmo de verificación de licencia o usarlo para generar nuevas claves de licencia. Después de todo, usted dice que su software compara el código de licencia proporcionado por usted con el "valor coincidente generado por el lado del usuario". Esto implica que el código para generar estos códigos de licencia está presente en su código. – LeonZandman

+5

¿Crees que mis usuarios pueden "descompilar fácilmente" mi software? La mayoría VAST de usuarios de computadoras apenas puede * usar * software. Verdaderamente, el 99.99% ni siquiera entendería lo que quiere decir con "descompilar software". Del otro 0.01%, tal vez 1 de cada 100 se preocuparía lo suficiente como para intentarlo. De ellos, tal vez la mitad tendría éxito. * * No voy a molestar al 99,9995% de mis usuarios para evitar que el último puñado rompa la aplicación, sería una decisión comercial horrible. –

+0

+1 "Su objetivo debe ser maximizar los ingresos" –

0

Por favor, permítanme añadir algunos pensamientos a su pregunta:

  • ¿Su software requiere ningún tipo de conectividad a Internet?
    • Si la respuesta es "sí", puede controlar 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 la 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.
    • p. si un empleado de su cliente desea utilizar su software de diseño de circuitos de gama alta para sus proyectos privados en el hogar y le da permiso para hacerlo, entonces usted 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, usted todavía puede incluirlo en la próxima versión.)
3

leí una a través de una interesante presentación sobre how skype approaches the task de protección de software mediante la encriptación.

+2

Es un documento fantástico. Gracias por un enlace. +1 –

Cuestiones relacionadas