Ci sono molti modi per implementare qualcosa di simile, ma eccone uno che non dovrebbe essere troppo difficile da fare:
Hai bisogno di un sito web pubblicamente disponibile 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 tuo software avvia il download di questo file (la maggior parte delle lingue sul lato server lo prevede) e poi lo cerca per l'hash della chiave di licenza installata. Se viene trovato, l'applicazione sa che dovrebbe morire fino a quando la lista nera non viene rimossa.
MD5 o simili più un segreto dovrebbero essere sufficienti per questo. Potresti diventare più fan e richiedere che l'applicazione invii la richiesta al tuo sito e la cerchi in un database al volo, ma il file (per quello che presumo si spera sarebbe una breve lista) si spera che rimanga piccolo e possa essere il modo più semplice.
La parte più difficile sarà mantenere l'applicazione morta. Dopotutto, devi immagazzinarlo da qualche parte internamente, il che significa che se è troppo ovvio potrebbe essere facilmente sovvertito, e anche se non è troppo ovvio, può essere facilmente ripristinato ripristinando la / e tabella / i appropriata / File). Pertanto suggerisco anche un secondo metodo di protezione.
Questo metodo memorizzerebbe "LIVE" o "DEAD" (o qualcosa di sufficientemente simile) in una tabella o in un file, ma ancora HASH. Questo deve essere sottoposto a hash con il tuo sale E un timestamp. Ogni volta che viene eseguita una pagina dell'applicazione, controllare questo valore con una versione hash di "LIVE" + salt + timestamp e quindi consentire un intervallo valido di data e ora (ad esempio, un giorno, due giorni, una settimana, un mese, ecc. Tenete a mente che più ampia è la gamma, maggiore sarà la prestazione più dura.). Finché le cose coincidono (o viene trovata una corrispondenza), l'app è viva; in caso contrario, anche se il valore nel file o nella tabella speciale è "LIVE", sarà comunque morto se si tenta di ripristinare dal backup perché il timestamp non rientra nella soglia.
In sintesi (questo presuppone che tu abbia qualche metodo programmatico per controllare la validità di una chiave di licenza, come una sorta di checksum o altro metodo):
- CheckBlacklist
- Converti codice di licenza in hash con sale
- Richiedi il file della lista nera dal server
- Il mio hash è nel file?
- Se SÌ, memorizza l'hash di "DEAD" + salt + timestamp (troncato in base al giorno, non è necessario memorizzare ore + giorni + minuti)
- Se NO, memorizza l'hash di "LIVE" + sale + timestamp (trunc'd)
- IsKeyAlive
- Crea hash da "LIVE" + salt + trunc'd timestamp
- Carica hash DeadAlive
- Sono d'accordo?
- Se SÌ, allora siamo vivi; return TRUE.
- Se NO, forse siamo morti, ma potremmo essere ancora nella finestra del timestamp:
- Sottrai un giorno dal timestamp e ripeti l'hash.
- Siamo d'accordo ora?
- SI? Ritorna TRUE
- Aggiungi un giorno al timestamp e ripeti hash
- Siamo d'accordo ora?
- SI? Ritorna TRUE
- A questo punto, siamo fuori dalla gamma data / ora senza corrispondenza. Restituire FALSE.
(Kill app)
Ora, Dio sa che c'è un milione e un modo in cui questo può fallire. Considera tutti i modi possibili e costruisci un sistema affidabile (incluso uno che presuppone che il client sia corretto se il file della lista nera non può essere scaricato). Provalo, testalo, testalo e testane altri prima di distribuirlo, perché se va male, avrai perso la fiducia del tuo cliente.