Segurança para aplicativos desktop. [RESOLVIDO]

Criei um aplicativo desktop básico, criei o .jar mas gostaria de implementar alguma segurança para quem for usá-lo não dar um EXTRAIR ARQUIVOS e ver as .CLASS.

Tem alguma ferramenta que bloqueia isto, algum tipo de anti-engenharia reversa? Ou um anti-UNZIP()?

Vlw.

não sei dizer nome mas existe uns obfuscadores de códigos sim…
mas mesmo assim nao é totalmente anti engenharia reversa para java.

http://www.guj.com.br/posts/list/27865.java

Você pode, além do ofuscador, ter uma classloader que carrega .jar criptografados. Aí, vc teria apenas um .jar com a classe básica, que chama esse classloader, e outro .jar com as classes criptografadas em si.

Na verdade, isso também não resolve o problema, já que alguém poderia fazer a engenharia reversa sobre o primeiro .jar, mas já inibe um curioso que abra o seu .jar com o zip.

Aproveitando o tópico, criei uma API e gerei o jar com o proguard, mas assim ofuscado, não consigo utilizar as classes da minha api, só se crio normal, sem ofuscação, é normal isso? :oops:

Dependendo do quanto ofuscado está, tu vai ter classes assim:
a.Aa
a.Ab
a.Ac

Tem que dar uma configurada nele pra não editar os nomes, métodos públicos, etc.

[quote=fabiofalci]Dependendo do quanto ofuscado está, tu vai ter classes assim:
a.Aa
a.Ab
a.Ac

Tem que dar uma configurada nele pra não editar os nomes, métodos públicos, etc.[/quote]

Cara, obrigado pela ajuda :slight_smile:
Dei uma procurada na internet e nao achei como configurar essas opções, como eu faria entao para nao alterar o nome das minhas classes, e o nome dos metodos publicos?

Não ofuscando. Manter claros os nomes de classes e métodos públicos vai deixar seu aplicativo praticamente legível novamente. Vai ser uma ofuscação que vai atrapalhar mais você do que quem quer realmente ler seu código.

Ofuscação só é efetiva se você puder aplicar sobre o código todo, e tornar praticamente tudo ilegível. Não é o caso de libs, pois elas precisam ser usadas em outros aplicativos.

Se o seu caso é esse, talvez elaborar um bom contrato seja mais efetivo, ou pensar seriamente num modelo de negócio com código aberto.

[quote=ViniGodoy]Não ofuscando. Manter claros os nomes de classes e métodos públicos vai deixar seu aplicativo praticamente legível novamente. Vai ser uma ofuscação que vai atrapalhar mais você do que quem quer realmente ler seu código.

Ofuscação só é efetiva se você puder aplicar sobre o código todo, e tornar praticamente tudo ilegível. Não é o caso de libs, pois elas precisam ser usadas em outros aplicativos.

Se o seu caso é esse, talvez elaborar um bom contrato seja mais efetivo, ou pensar seriamente num modelo de negócio com código aberto.[/quote]

Na verdade, é mais por diminuir o tamanho dela, pois com o proguard consigo uma redução de uns 60% :cry:

Mas qual é o tamanho do teu jar pra vc pensar em reduzir?
Normalmente o que mais toma espaço são as próprias dependências, mas mesmo assim, um tamanho não considerável.

[quote=fabiofalci]Mas qual é o tamanho do teu jar pra vc pensar em reduzir?
Normalmente o que mais toma espaço são as próprias dependências, mas mesmo assim, um tamanho não considerável.[/quote]

São 236KB, e se tratando de J2ME, para uma API, é muito grande :cry:

ah bão…

Mas nesse caso, vc deve ofuscar somente quando for executar, o teu produto final, certo?
Nesse caso que não está funcionando?

[quote=fabiofalci]ah bão…

Mas nesse caso, vc deve ofuscar somente quando for executar, o teu produto final, certo?
Nesse caso que não está funcionando?[/quote]

Não não, quero minha API ja ofuscada com o tamanho reduzido, pra aí então usa-la em diversos projetos (e vai ser usada em todos praticamente).

Aê galera é isso mesmo, não lembrava o nome.

Valeu!