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?
Como evitar, ou dificultar, cópias de aplicativos
9 Respostas
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?
boone, ou quem saiba,
tem como o aplicativo alterar o JAD depois de instalado? Ou alterar/excluir um arquivo do JAR?
Não há como. A aplicação não tem acesso ao JAD/JAR para operações de escrita/delecao.
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 usandoMIDlet.getAppProperty(), mas será que tem como alterá-lo?
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.
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).