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.
¿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