Expirar meu Software

Boa noite,

Eu sei que não existe uma maneira 100% segura de realizar uma validação de licença num software, mas…
Eu desenvolvi um software e estou começando a comercializa-lo para alguns clientes.
Gostaria de saber qual a melhor forma de eu controlar as validações da seguinte forma:

  • Gostaria de ter um controle para expirar o software de acordo com uma certa quantidade de tempo. Por exemplo, caso o cliente pague uma licença de 1 mês, apos esse tempo o sistema deverá travar e não permitir o acesso enquanto ele não comprar uma nova licença.
  • Também gostaria de um controle que não vá permitir que o usuário instale meu software em outras maquinas.

Qual as melhores alternativas que vocês podem me oferecer para esses problemas ?

Obrigado

1 curtida

Bem, eu faria o seguinte:

Após um período de X dias buscar a validação em alguma URL na internet. O software mandaria uma “chave” única por cliente.
Claro que a data do sistema pode ser facilmente burlada. Armazenar os dias num contador em arquivo criptografado também é Fail, pois há softwares que “retrocedem” o HD todo o dia.

Dai, eu criara um contador de registros no banco. Após certa quantidade de linhas o sistema tentaria acessar a internet. Caso não consiga, trava e pronto.

Uma solução mais simples seria: Se o plano é mensal você envia uma chave mensalmente que libera o acesso ao sistema só naquele cliente. O cliente é obrigado a abrir seu email pra baixar e “instalar” essa chave.

Claro que essas ideias são meio “antipáticas” e pouco dinâmicas, mas pelo menos são mais próximas dos 100% de segurança anti-pirataria.

boa
tambem estou criando alguns softwares aki e gostaria de algumas idéias para validação de programas.
“bom eu acho que não precisaria ser tão drastico pois acho que se for um usuário com PI(primário interrompido) com certeza não vai conseguir burlar”

bom eu pensei em numeros de acesso cada vez que o usiário abrir o programa ele soma o acesso, ai você analisa se seu software precisa se aberto sempre ai você vende por acessos.
30 acessos por R$60,00 por exemplo.

Não gosto muito dessa ideia de x quantidades de acesso, não vejo esse tipo de abordagem viável para aplicações de mercado. Eu prefiro algo como por um determinado tempo, pois o cliente está ciente que ele poderá utilizar o software perfeitamente sem problemas até o tempo que ele pagou e caso ele deseje mais tempo basta ele comprar uma nova licença.

E jyoshiriro, sua ideia é boa mais não quero depender de um acesso a internet. Tenho clientes que trabalham 100% offline, então tenho que arrumar uma solução viável para todos os meus perfis de clientes. Mais obrigado pela dica.

Tem alguma forma valida de se fazer essa validação através de chaves de serial ?

Obrigado

1 curtida

Ola

Um grande problema de abordagens offline é que geralmente são faceis de burlar com varias técnicas. Por exemplo, eu posso instalar o software em uma maquina virtual e sempre ajudar o relogio da mesma para um determinado dia e ai usar o seu sistema feliz da vida para sempre. Chega um ponto que vc quer fazer algo que tenha algum nivel de dificuldade que valha a pena investir.

No cenário que vc descreveu surge a pergunta: os seus clientes podem ter uma rede interna? Pois vc pode liberar 2 softwares

  1. o seu programa em si
  2. um servidor de chaves

Nesse caso os programas poderiam fazer um acesso (criptografado) ao servidor antes de iniciar e estabelecer um “lock”, ou seja se o cara tem 3 licensas só 3 clientes poderão se conectar, o quarto vai ficar em espera. A complexidade do servidor de chaves pode exigir uma conexão mensal a internet de forma a validar os contratos, etc, sob pena de travar tudo.

É claro que isso traz outras duvidas como: de que forma podemos garantir que só um servidor de chaves esta rodando, mas se vc força o acesso pelo menos uma vez por mes a algum servidor seu, vc pode enviar um historico de conexões e analisar possiveis fraudes.

Cara, eu só acho que a primeira coisa a se fazer é, na primeira execução, salvar a data atual do sistema em algum arquivo criptografado… se o usuário retroceder a data, tem como você saber… se ele já tiver feito isso antes de instalar e precisar avançar, problema dele… se ele deletar o arquivo e não for a primeira execução, dar outro aviso… sei lá… trabalhar com “autenticação” do tipo offline é chatinho…

1 curtida

O problema é diferenciar uma alteração de data fraudulenta de uma real.

Por exemplo: o horario de verão, mudei a hora para uma antes e meu software não pode parar de funcionar.

Ou então eu estava com o computador em 2013 sem querer. Nesse caso é interessante que eu possa me recuperar de um problema desses sem que liguem no meio da madrugada pra alguem.

O arquivo criptografado pode ser criado dentro de uma pasta da aplicação e, se for alterado ou for corrompido, também deve ser facil de resolver.

Algo me diz que isso se resolve com um advogado.

eu no seu lugar iria automatizar a geração do seu binário, sei la, algum script por exemplo que altere uma data limite no próprio código fonte em algumas classes, compile e empacote, de forma a você ter uma forma fácil de gerar este executável com base na data corrente, ou alguma data passada como parâmetro. estando no código fonte a pessoa teria que descompilar o software, achar onde tem que alterar, fazer isso, recompilar e re-empacotar… quase nenhum usuário conseguiria fazer isso…

editando…agora que me dei conta do cara pode simplesmente mudar o horário do so… burrice minha

você poderia armazenar a data e hora, aquele long la, de cada vez que o sistema foi aberto e fechado, caso algum seja menor que algum dos anteriores você trava o software… validar a cada start do software externamente em um servidor seu passando o id do cliente algum hash que te signifique algo…

se ele puder usar algum banco externo ai fica facil, você usa a hora do banco ao acessar o cliente não tem como alterar isso, você consegue bloquear por tempo facilmente.

eu criaria uma thread pra trabalhar junto com o windows… logo na instalação do programa

sei la algo como: SeuSoftware_Updater.exe, e colocava ele para rodar o tempo todo que a maquina estiver ligada(la no msconfig mesmo)…atualizando a data de 3 em 3 minutos em algum arquivo

quando a data desse arquivo fosse menor que a ultima data inserida, quando o seu sistema principal roda-se ele ja saía gritando que houve alteração e pedindo pra contactar o suporte…

outra coisa…seu sistema só rodaria com o processo SeuSoftware_Updater.exe com o PID validado, e em execução…

o arquivo com criptografia MD5, e oculto em uma pasta muito cabulosa…

A unica forma de quebrar o sistema acima é o seguinte:

  1. usuario procura Executavel SeuSoftware_Updater.exe no HD…
  2. usuario tira o Executavel do Msconfig
  3. Liga a maquina e faz tudo que tem que fazer sem executar seu software. ele volta o horário para o horário que fechou seu programa pela ultima vez,
  4. Executa o SeuSoftware_Updater.exe e executa seu programa…e roda pelo tempo que precisa,
  5. Assim que terminar ele finaliza o SeuSoftware_Updater.exe…

Meu imagina se todo usuário consegue fazer isso…? se é todo dia ele teria que fazer isso todo santo dia…uma hora ele esquece algum passo e o processo grava lá uma data anterior…

se o cara for bom ele consegue oq…? 5 dias …10 ? no maximo…além da data de expiração…

Qualquer controle feito localmente (arquivo, registro) não vai resolver o fato que o cara pode formatar a máquina… é muito fácil criar uma máquina virtual e toda vez que precisar “zerar”, é só aplicar uma imagem…

Se autenticação online não for possível, acho que a melhor saída seria usar um arquivo de licenciamento… nele ia ter o código gerado por você que definiria datas, limites de funcionalidades, etc… o problema seria esconder o código java que faria a “validação” do arquivo… qualquer um pode descompilar um arquivo class…

[quote=ul1sses]Qualquer controle feito localmente (arquivo, registro) não vai resolver o fato que o cara pode formatar a máquina… é muito fácil criar uma máquina virtual e toda vez que precisar “zerar”, é só aplicar uma imagem…

Se autenticação online não for possível, acho que a melhor saída seria usar um arquivo de licenciamento… nele ia ter o código gerado por você que definiria datas, limites de funcionalidades, etc… o problema seria esconder o código java que faria a “validação” do arquivo… qualquer um pode descompilar um arquivo class…[/quote]

a questão de formatar a máquina pode ser resolvido, criando um método de registro online…e Serial Dinâmica… se o usuário fez uma vez…por que ele não teria que fazer isso denovo ?

esse arquivo de licenciamento eu concordo, mais quem o altera seria um processo do windows…um .exe e não propriamente a aplicação java…se o cara quizer ir lá e alterar o class para não fazer a validação ai sim… mas acho que mesmo assim existe um meio de rebuscar o código…

Se bem que dependendo do publico alvo ninguem vai saber configurar maquina virtual pra piratear software.

E se você utilizasse um esquema de autenticação por hardware?
Distribua ao cliente tokens ou smart-cards com a chave (tantos quantos forem as licenças contratadas) e implemente a validação de modo que esse token precise estar na máquina para usar o software.
Quando terminar o contrato, ou caso o cliente fique inadimplente, basta recolher os tokens.

Srs… queria algo do tipo tbm… a minha aplicação (jar) é totalmetne offline… queria algo dentro do código mesmo, para iniciar a contagem desde a primeira execução…

Só tem um problema… não tenho a menor ideia de como fazer, não achei um código de exemplo…

Amigos, apesar do tempo que esse questionamento foi levantado, quero mostrar aqui uma solução, fiz um software e peguei o MAC da placa de rede, vai aparecer uma mensagem na tela com o MAC para ser enviado para mim ao mesmo tempo que ele cria um arquivo .ini em algum lugar com “INATIVO”. Toda vez que o software abre ele lê esse arquivo buscando a palavra “ATIVO”.

com o MAC em minhas mãos gero o serial retirando as letras deixando apenas os números, esse numero eu multiplico por 45 ou 555 fica a critério, o resultado eu concateno com duas letras no inicio e no final e envio para o cliente ativar o software.

surge a pergunta, COMO INSERIR ESSE SERIAL NA MAQUINA DO CLIENTE?

Simples, no momento que ele for ativar, vai está no codigo do software o mesmo algoritmo que eu uso para gerar o serial, só que tudo isso é executado em segundo plano. O algoritmo faz o calculo do MAC e gera um serial interno e armazena numa variável string. Quando eu enviar o serial que gerei, o software compara com o que foi gerado internamente no software do cliente, se for igual, o software exibe uma mensagem informando que foi ativado e escreve “ATIVO” no arquivo .ini, em seguida o software fecha para ser aberto novamente. Essa ideia pode ser melhorada.

Trabalho com C#, mas a logica é a mesma.

Grato,
Ari.

Se vc quer controlar o uso do software à distância, não é mais fácil disponibiliza-lo na forma de um serviço que é consumido sob demanda?

Claro que nesse caso precisa ter conexão a internet, mas vc disse que o software envia alguma coisa pra você, então estou assumindo que isso não é problema.