Eu implementei licença de uso em um arquivo xml criptografado, onde eu solicito um novo arquivo válido sempre no vencimento da anterior para que então o usuário possa acessar o sistema, nele eu armazeno uma chave de uso, validade, e o id do HD da máquina em que o software está instalado, sempre que é inserido uma nova licença eu armazeno os dados no BD para cruzar as informações, nunca tive problemas!
Você considera essa prática insegura ?
Não importa o que fizer na aplicação, podem facilmente descompilar o programa, depurar até o ponto que ocorre o bloqueio e retirar essas linhas de código.
Eu em java desktop utilizo o modelo cliente servidor, então eu pego o mac do servidor + a data que a aplicação pode chegar, uso uma criptografia e depois no servidor fica rodando uma thread que verifica de tempos em tempos se o MAC é igual e também se está dentro da data, coloco na aplicação para avisar que a licença chegou ao fim ,mas permito rodar por até mais 5 dias.
O código é você que tem que desenvolver, cada um faz de uma maneira diferente, e apesar de muitos programadores quererem ajudar outros, eles só dão instruções e não parte vitais de seu código que levou muito tempo e trabalho para fazer.
Se na empresa e na família do dono só tem “noobs”, faz da maneira mais fácil possível. Por exemplo, use a data como chave de liberação, usando qualquer criptografia para noobs.
1 - Seu sistema verifica em uma tabela no banco de dados se a mensalidade já foi paga no mês/ano.
2 - Caso não tiver pago, o sistema pede pro usuário a chave.
3 - Você gera a chave com a data criptografa pro usuário.
4 - O sistema descriptografa, valida a data e atualiza no banco.
Pra quem faz um sistema isso é bem trivial. E se o controle for por máquina, basta incluir o nome da máquina na chave.
Cara, isso é programação como qualquer outra coisa. Se você fez o sistema, isso é só mais uma funcionalidade. Os passos que postei sao super simples. Se tiver alguma dúvida pontual é só postar que o pessoal ajuda.