Existem várias maneiras de implementar algo assim, mas aqui está uma que não deve ser muito difícil de fazer:
Você precisa de um site disponível ao público em algum lugar que hospede um arquivo contendo os hashes das chaves de licença que foram incluídas na lista negra. A decisão de como você gerencia esse arquivo é sua, mas o arquivo em si só precisa ter um hash por linha.
Então, de forma recorrente, seu software inicia o download desse arquivo (a maioria dos idiomas do servidor fornece isso) e, em seguida, procura o hash da chave de licença instalada. Se for encontrado, o aplicativo sabe que deve morrer até que a lista negra seja removida.
MD5 ou similar mais um segredo deve ser suficiente para isso. Você pode ficar mais sofisticado e pedir ao aplicativo que envie a solicitação para o seu site e procure-a em um banco de dados em tempo real, mas o arquivo (pelo que eu suponho que seja uma lista curta) permanecerá pequeno e pode ser o jeito mais fácil.
A parte mais difícil é manter o aplicativo morto. Afinal, você precisa armazená-lo em algum lugar internamente, o que significa que, se for óbvio demais, pode ser facilmente subvertido e, mesmo que não seja óbvio demais, pode ser revertido facilmente restaurando a (s) tabela (s) apropriada (s) / arquivos). Portanto, sugiro um segundo método de proteção também.
Esse método armazenaria "LIVE" ou "MORTO" (ou algo suficientemente semelhante) em uma tabela ou arquivo, mas novamente HASHed. Isso precisa ser feito com seu sal E com um carimbo de data e hora. Sempre que uma página em seu aplicativo for executada, verifique esse valor com uma versão em hash de "LIVE" + salt + timestamp e permita um intervalo válido de timestamps (por exemplo, um dia, dois dias, uma semana, um mês etc.) Lembre-se de que quanto maior o alcance, mais difícil será o desempenho.). Desde que as coisas correspondam (ou uma correspondência seja encontrada), o aplicativo estará ativo; caso contrário, mesmo que o valor no arquivo ou tabela especial seja "LIVE", ele ainda estará inativo se houver uma tentativa de restauração do backup, pois o registro de data e hora ficará fora do seu limite.
Em resumo (isso pressupõe que você tenha algum método programático de verificar a validade de uma chave de licença, como algum tipo de soma de verificação ou outro método):
- Lista negra
- Converter chave de licença em hash com salt
- Solicitar arquivo da lista negra do servidor
- Meu hash está no arquivo?
- Se SIM, armazene o hash de "MORTO" + sal + carimbo de data / hora (truncado para o dia; não há necessidade de armazenar horas + dias + minutos)
- Se NÃO, armazene o hash de "LIVE" + salt + timestamp (truncado)
- IsKeyAlive
- Criar hash a partir de "LIVE" + salt + carimbo de data / hora truncado
- Carregar hash DeadAlive
- Eles concordam?
- Se SIM, então estamos vivos; retornar VERDADEIRO.
- Se NÃO, estamos possivelmente mortos, mas ainda podemos estar dentro da nossa janela de carimbo de data / hora:
- Subtraia um dia do registro de data e hora e repita o hash.
- Nós concordamos agora?
- SIM? Return TRUE
- Adicione um dia ao registro de data e hora e repita o hash
- Nós concordamos agora?
- SIM? Return TRUE
- Neste ponto, estamos fora do intervalo de data e hora sem correspondência. Retorna falso. (Matar app)
Agora, Deus sabe que há um milhão e uma das maneiras pelas quais isso pode falhar. Considere todas as formas possíveis e crie um sistema confiável (incluindo um que pressupõe que o cliente esteja certo se o arquivo da lista negra não puder ser baixado). Teste, teste, teste e, em seguida, teste um pouco mais antes da implantação, porque se der errado, você perderá a confiança do seu cliente.