Como evitar, ou dificultar, cópias de aplicativos

Olá, sou novo em J2ME e acabei de criar um aplicativo para celular e gostaria de comercializá-lo. Já procurei no forum e na net, mas não encontrei nada. Alguém pode me dar algumas dicas, mesmo simples, de como minimizar a possibilidade do usuário simplesmente passar cópias do aplicativo e rodar em outro aparelho celular?

Não se existem metodos ja padronizados para tal… mas uma idea que eu bolei uma vez é:

  • Na primeira vez que rodar o aplicativo, gerar um codigo, randomico ou baseado em alguma propriedade do sistema onde esta sendo rodado o aplicativo e atraves de um site você gerar a “contra parte” desse código. Então voce insere essa codigo e valida a aplicação.

Não há formas seguras. Por mais q vc aplique a estratégia X ou Y, alguém com conhecimento suficiente pode pegar teu JAR, descompilar, retirar os bloqueios contra cópia (IF’s,etc) e recompilar para ter uma aplicação destravada e que poderá ser disponibilizada no e-mule.

Mikhas, partindo dessa idéia podemos fazer o seguinte:
Usar criptografia com chave assimétrica, pra garantir que foi gerado por um cliente autentico.
Somente aceite mediante cadastro do cliente no site e então liberar a aplicação, monta um pacote com a chave privada que será decodificada pelo cliente com uma chave pública, o que garante que esse pacote SOMENTE poderia ter sido gerado pelo servidor.
Por ai vai.

Eu sei que não existe forma infalível, eu queria apenas dificultar que o usuário comum pudesse simplesmente passar uma cópia para outro. Por exemplo, um aplicativo para professores, um cara compra e depois passa para todo mundo. Existe alguma forma de modificar ou excluir arquivos empacotados no JAR, um .txt, ou mudar um atributo do JAD depois de instalado?

Uma vez fiz o seguinte:

  • O usuário ao requerer o aplicativo se cadatra no site do aplicativo e informa o IME do seu aparelho;
  • Eu gero uma versão do JAR para o IME do cliente utilizando obfuscação de nível máximo;
  • Disponibilizo a versão para o cliente;

Assim, o aplicativo só será executado se o aparelho possuir o IME informado pelo cliente. A obfuscação dificultará e muito que o alguém mal intencionado abra o Jar e remova as verificações.

Mas, é claro que sempre terá alguém que será capaz de quebrar essa verificação… nada em TI é 100% seguro.

Eu ! :lol:

Como eu disse, não há formas seguras para J2ME.

boone, ou quem saiba,
tem como o aplicativo alterar o JAD depois de instalado? Ou alterar/excluir um arquivo do JAR?
Porque se eu criar um atributo igual no JAD e no manifest e depois de instalado, quando rodar pela primeira vez eu alterar um deles, a pessoa que copiar e tentar instalar o aplicativo vai receber uma mensagem de erro, e este que já está instalado vai rodar normalmente. Eu posso ler o atributo usando MIDlet.getAppProperty(), mas será que tem como alterá-lo?

[quote=edwagner]boone, ou quem saiba,
tem como o aplicativo alterar o JAD depois de instalado? Ou alterar/excluir um arquivo do JAR?
[/quote]
Não há como. A aplicação não tem acesso ao JAD/JAR para operações de escrita/delecao.

[quote=edwagner]
Porque se eu criar um atributo igual no JAD e no manifest e depois de instalado, quando rodar pela primeira vez eu alterar um deles, a pessoa que copiar e tentar instalar o aplicativo vai receber uma mensagem de erro, e este que já está instalado vai rodar normalmente. Eu posso ler o atributo usando MIDlet.getAppProperty(), mas será que tem como alterá-lo? [/quote]
Logico que tem como alterá-lo…acho que o pessoal não está entendendo…todos os métodos que estão colocando no post, são falhos e falhos no sentido de serem muito facilmente contornáveis.

Eu ! :lol:

Como eu disse, não há formas seguras para J2ME.[/quote]

Huahuahuahua não duvido nada!

Está aí um bom tema para TCC ou Tese… segurança de aplicativos J2ME (Segurança no sentido de evitar cópias).