Como impedir a cópia indiscriminada da aplicação?

Procurei no forum mas não achei nenhum topico sobre isto, seguinte, tenho várias aplicações desenvolvidas em swing, todas elas eu apenas gero um jar e adiciona a maq. cliente. O que eu quero é impedir q um usuario, simplesmente copie a aplicação e distribua para outros computadores!
Como posso fazer isso?
Alguma dica?

Obrigado a todos q puderem ajudar!

Abraço!

Eu estou fazendo uma aplicação para um cliente e estou fazendo da seguinte forma:
Na primeira execução na maquina do cliente ele o programa pedi uma senha, se a senha for valida(só eu sei a senha), se a senha for valida ele cria um arquivo em um lugar que o usuário não consiga descobrir.
Quando o Programa é executado ele procura por esse arquivo, se o arquivo não existir o programa ira pedir a senha.
Essa não é a maneira mais correta, mas talves ajude.

Já é uma boa idéia, mas sera q não tem uma forma mais segura? Alguma api q faça esse tipo de trabalho?

Não há forma 100% segura de fazer isso. O máximo que você pode fazer é dificultar.

Se você bolar um esquema maluco de verificação de arquivo, verificação de data, de serial de HD, qualquer coisa, nada impede o usuário de criar ou editar o arquivo, de mudar a data do PC, de mudar o serial do HD (existem ferramentas que conseguem fazer isso).

A primeira coisa que um cracker iria fazer é descompilar o programa, crackeá-lo e recompilar. Por isso é recomendado que você use um bom ofuscador.
Melhor ainda, ofusque todas as classes e crie um ClassLoader (também ofuscado) que as leia criptografadas e as carregue on-the-fly. Melhor ainda se você conseguir fazer ele gerar bytecodes dinamicamente (ofuscados, obviamente). Melhor ainda se a cada execução os bytecodes gerados forem diferentes.

Mas, não importa o que você faça, um bom cracker inteligente e determinado uma hora consegue quebrar. O máximo que você pode é dificultar ao máximo a vida desse suposto cracker até que não valha a pena queimar neurônios para tentar quebrar o programa. O porém, é que para chegar nesse ponto, quem vai ter que queimar muito neurônio é você! :wink:

Uma opção interessante, porém de ética questionável, é fazer o programa se autodestruir ou se corromper se ele perceber que alguém está tentando quebrá-lo. :twisted:

Outra coisa interessante é um programa capaz de se automodificar a cada execução. Isso dificulta muito a vida do cracker pois torna quase impossível reproduzir uma mesma execução do programa.

Gerar código defeituoso (ou seja, lixo) no meio de códigos válidos é algo promissor também, desde que mas que não atrapalhem a execução do programa. Principalmente se esse código corresponder a mais de 90% do programa carregado, fica muito difícil separar o joio do trigo.

Enfim, use as mesmas técnicas que os vírus (principalmente os mais antigos) costumavam usar para enganar os softwares anti-vírus e tornar um inferno a vida das pessoas que criavam os anti-vírus.

Ainda não passei por isso, mas eu usaria a idéia do kapa01 ( a do victorwss ta em um nível muito alto hehehe ) mas um pouco diferente já que se o aplicativo for rodar no linux eu não posso ficar largando arquivo em qualquer lugar fora do home.

Na inicialização do programa eu iria verificar se não existe um determinado arquivo, podendo até ser visivel ao usuário. Não existindo, eu coleto, escrevo e criptografo todas as informações “fixas” do computador. A chave para criptografia será solicitada pelo cliente. A partir do momento que o arquivo existe eu verifico se os dados dele conferem com a máquina.

Isso não é tão seguro, pois o cliente pode alegar que trocou de máquina, placa etc. Mas isso força ele a te ligar e você pode solicitar uma nota fiscal da troca de equipamento, de algum serviço prestado (tudo previsto em contrato) e por ai vai.

para ficar ainda mais dificil vc pode criar esse mesmo arquivo com a extenssão .dll e colocar dentro de alguma pasta do windows com o nome parecido com algum que ja existe la, assim sera praticamente impossivel do usuario copiar esse arquivo.
Agora se for Linux já é outra história

Se o valor unitário do seu aplicativo justificar, sugiro não gastar muito tempo com isto e utilizar uma solução profissional

Uma das que pesquisei e possui equipe de suporte no Brasil é a Alladin (http://www.aladdin.com/). O custo, mesmo no caso da solução utilizando HardLock, é bem razoável.

Leve em conta que, para o usuário final, soluções baseadas em características da máquina são um porre.

Passei por isto recentemente quando o HD do notebook de minha esposa queimou e softwares educativos (ela trabalha nesta área) que estavam instalados não puderam ser reinstalados. Penei para convencer os caras que não estava copiando o software. Um deles teve a cara-de-pau de pedir que eu enviasse o HD defeituoso para que eles pudessem comprovar o que eu estava dizendo (por minha conta, claro…) !!!

Olá
Não sei, mas acho que o sistema de ativação da microsoft é bacana, no ponto de vista
de distribuição de cópias…
Você cria uma chaves (keys) e válida on-line essa key… tem um prazo para validar
partir deste prazo ou de número de execução seu programa não roda mais…

Mas a idéia de hardlock é interessante, há muito tempo atrás via o AutoCad com esse hardlock
plugado na porta paralela…

Enfim… acho que precisa ver a política de como vai ser distribuído e de como vai
ser o ambiente que esse sistema irá rodar, solução é que não falta!!! rsrsrs

Flwssss

Olá

Já vendi muito software com hardlock e sei que é uma das raras proteções que funciona. Mas precisa de JNI, coisa que não é nada difícil, para acessar o hardlock.

Outras idéias mirabolantes podem ser adotadas inclusive verificações pela Internet como a Microsoft faz. Em todos os casos, inclusive com hardlock, o mais importante é ter um bom contrato.

[]s
Luca (que quando vendia software tinha um bom contrato)

[quote=thiagocg]Procurei no forum mas não achei nenhum topico sobre isto, seguinte, tenho várias aplicações desenvolvidas em swing, todas elas eu apenas gero um jar e adiciona a maq. cliente. O que eu quero é impedir q um usuario, simplesmente copie a aplicação e distribua para outros computadores!
Como posso fazer isso?
Alguma dica?
[/quote]

Bom, depois de todas as dicas de criptografia e hacking (que sempre incluirão a encriptação da classe que faz a verificação da licença) a opção mais simples para impedir a copia indiscriminada é torná-la legal. Ou seja, deixe o cara copia o que quiser.
Venda o serviço que o software faz e não o software em si. Afinal uma cópia não lhe custa nada , mas um cliente a menos sim.
Quando o cara deixa de usar o seu software ( o seu serviço) vc tem prejuízo, mas quando ele copia o software não.

O problema não é distribuir para outros computadores e sim para outros clientes. Mas isso é uma forma de markting viral. Se ele copia para outrem é pq o software é bom na prespectivas dos clientes. Ou seja, vc tem marketign a custo zero. Venda serviços de terinamento, upgrade, etc… e deixe as copias soltas. Assim vc terá mais clientes em potencial, menos esforço de propaganda. A qualidade do seu produto é a melhor propaganda ( mas não quando ele não tem pernas… ).

Altera a licença. É uma ideia…

Qual o problema do cliente copiar a tua aplicação?
Tu estás cobrando por número de licensas que ele usa?

No contrato que faço eu cobro o desenvolvimento da aplicação e o suporte, deixando o cliente livre para copiar e redistribuir a aplicação, pois foi ele mesmo quem pagou por isso.

Caso ele repasse a aplicação para o concorrente dele, não será problema meu.
E tomará que o concorrente dele me ligue para prestar suporte, pois será mais um cliente do qual eu cobrarei o suporte.

[quote=Luca]Olá

Já vendi muito software com hardlock e sei que é uma das raras proteções que funciona. Mas precisa de JNI, coisa que não é nada difícil, para acessar o hardlock.

Outras idéias mirabolantes podem ser adotadas inclusive verificações pela Internet como a Microsoft faz. Em todos os casos, inclusive com hardlock, o mais importante é ter um bom contrato.

[]s
Luca (que quando vendia software tinha um bom contrato)[/quote]

Mas até mesmo hardlock pode ser violado. É verdade que isso é significativamente difícil, mas não é impossível. Pode-se por exemplo crackear-se criando-se um mock falso do hardlock ou então atacar o ponto do programa que verifica o hardlock.

Olá

Verdade mas muito difícil mesmo, pelo menos do modo como eu fazia a verificação. Mas usei mais em aplicações Fortran e C que são compiladas e muito mais dificeis de crackear. Java, mesmo com código embaralhado, sempre é mais fácil de escarafunchar. O melhor mesmo ainda é um bom contrato e usar a Internet para validar a licença (de tempos em tempos).

[]s
Luca

Ou fazer que nem a 37signals, colocar tudo como aplicação web e cobrar mensalidade :slight_smile:

Deixe que usem, assim o seu programa vai se popularizar.

Quer evitar de verdade? contrate um advogado :wink: