Estratégia para bloqueio de software

Olá a todos!!

Confesso que fiquei um bom tempo sem postar nada no GUJ, e me arrependo bastante. Essa comunidade é realmente muito rica, tanto em informações, quanto em pessoal!

Bom, é o seguinte, recebi uma encomenda de um programa pra fazer (não preciso dar muitos detalhes, é só um BDzinho, uma interfacezinha, cadastro de coisas, inserção, remoção e blablabla), mas preciso fazer uma coisa q nunca fiz antes: a pessoa que me encomendou o software vai VENDÊ-LO para outras pessoas, de forma que, pela primeira vez (acostumado q estou com software livre), preciso me preocupar com licença, bloqueio, impedir cópia, registro, e etc e tal.
O cara q me pediu pra fazer o software disse q não pode ser copiado de um HD para outro, e que o software deve EXPIRAR, ou seja, depois de um tempo parar de funcionar e pedir uma nova chave de ativação, ou uma coisa assim.
Realmente não sei como fazer, não tenho idéia nem de como começar. Não sei nem se posso fazer isso usando Java. Por acaso os senhores conhecem alguma estratégia eficiente para tornar um software proprietário, com bloqueio de cópia, e que expire depois de um tempo determinado?

Agradeço desde já a atenção, e parabéns pelo melhor fórum de programação do Brasil!!

[quote=wind]Olá a todos!!

Confesso que fiquei um bom tempo sem postar nada no GUJ, e me arrependo bastante. Essa comunidade é realmente muito rica, tanto em informações, quanto em pessoal!

Bom, é o seguinte, recebi uma encomenda de um programa pra fazer (não preciso dar muitos detalhes, é só um BDzinho, uma interfacezinha, cadastro de coisas, inserção, remoção e blablabla), mas preciso fazer uma coisa q nunca fiz antes: a pessoa que me encomendou o software vai VENDÊ-LO para outras pessoas, de forma que, pela primeira vez (acostumado q estou com software livre), preciso me preocupar com licença, bloqueio, impedir cópia, registro, e etc e tal.
O cara q me pediu pra fazer o software disse q não pode ser copiado de um HD para outro, e que o software deve EXPIRAR, ou seja, depois de um tempo parar de funcionar e pedir uma nova chave de ativação, ou uma coisa assim.
Realmente não sei como fazer, não tenho idéia nem de como começar. Não sei nem se posso fazer isso usando Java. Por acaso os senhores conhecem alguma estratégia eficiente para tornar um software proprietário, com bloqueio de cópia, e que expire depois de um tempo determinado?

Agradeço desde já a atenção, e parabéns pelo melhor fórum de programação do Brasil!![/quote]

Bom, primeiro, tenha em mente que tens que usar, no teu codigo de bloqueio, talvez criptografá-lo: http://bit.ly/15MzHt

Depois de “seguro” o teu próprio codigo, voce deve criar alguma relação chave x maquina que faça com que sua chave só libere aquela máquina para funcionar.
Neste caso aqui, é complicado, Java não acessa hardware nativamente, então, boa sorte! hehehe

Nesta mesma chave, coloque informações de bloqueio que vc deseje, data fixa ou número de dias de uso. Grave esta chave em um arquivo criptografado em seus resoures.

O caminho é mais ou menos esse.

Não seria o caso de fazer uma aplicação web?

Ví vário sofwares em java pedindo registro on-line. Vai exigir um pouco mais de recursos, mas é uma alternativa.

Ví vário sofwares em java pedindo registro on-line. Vai exigir um pouco mais de recursos, mas é uma alternativa.

Dae, peron, blz?
Imagine que vou escrever esse programa em Java, e entregar apenas o .jar pro cara. Ainda assim preciso criptografar o código??

Você por acaso sabe algum meio de fazer isso? Mesmo usando outra linguagem apenas pra conseguir o número do HD, ou algo assim?

Imagino que eu tenho que criar um arquivo (criptografado, lógico), com as informações de usuário licenciado e data de expiração, e fazer o programa procurar sempre esse arquivo ao ser executado. Se caso não achar o arquivo, o programa não faz mais nada (não quero ter problemas porque alguém apagou o arquivo, para tentar burlar o programa).
Pensei na estratégia de escrever a data e o horário de cada acesso nesse arquivo também, para poder controlar a expiração do programa. Assim, se caso o usuário tentar abrir o programa quando este já expirou, o programa pedirá a nova chave de ativação. A questão é que eu não tenho certeza se esse esquema de log de acessos funciona, se o usuário voltar a data do sistema pra um pouquinho depois do último acesso… ele pode conseguir enganar o programa.
O que vcs acham?

Dae, enantiomero!
Cara, interessante o site, tem bastante recursos, mas são privados. Prefiro (e o meu cliente também prefere) algo mais “simples”, se é que vcs me entendem.
O programa não é um negócio muito graaaaande, nem nada não, é bem susse, rss.

Oi, mochuara! Fala, mvargens!!
Não, não tem como fazer isso online. O cara não tem domínio online, e também não quer fazer isso… :stuck_out_tongue:
O programa tem que ser inteiro offline, mesmo, e o cliente tem que entrar em contato com o cara de alguma maneira (telefone, e-mail) pra pedir a nova chave de ativação.

Bom, se o usuário tem que entrar em contato com o distribuidor para fornecer um desbloqueio, ja é quase a mesma coisa que o site on-line. Em vez de fazer uma ferramenta web para ativação do produto, você pode fazer uma ferramenta cliente operada pelo distribuidor para gerar uma chave de ativação.

Você pode ofuscar seu código usando o ProGuard, mas não vai ficar 100% seguro, e se não me engane ele tem problemas com uso de reflexão. Da uma olhada e avalia se vale a pena.
Agora o algorítimo para geração de chaves, acho que vc consegue achar algo na net. Talvez o esquema usado no SSL sirva.

meio atrasado, mas espero que a dica ainda seja útil:

A única recomendação que faço é a seguinte: se vc. não é expert na área de segurança, é melhor não inventar moda. Da última vez que vi, o preço por cópia era bem razoável, mesmo em pequenos volumes.

De quebra, este tipo de solução costuma vir com um pacote para gerenciamento das licenças geradas, permitindo flexibilidade quanto a datas de expiração, versões demo, etc.