Sistema de expiração de software [desktop]

Gente,

criei um sistema de expiração para um software que estou fazendo… Não consegui burlar, e nem sei se é possível…
Como acho (ACHO) que deu certo e se Deus quiser vai continuar dando, gostaria de compartilhar o método usado.

Eu deveria criptografar o arquivo, mas mesmo assim não fiz isso… Até por que ainda não pesquisei sobre… Masss, vamos ao que importa…

Criei uma classe controladora, que contém alguns atributos:

Date dataAnterior, dataExpiracao; int contador, max;

Ele utiliza o contador e a data de expiração para travar o sistema… O contador como um ‘backup’, caso o cara mude a data do sistema ou algo assim…

O contador é sempre incrementado quando a data atual for diferente da data anterior [significa que não é o mesmo dia]…
Se o contador for maior que max, então expirou…

Crio um objeto a partir dessa classe, e o serializo em um arquivo. Ao iniciar o programa, ele carrega o arquivo e verifica se já expirou e pronto. Qualquer Exception gerada na hora de recuperar o arquivo, trava o sistema como se tivesse expirado [por segurança].

O que acham disso?

É possível usar o procmon para descobrir que sistema ou chave de registro seu programa está gravando. Com isso em mãos, o que impede que seu usuário simplesmente substitua o arquivo com um backup, com uma data definida?

eu ainda não fiz, mas minha ideia é que eu determino uma data e a qtd de dias que ele tem, tudo via banco, e verifica a data a cada um segundo, quando a data é alterada (automatico, ou pelo usuário) a qtd de dias muda, aí quando eu gero a licença(Criptografada), Muda no banco a data e a qtd de dias. Entedeu ?

ViniGodoy, como o cara vai saber a estrutura do objeto a ser deserializado para poder modificá-lo ?

Eu entendi, mas queria deixar independente de banco. Se a solução com o objeto serializado for “segura” então, perfeito! x]

amigo d34d…

Cara eu estou fazendo a mesma coisa… só não manjo essa parte de serialização de objetos e tal…

Eu coloquei uma data de validade caso chegue nela o programa trava, e outra verificação onde verifico a data do sistema e ele tem que estar dentro de duas datas que criei… Mas se ele ficar alterando a data do sistema dentro destes dias o programa funciona… precisava muito dessa sua solução… vc me ajudaria??

Aqui estão os métodos que criei:


public boolean validaDataDeUso() throws ParseException {

		boolean dataNaValidade = false;

		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

		// Data atual recuperada do sistema
		Date dataAtual = new Date(System.currentTimeMillis());

		// Data informada pelo usuário
		Date dataValidade = sdf.parse("11/04/2014");

		// Verifica se a data atual é posterior a data informada
		if (dataAtual.after(dataValidade)) {
			dataNaValidade = false;
		}

		// Verifica se a data atual é anterior a data informada
		if (dataAtual.before(dataValidade)) {
			dataNaValidade = true;
		}

		// Verifica se as datas são iguais
		if (dataAtual.compareTo(dataValidade) == 0) {
			dataNaValidade = true;
		}

		return dataNaValidade;

	}

	public boolean validaDataAlterada() throws ParseException {

		boolean dataAlterada = true;

		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

		// Data atual recuperada do sistema
		Date dataAtual = new Date(System.currentTimeMillis());

		// Data Mínima que o sistema pode ter, se alterarem a data do PC para
		// antes desta (data da criação do arquivo) da erro
		Date dataMinima = sdf.parse("27/03/2014");
		
		Date dataMaxima = sdf.parse("29/03/2014");

		if (dataAtual.after(dataMinima) && dataAtual.before(dataMaxima)) {
			
			dataAlterada = false;
			
		} else {

			dataAlterada = true;
		}

		return dataAlterada;

	}

// NO MAIN EU MANIPULO:


public static void main(String[] args) throws ParseException {

		if (metodo.validaDataAlterada() == false) {
			if (metodo.validaDataDeUso() == true) {
				telaConectar.rdc();
			} else {
				JOptionPane.showMessageDialog(null, "Tempo de uso esgotado.","Aviso", javax.swing.JOptionPane.WARNING_MESSAGE);
			}
		} else {
			JOptionPane.showMessageDialog(null,
					"Tempo alterado indevidamente.", "Aviso",javax.swing.JOptionPane.WARNING_MESSAGE);
		}

	}