2008-09-08 15 views
13

Mi empresa está buscando comenzar a distribuir algún software que hemos desarrollado y nos gustaría poder permitir que las personas prueben el software antes de comprarlo. También nos gustaría asegurarnos de que no se pueda copiar y distribuir a los clientes de nuestros clientes.Licencia de evaluación de software

Un modelo que hemos visto es vincular una licencia a una dirección MAC para que el software solo funcione en una máquina.

Lo que me pregunto es, ¿cuál es una buena forma de generar una clave de licencia con información incrustada diferente, como la fecha de caducidad de la licencia, la dirección MAC y las diferentes restricciones de software?

Respuesta

9

Le sugiero que tome las piezas de información que desee en la clave, y córtelas con md5, y luego solo tome los primeros X caracteres (donde X es una longitud de clave que cree que es manejable).

Criptográficamente, está lejos de ser perfecto, pero este es el tipo de área en la que desea poner en la cantidad mínima de esfuerzo que detendrá a un atacante casual: cualquier cosa más rápidamente se convierte en un agujero negro.

Ah, también debo señalar que, como parte de la clave, también deberá proporcionar la fecha de caducidad (y cualquier otra información que desee leer) en texto sin formato (o ligeramente ofuscado) siga este camino: el md5 es solo para evitar que el usuario final cambie la fecha de vencimiento para extender la licencia.

Lo más fácil sería un archivo de clave como esto ...

# License key for XYZZY 
expiry-date=2009-01-01 
other-info=blah 
key=[md5 has of MAC address, expiry date, other-info] 
+3

siempre y cuando utilice MD5 como firma, también podría utilizar una firma de clave asimétrica adecuada. –

+1

@Jason si solo está usando MD5, puede truncar el resultado de manera segura para producir algo manejable. Una firma requeriría que una cantidad significativamente mayor de datos sea parte de la "clave", ya que sería toda la firma encriptada MD5. Si lo truncaste, rompería el paso de verificación. – tylerl

0

Es difícil dar una buena respuesta sin saber nada acerca de su producto y los clientes. Para el software empresarial que se vende a personas técnicas, puede utilizar un sistema de licencias bastante complejo y lo resolverán. Para el software de consumo vendido a los que apenas saben leer y escribir, necesita un sistema mucho más simple.

En general, he adoptado la práctica de hacer un sistema muy simple que mantenga honestas a las personas honestas. Cualquier persona que realmente quiera robar su software encontrará una forma de evitar cualquier sistema DRM.

En el pasado he usado Armadillo (ahora Software Passport) para proyectos C++. Actualmente estoy usando XHEO para proyectos de C#.

1

Lo mantenemos simple: almacena cada licencia de datos en un XML (fácil de leer y administrar), crea un hash de todo el XML y críptelo con una utilidad (también propia y simple).

Esto también está lejos de ser perfecto, pero puede mantenerse durante un tiempo.

1

Casi todos los sistemas de licencias comerciales se han descifrado, hemos utilizado muchos a través de los años, todos se agrietan, la regla general es escribir la suya, cámbiela cada versión, una vez que intente descifrarla usted mismo.

Nada es realmente seguro, en última instancia, observe a los grandes jugadores de Microsoft, etc., van con el modelo que la gente honesta pagará y el otro copiará, no ponga demasiado esfuerzo en ello.

Si su aplicación vale la pena pagar dinero para las personas lo hará.

2

La empresa para la que trabajé usó realmente un usb dongle.Esto era muy útil porque:

  • Nuestro software también se instaló en esa memoria USB
  • El programa sólo funcionaría si se encuentra la llave de hardware (única) (cualquier llave USB estándar tiene que, por lo que no lo hace tiene que comprar algo especial, ningún palo va a hacer)
  • no se restringió a un ordenador, pero podría ser instalado en otro sistema, si lo desea

sé que la mayoría de las personas no les gusta dispositivos de seguridad, pero en este caso, fue bastante útil, ya que en realidad se usa con un propósito especial reproductor multimedia que también hemos entregado, las llaves USB por lo tanto podría ser utilizado como una demostración sobre cualquier PC, sino también, y sin ninguna modificación, se utiliza en la aplicación real (es decir, los jugadores reales), una vez que el cliente está satisfecho

8

Hemos utilizado el siguiente algoritmo en my company durante años sin una sola incidencia.

  1. Decida los campos que desea en el código. Bit-pack tanto como sea posible. Por ejemplo, las fechas podrían ser "la cantidad de días desde 2007" y luego puede salirse con 16 bits.
  2. Agregue un campo adicional de "suma de comprobación". (Verá por qué en un segundo.) El valor de este campo es una suma de comprobación de los bytes empaquetados de los otros campos. Usamos "los primeros 32 bits de MD5".
  3. Encriptar todo utilizando TEA. Para la clave, use algo que identifique al cliente (por ejemplo, nombre de la empresa + dirección de correo electrónico personal), de esa manera, si alguien desea publicar una clave en el interweb, debe incluir su propia información de contacto en texto sin formato.
  4. Convierte hexadecimal a una cadena de alguna manera sensata. Puede hacer dígitos hexadecimales rectos, pero a algunas personas les gusta elegir un conjunto diferente de 16 caracteres para hacerlo menos obvio. Incluya también guiones o algo regularmente para que sea más fácil leerlo por teléfono.

Para desencriptar, convierta hexadecimal en cuerda y descifre con TEA. Pero luego está este paso adicional: calcule su propia suma de verificación de los campos (ignorando el campo de suma de comprobación) y compare con la suma de comprobación dada. Este es el paso que garantiza que nadie manipule la clave.

La razón es que TEA mezcla los bits por completo, por lo que si se cambia un bit, es probable que todos los demás bits cambien durante el descifrado TEA, por lo tanto, la suma de comprobación no pasará.

¿Es esto pirateable? ¡Por supuesto! Casi todo lo es, pero esto es lo suficientemente ajustado y simple de implementar.

Si atar a información de contacto no es suficiente, entonces incluir un campo de "ID del nudo" y bloquearlo para la dirección MAC o algo por el estilo como usted sugiere.

0

Si el producto requiere el uso de internet, a continuación, se puede generar un identificador único para la máquina y el uso que consultar con un servicio de licencias web.

Si no es así, creo que ir con un producto comercial es el camino a seguir. Sí, pueden ser pirateados, pero para la persona que está absolutamente decidida a piratearlo, es poco probable que lo hayan pagado.

hemos utilizado: http://www.aspack.com/asprotect.aspx

También usamos una llamada de función en su producto SDK que nos da un identificador único para una máquina.

Buena compañía aunque claramente no nativos de habla inglesa ya que su primer producto se llamaba "AsPack".

15

He usado tanto FLEXlm de Macrovision (anteriormente Globetrotter) como el RLM más nuevo de Reprise Software (según tengo entendido, escrito por los autores originales de FlexLM). Ambos pueden desactivar la dirección MAC o un dongle físico, pueden estar bloqueados por nodo (vinculados a una sola máquina) o "flotantes" (cualquier máquina autorizada en la red puede obtener una licencia asignada por un servidor de licencia central, hasta a un número máximo de copias simultáneamente desprotegidas determinado por cuánto han pagado). Existe una variedad de formas flexibles de configurarlo, incluidas las fechas de vencimiento, las funciones con sublicencias individuales, etc. La integración en una aplicación no es muy difícil. Estos son solo los dos que he usado, estoy seguro de que hay otros que también hacen el trabajo.

Estos programas se descifran fácilmente, lo que significa que hay vulnerabilidades conocidas que permiten a las personas eludir la seguridad de su aplicación que las utiliza, cortando sus propias licencias para falsificar el servidor de licencias o simplemente parcheando su binario para eludir la verificación de la licencia (esencialmente reemplazando la llamada de la subrutina a su biblioteca con un código que simplemente dice "return 'true'". Es más complicado que eso, pero a eso se reduce principalmente. Verá versiones crackeadas de su producto publicadas en varios sitios de Warez. Puede ser muy frustrante y desmoralizador, sobre todo porque a menudo están interesados ​​en descifrar para descifrar el sake, y ni siquiera tienen ningún uso para su producto o conocimiento de qué hacer con él. es obvio si tiene un programa suficientemente especializado.)

Debido a esto, algunas personas dirán que debe escribir el suyo, tal vez incluso cambiar el esquema de cifrado con frecuencia. Pero no estoy de acuerdo. Es cierto que lanzar su propia cuenta significa que los exploits conocidos contra FLEXlm o RLM no funcionarán instantáneamente para su aplicación. Sin embargo, a menos que seas un experto total en este tipo de seguridad (que claramente no eres o no estarías haciendo la pregunta), es muy probable que en tu inexperiencia termines escribiendo un documento mucho menos seguro y más fácil de descifrar. esquema que los líderes del mercado (por débiles que sean).

La otra razón para no hacer las suyas es simplemente que se trata de un juego infinito de gatos y ratones. Es mejor para sus clientes y sus ventas poner un mínimo esfuerzo en la seguridad de las licencias y pasar ese tiempo depurando o agregando características. Debes enfrentarte al esquema de licencias simplemente como "mantener honestas a las personas honestas", pero no para evitar un resquebrajamiento determinado. Acepte que los crackers no habrían pagado por el software de todos modos.

No todos pueden adoptar este tipo de actitud zen. Algunas personas no pueden dormir por la noche sabiendo que alguien está obteniendo algo por nada. Pero trata de aprender a manejarlo. No puede detener a los piratas, pero puede equilibrar su tiempo/esfuerzo/gasto tratando de detener toda la piratería en lugar de mejorar su producto para los usuarios. Recuerde, a veces las aplicaciones más pirateadas también son las más populares y rentables. Buena suerte y duerme bien.

4

No utilice las direcciones MAC. En algunos hardware que hemos probado, en particular algunos Thinkpads de IBM, la dirección MAC puede cambiar al reiniciarse. No nos molestó en investigar por qué fue así, pero aprendimos bastante temprano durante nuestra investigación a no confiar en ello.

Exención de responsabilidad obligatoria & enchufe: la compañía que cofundé produce el OffByZero Cobalt licensing solution.Por lo tanto, probablemente no le sorprenderá saber que recomiendo subcontratar su licencia, &, centrándose en sus competencias principales.

En serio, esto es bastante complicado de hacer bien, & las consecuencias de equivocarse podrían ser bastante malas. Si tiene un precio alto de bajo volumen, unas pocas copias pirateadas podrían afectar seriamente sus ingresos, & si tiene un alto precio de bajo volumen, entonces hay un incentivo para que warez d00dz rompa su software por la reputación de &.

Una cosa a tener en cuenta es que no existe una licencia verdaderamente a prueba de crack; una vez que alguien tiene su código de bytes en su hardware, ha regalado la capacidad de controlar completamente lo que hacen con él.

Lo que hace un buen sistema de licencias es subir el listón lo suficientemente alto como para comprar su software es una mejor opción, especialmente con el aumento de software pirateado infectado por malware. Le recomendamos que tome una serie de medidas para asegurar su aplicación:

  • conseguir un buen sistema de licencias de terceros
  • pimienta de su código con los cheques de alcance-contenido (por ejemplo, hay una variable global como fIsLicensed, no hacemos comprobar el estado de una función cerca del código que implementa la función)
  • empleo ofuscación grave en el caso del código .NET o Java
1

he usado un número de diferentes productos que hacen la generación de licencia y he creado mi propia solución pero todo se reduce a wh a voluntad le dará la mayor flexibilidad ahora y en el futuro.

Los temas que usted debe centrarse en para generar sus propias claves de licencia son ...

formateo HEX, criptografía de curva elíptica, y cualquiera de los algoritmos para el cifrado como AES/Rijndael, DES, Blowfish, etc. Estos son excelentes para crear claves de licencia.

Por supuesto, no es suficiente tener una clave, también necesita asociarla a un producto y programar la aplicación para que se bloquee según un sistema clave que haya creado.

He tenido problemas con la creación de mi propia solución, pero al final, cuando se trataba de ganar dinero con el software tuve que abandonar y obtener una solución comercial que me ahorraría tiempo generando claves y gestionando mi línea de productos. ..

Mi favorito hasta ahora ha sido License Vault de SpearmanTech pero también he probado FlexNet (costoso), XHEO (demasiada programación requerida) y SeriousBit Ellipter.

Elegí el producto License Vault al final porque lo conseguiría por mucho más barato que los demás y simplemente tenía más para ofrecerme ya que hacemos la mayor parte de nuestro trabajo en .NET 3.5.

Cuestiones relacionadas