Hay muchas formas de implementar algo como esto, pero aquí hay una que no debería ser demasiado difícil de hacer:
Necesita un sitio web disponible públicamente en algún lugar que aloje un archivo que contenga los hash de las claves de licencia que se han incluido en la lista negra. La forma en que administre este archivo depende de usted, pero el archivo en sí solo necesita tener un hash por línea.
Luego, de manera recurrente, su software inicia una descarga de este archivo (la mayoría de los idiomas del lado del servidor lo proporcionan) y luego busca el hash de la clave de licencia instalada. Si se encuentra, la aplicación sabe que debe morir hasta que se elimine la lista negra.
MD5 o similar más un secreto debería ser suficiente para esto. Podrías ponerte más elegante y hacer que la aplicación envíe la solicitud a tu sitio y lo busques en una base de datos sobre la marcha, pero el archivo (por lo que supongo sería una lista corta) con suerte seguirá siendo pequeño y puede ser la forma más fácil.
La parte más difícil será mantener la aplicación muerta. Después de todo, debe almacenar esto en algún lugar interno, lo que significa que si es demasiado obvio, podría subvertirse fácilmente, e incluso si no es demasiado obvio, puede revertirse fácilmente restaurando la (s) tabla (s) adecuada (s) / archivo (s) Por lo tanto, sugiero un segundo método de protección también.
Este método almacenaría "LIVE" o "DEAD" (o algo suficientemente similar) en una tabla o un archivo, pero nuevamente HASHed. Esto debe ser mezclado con su sal Y una marca de tiempo. Cada vez que se ejecuta una página en su aplicación, verifique este valor con una versión hash de "LIVE" + salt + marca de tiempo y luego permita un rango válido de marcas de tiempo (por ejemplo, un día, dos días, una semana, un mes, etc. Tenga en cuenta que cuanto mayor sea el rango, más difícil será el rendimiento). Mientras las cosas coincidan (o se encuentre una coincidencia), la aplicación estará activa; de lo contrario, incluso si el valor en el archivo o tabla especial es "EN VIVO", seguirá estando muerto si se intenta restaurar desde la copia de seguridad porque la marca de tiempo estará fuera de su umbral.
En resumen (esto supone que tiene algún método programático para verificar la validez de una clave de licencia, como algún tipo de suma de verificación u otro método):
- CheckBlacklist
- Convertir clave de licencia a hash con sal
- Solicitar archivo de lista negra del servidor
- ¿Está mi hash en el archivo?
- En caso afirmativo, almacene el hash de "MUERTO" + sal + marca de tiempo (truncado al día; no es necesario almacenar horas + días + minutos)
- En caso negativo, almacene el hash de "LIVE" + salt + timestamp (trunc'd)
- IsKeyAlive
- Crea hash desde "LIVE" + salt + marca de tiempo truncada
- Cargar hash de DeadAlive
- ¿Están de acuerdo?
- Si es así, entonces estamos vivos; volver VERDADERO.
- Si NO, entonces posiblemente estamos muertos, pero aún podemos estar dentro de nuestra ventana de marca de tiempo:
- Resta un día de la marca de tiempo y repite el hash.
- ¿Estamos de acuerdo ahora?
- ¿SI? Devolver VERDADERO
- Agregue un día a la marca de tiempo y repita el hash
- ¿Estamos de acuerdo ahora?
- ¿SI? Devolver VERDADERO
- En este punto, estamos fuera del rango de marca de tiempo sin coincidencia. Falso retorno. (Matar aplicación)
Ahora, Dios sabe que hay un millón de maneras en que esto puede fallar. Considere todas las formas posibles y cree un sistema confiable (incluido uno que suponga que el cliente tiene razón si el archivo de la lista negra no se puede descargar). Pruebe, pruebe, pruebe y luego pruebe un poco más antes de implementar, porque si sale mal, habrá perdido la confianza de su cliente.