Bloquear programa

Olá pessoal! Queria saber como que faço para mim bloquear meu programa para funcionar só em um computador, pois assim se um cliente compra o programa e ele passar para um amigo o programa não funcionará. Tipo um serial uma chave única coisa assim.
Gostaria de saber como faz isso em Java.

Obrigado!

Esse programa é para uma pessoa ou empresa específica?

Bem complicado! Visto que muitas empresas gigantes não conseguem isso, imagine pobres mortais como nós.

Já pensou em algo open source?

Sim ja pensei mais é que é o seguinte:
Meu pai fez um programa em delphi para emissao de nf-e e nf 21 e controle de clientes, tudo para um provedor de internet. Daí nós vamos começar desenvolver esse sistema em java web. Então nós não vamos deixar open source, tem que ser pago. Não seria para uma empresa expecífica mas sim para provedores de todo o brasil.

Obrigado!

Entendi.

Fiz um esquema uma vez que usava um arquivo de licença (um arquivo com uma classe serializada) que quando o usuário faz o upload, o sistema “de-serializa” o arquivo e faz um update no banco de dados para o cliente usar por um tempo contratado. Pode ser uma idéia.

** Claro que isso não impede do cara descobrir como foi feito e burlar. Hoje em dia nem nossa conta corrente no banco está segura… rs

É mas se o cara pesgasse o programa e passasse para outra pessoa ia funcionar perfeitamente certo?

Obrigado!

Bem, meu sistema funciona dessa maneira q vc quer…Nunca tive problemas.
Ficou show, nunca levei um calote, pois todo mes ele vence e eh necessario uma senha q nunca se repete para ativa-lo…E ainda funciona em apenas um computador, o usuario pode ateh tentar instalar em outro, nao funciona sem a senha de restricao.
Funciona tanto em Windows como em Linux/Mac/BSD etc…

Se interessar, me mande um MP q te digo como fiz.

t+

[quote=fernandopaiva]Bem, meu sistema funciona dessa maneira q vc quer…Nunca tive problemas.
Ficou show, nunca levei um calote, pois todo mes ele vence e eh necessario uma senha q nunca se repete para ativa-lo…E ainda funciona em apenas um computador, o usuario pode ateh tentar instalar em outro, nao funciona sem a senha de restricao.
Funciona tanto em Windows como em Linux/Mac/BSD etc…

Se interessar, me mande um MP q te digo como fiz.

t+
[/quote]

Pôxa Fernando poderia postar aki pra todos verem, fikei curioso, qdo usava o clipper na loja do patrão tinha um arquivo na máquina do cliente e na hora de entrar no sistema era checado isso, funcionava bem, mas era uma solução pobre…rs

Bem a forma q criei eh a seguinte…Vou referir a meu sistema.

1 - Criei 2 arquivos.dat…Os 2 arquivos gravam uma data…A data de instalacao e expiracao…Apenas meu sistema consegue ler os arquivos. Se tentar edita-lo ele diminui ou aumenta o tamanho do arquivo, coisa q meu sistema tbm verifica para saber se foi violado.

2 - 1 arquivo fica a mostra, na pasta do sistema e outro fica oculto no sistema operacional, tanto faz o sistema…Linux/Unix ou Windows, eu faço isso usando comandos do console do sistema para ocultar o arquivo em um lugar de dificil acesso. E tbm uso um nome nada intuitivo q se parece com algo q seja do sistema…como mswin.dll ou kernellin.so

3 - Meu sistema sempre q inicia, verifica a data gravada nos 2 arquivos…no q esta amostra e no oculto e verifica se a data de expiracao for igual a data do sistema ele para pedindo a senha, quando isso acontece ele apaga o arquivo oculto, e somente ira gerar outro quando ativar.
Caso o cliente adiante a data alem da data de epiracao, ao tentar carregar o sistema ele verifica q a data eh maior q a data de expiracao, apagando o arquivo oculto e parando o sistema aguardando novamente a proxima senha para ativaçao, para soh assim gerar os novos arquivos e permitir o uso.
Caso o cliente volte a data o sistema verifica a data de ativação, se for menor tbm para tudo e aguarda a senha pra ativaçao.

4 - Esta senha, soh eu posso gera-la, pois criei um sistema de keygen, onde faço alguns calculos basicos referentes a data de expiracao do sistema. Essa senha o sistema guarda numa variavel interna e espera por ela ateh a sua ativacao, gerando um novo arquivo oculto q libera o sistema gravando a proxima data q ira expirar o sistema juntamente com os arquivos.

5 - O sistema possui um padrao de busca pelos 2 arquivos…ele verifica primeiramente o tipo de SO, verifica se existe alguns dados do SO, e ai sim vai ateh o arquivo oculto, e sempre qdo a pessoa entra com a senha de ativação ele refaz tudo isso. Gerando assim novos arquivos de Licença e Ocultação, liberando o sistema para 40dias

6 - Usando JodaTime, fiz um metodo que verifica quando faltam 10dias pro sistema parar, esse aviso fica o tempo todo sendo exibido em um JTextArea, assim o cliente sabe que daqui 10 dias seu sistema vai parar totalmente, meus clientes q usam ja estaum acostumados, entaum eles me pagam, eu passo a senha pra eles e quando vence eles apenas inserem a nova senha e tem mais 40 dias pra usar.

7 - Caso o cliente tente anotar a senha q passei, para tentar usa-la na proxima expiração ou na propria feita no dia, ja vai ter trocado tudo, a senha vale apenas uma vez…Pois como disse, ela eh interna, quem aguarda por ela eh o sistema, naum um banco de dados onde tenho senhas padroes…E tudo isso eh feito atraves de calculo baseado na data de expiracao, onde fiz um programa paralelo que dei o nome de keygen, pois eh isso q ele faz, gera senhas baseadas em calculos pela data de expiracao, e mando pro cliente.

8 - Houve um cliente meu que tentou copiar o sistema para outra maquina, quando foi executa-lo…ja teve a tela.: “Este sistema naum esta autorizado para essa maquina”…Ja me ligou, e disse q precisaria usa-lo em outra maquina, ai era uma agora sao 2 mensalidades…kkk !!!

9 - O que mais gostei de ter feito isso, foi que ficou praticamente inviolavel e ainda eu forcei o erro do cliente, colocando no diretorio raiz do meu sistema o arquivo de licença com o nome de licenca.dat, como soh meu sistema q le, e somente meu sistema sabe o q tem dentro gravado. O cliente, acredita q esse arquivo eh o de licença, o q realmente eh um deles, mas o q ele não sabe eh q ele necessita de varios outros processos, como o lance do arquivo oculto mswin.dat ou kernel.so, ateh chegar nesse licenca.dat. E que apenas copiando o diretorio raiz, não ira funcionar…Caso ele edite ou apague esse arquivo licenca.dat, tbm tudo vai parar de funcionar…
Criei isso intencionalmente, kkkkk !!! E digamos q um dia ele descubra meu arquivo oculto no sistema, ou ache uma maneira de le-lo, assim q for alterado tbm vai parar de funcionar, ou ainda verificar a data do sistema…kkk !!!

Para ser mais exato na minha explicação, eu queria mostrar pra vcs o sistema em execução, mas como nao eh possivel, vou colocar aqui a tela onde o sistema pede a senha e o keygen q criei pra gerar as senhas e refazer os processos q relatei acima…

t+, qquer duvida postem ae.



Interessante e bem cercado por todos os lados, vlw!

Nossa! Legal… Meu pai comprou um sistema que é mais ou menos dessa forma em pascal só que um pouco mais complexo. Será que consigo pegar esse componente que ele tem para gerar as senhas e implementar no meu sistema web? Porque sou iniciante e vou demorar de mais para conseguir fazer isso e como ele já tem feito vou tentar ver se consigo implementar em meus sistemas.
Mesmo assim obrigado. Vou tentar também fazer isso.

Obrigado a todos que responderam, nos ajudou bastante
Flws

Olha esdras, qdo estava modelando a parte de segurança q montei para meu sistema, eu pensei nesses geradores de senha, e o q me veio a mente…

1- Vou ter que guardar essas senhas em algum lugar, um lugar onde sempre vou ter q verificar se existe e se existir liberar, porem como esse lugar vai ter as senhas padroes, vc pode usua-las sempre, ou seja, o cliente pode anotar a senha passada e usa-la na proxima vez q o sistema parar, concorda???

2 - A solução q encontrei foi q a cada mes o meu sistema faz o calculo baseado na data de expiracao juntamente com a data de ativacao e gera uma senha interna, uma variavel do tipo String msm, usando essa mesma logica eu montei o meu proprio gerador de keygen, onde eu retorno a senha q o sistema esta aguardando e passo para o cliente, q insere e o sistema verifica q são as 2 iguais, ai ele faz todo o processo q sitei…Cria um novo arquivo de ativação e um novo arquivo de expiração, assim todo mes o cliente tem q me ligar ou mandar um email com o comprovante do deposito feito, pois seu sistema para e força ele a registra-lo novamente, entende ?
Assim eu tenho um controle maior do R$ e não levo calote…Pois eu não passo a senha sem antes ele me pagar. E o cliente fica condicionado a me mandar o email ou me ligar, antes mesmo do sistema vencer, pois como disse, faltando 10dias para vencer o proprio sistema ja começa avisa-lo.

3 - Uma coisa q esqueci de relatar é quanto ao intervalo de datas…ativacao e expiracao, eu tbm previ isso. Imaginem q o sistema ativado hoje 27/08 ele vai parar daqui 40dias, o cliente não deixa passar a data, tipo…como foi ativado hoje, e ele sabe q daqui 40 dias vai parar, ele sempre mantem a data como 27, ou outra data no intervalo de 40 dias, pois lembrem-se que depois de instalado ele não pode voltar a data para antes da instalacao ou depois da expiração(essas duas condições fazem o sistema parar).
Mas e o intervalo de 40dias entre a instalacao e a expiracao ???, Pois eu criei um esquema interno q gera caixas e ele não permite gerar um caixa sempre com a mesma data…Ele verifica. “O caixa do dia 27 ja foi aberto em um outro momento, favor verificar”, logicamente ele faz isso depois do fechamento do caixa…

4 - Se o cliente deixar o caixa aberto sempre, imaginem q ele deixe o mesmo caixa aberto durante os 40 dias para tentar driblar, ai o sistema para na data prevista pra expiração e o caixa mantem-se aberto, quando ele ativar novamente o sistema ja força ele a fechar o ultimo caixa q estava aberto na expiração.

eh isso…t+ e boa sorte a todos !

Gostei. Muito bom mesmo parabéns!! Muito bem feito. Mas eu consigo abrir um componente delphi no java será? Alguém aí já tentou fazer isso? Vou dar uma pesquisada…
Obrigado!

O sistema não será Java web? Nesse caso, você não vai distribuir os códigos fontes. Todo o código ficará no servidor web, que é protegido.
Os clientes terão apenas uma senha, que você poderá bloquear caso não cumpram com sua parte do contrato.

Por que se tentar edita-lo o tamanho do arquivo muda? Um editor hexadecimal permite tranquilamente a edição dos dois arquivos, sem alterar seu tamanho.

Não adianta esconder arquivos assim. Existem aplicativos para os sistemas operacionais (como o caso do File Monitor, do Windows) que mostram exatamente que arquivos um processo está acessando. E nem pense que no registro você deixa a coisa muito mais segura, pois ele é capaz de mostrar o que é acessado por lá também.

O sistema distribuído também tem o algoritmo de keygen implementado? Nesse caso, como é feito em Java, pode ser facilmente descompilado. Ou você tomou o cuidado de fazer essa parte em C++ e acessar via JNI?
Espero também que você tenha usado algum algorítmo forte para a geração da senha, como um algoritmo de hashing. Caso contrário, será bem fácil para alguém que realmente queira piratear seu sistema chegar a seu algorítmo.

Não me parece ser praticamente inviolável. Na verdade, a proteção parece frágil. Não houve violação pois, aparentemente, não houve interesse comercial real em violá-lo. Tome cuidado com proteções assim, pois elas funcionam para sistemas pouco conhecidos, mas não podem ser aplicados para sistemas de distribuição em massa, ou produtos muito conhecidos.

Quando alguém estiver disposto a pagar um programador para quebrar seu sistema, aí o caldo entorna.

Não vini. É que o sistema nós venderemos e a pessoa irá instalar no seu servidor. Então ela pode pegar e passar para quem quiser pegar…
Eu consigo fazer um algoritmo de criptografia em C++ e acessar o programa com java?? Porque até agora não fis isso pois fiquei com medo da pessoa descompilar e pegar o algoritmo, visto que usamos em outros sistemas feitos em pascal…
Vou pesquisar sobre esse JNI

Obrigado!

tenho também a mesma duvida … se alguem tiver uma solução menos complexa

Oi,

Já vi um tópico sobre isso aqui no GUJ, no caso era registrado o MAC, não lembro como era, mas se quiser pesquisar… :roll:

[quote=Anime]Oi,

Já vi um tópico sobre isso aqui no GUJ, no caso era registrado o MAC, não lembro como era, mas se quiser pesquisar… :roll: [/quote]

O ruim de usar informações do hardware como parâmetro para geração de licenças é que essas informações podem ser facilmente manipuladas. Qualquer um pode alterar o ID do Mac ou do HD, por exemplo.

[quote=matheuslmota][quote=Anime]Oi,

Já vi um tópico sobre isso aqui no GUJ, no caso era registrado o MAC, não lembro como era, mas se quiser pesquisar… :roll: [/quote]

O ruim de usar informações do hardware como parâmetro para geração de licenças é que essas informações podem ser facilmente manipuladas. Qualquer um pode alterar o ID do Mac ou do HD, por exemplo.[/quote]

Tens alguma solução mais engenhosa matheuslmota para isso?

a maneira mostrada la em cima me pareceu muito complexa e não entendi nada, eu quero algo do tipo iniciante… sem complexidade, depois vou aos bocados aumentar a complexidade e robustez

vlw