Hay muchas maneras 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 contenga un archivo que contenga los hashes de las claves de licencia que se han incluido en la lista negra. La forma de administrar este archivo depende de usted, pero el archivo en sí solo necesita tener un hash por línea.
Luego, de forma recurrente, su software inicia una descarga de este archivo (la mayoría de los idiomas del lado del servidor lo proporcionan) y luego lo busca para 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ían ser suficientes para esto. Podría ser más sofisticado y hacer que la aplicación envíe la solicitud a su sitio y la busque en una base de datos sobre la marcha, pero el archivo (para lo que supongo que sería una lista corta) se mantendrá pequeño y podría ser La forma más fácil.
La parte más difícil será mantener la aplicación muerta. Después de todo, tiene que almacenar esto en algún lugar internamente, lo que significa que si es demasiado obvio, se puede subvertir fácilmente, e incluso si no es demasiado obvio, se puede revertir fácilmente restaurando las tablas adecuadas / 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 hecho con tu 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 con hash de "LIVE" + salt + timestamp 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, mayor será el rendimiento. Mientras las cosas coincidan (o se encuentre una coincidencia), la aplicación está viva; de lo contrario, incluso si el valor en el archivo o tabla especial es "EN VIVO", aún estará muerto si se intenta restaurar desde la copia de seguridad porque la marca de tiempo quedará 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 comprobación u otro método):
- CheckBlacklist
- Convierta la clave de licencia en hash con sal
- Solicitar el archivo de lista negra del servidor
- ¿Mi hash está en el archivo?
- Si es SÍ, entonces almacene el hash de "DEAD" + sal + marca de tiempo (truncado al día; no es necesario almacenar horas + días + minutos)
- Si NO, entonces almacene el hash de "LIVE" + salt + timestamp (trunc'd)
- IsKeyAlive
- Crear hash desde "LIVE" + sal + marca de tiempo truncada
- Cargar hash DeadAlive
- ¿Están de acuerdo?
- Si es SÍ, entonces estamos vivos; volver VERDADERO.
- Si NO, es posible que estemos 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? Volver VERDADERO
- Agregue un día a la marca de tiempo y repita el hash
- ¿Estamos de acuerdo ahora?
- SI? Volver 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 y una de las formas en que esto puede fallar. Considere todas las formas posibles y construya un sistema confiable (incluido uno que asuma que el cliente es correcto si no se puede descargar el archivo de la lista negra). Pruebe, pruebe, pruebe, y luego pruebe un poco más antes de implementar, porque si sale mal, habrá perdido la confianza de su cliente.