Esistono molti modi per implementare qualcosa del genere, ma eccone uno che non dovrebbe essere troppo difficile da fare:
È necessario un sito Web accessibile pubblicamente da qualche parte che ospita un file contenente gli hash delle chiavi di licenza che sono state inserite nella lista nera. La gestione di questo file dipende da te, ma il file stesso deve avere solo un hash per riga.
Quindi, su base ricorrente, il software avvia un download di questo file (la maggior parte delle lingue sul lato server lo prevede) e quindi cerca l'hash della chiave di licenza installata. Se viene trovato, l'applicazione sa che dovrebbe morire fino alla rimozione della lista nera.
MD5 o simili più un segreto dovrebbero essere sufficienti per questo. Potresti diventare più fantasioso e fare in modo che l'applicazione invii la richiesta al tuo sito e la cerchi in un database al volo, ma il file (per quello che presumo sarebbe, si spera, un breve elenco), si spera rimanga piccolo e potrebbe essere la via più facile.
La parte più difficile sarà mantenere l'applicazione morta. Dopotutto, devi memorizzarlo da qualche parte internamente, il che significa che se è eccessivamente ovvio potrebbe essere facilmente sovvertito e anche se non è eccessivamente ovvio, può essere facilmente ripristinato ripristinando le tabelle appropriate / File). Pertanto suggerisco anche un secondo metodo di protezione.
Questo metodo memorizzava "LIVE" o "DEAD" (o qualcosa di sufficientemente simile) in una tabella o in un file, ma di nuovo HASHed. Questo deve essere cancellato con il tuo sale E un timestamp. Ogni volta che viene eseguita una pagina dell'applicazione, controlla questo valore con una versione con hash di "LIVE" + salt + timestamp e quindi consenti un intervallo valido di timestamp (ad esempio, un giorno, due giorni, una settimana, un mese, ecc. Tieni presente che maggiore è la gamma, maggiore sarà la prestazione delle prestazioni.). Finché le cose corrispondono (o viene trovata una corrispondenza), l'app è viva; in caso contrario, anche se il valore nel file o nella tabella speciali è "LIVE", sarà comunque morto se si tenta di ripristinare dal backup perché il timestamp non rientra nella soglia.
In breve (ciò presuppone che tu abbia un metodo programmatico per verificare la validità di una chiave di licenza, come una sorta di checksum o un altro metodo):
- CheckBlacklist
- Converti chiave di licenza in hash con salt
- Richiedi il file della lista nera dal server
- Il mio hash è nel file?
- Se SÌ, memorizza l'hash "DEAD" + salt + timestamp (troncato al giorno; non è necessario memorizzare ore + giorni + minuti)
- Se NO, quindi memorizza l'hash di "LIVE" + salt + timestamp (troncato)
- IsKeyAlive
- Crea l'hash da "LIVE" + salt + timestamp troncato
- Carica l'hash DeadAlive
- Sono d'accordo?
- Se SÌ, allora siamo vivi; restituisce VERO.
- Se NO, allora forse siamo morti, ma potremmo essere ancora nella nostra finestra del timestamp:
- Sottrai un giorno dal timestamp e ripeti l'hash.
- Siamo d'accordo ora?
- SÌ? Restituisce VERO
- Aggiungi un giorno al timestamp e ripeti l'hash
- Siamo d'accordo ora?
- SÌ? Restituisce VERO
- A questo punto, siamo fuori dall'intervallo di data e ora senza corrispondenza. Restituisci FALSO. (Uccidi app)
Ora, la bontà sa che ci sono un milione e un modo in cui questo può fallire. Prendi in considerazione tutti i modi possibili e costruisci un sistema affidabile (incluso uno che presume che il client sia giusto se il file della lista nera non può essere scaricato). Provalo, testalo, testalo e poi testalo ancora prima di implementarlo, perché se va storto perderai la fiducia del tuo cliente.