Bom dia, esses dias ouvi falar num programa chamado Java Decompiler, cuja idéia era gerar os arquivos .java a partir dos compilados .class
Porém não levei muita fé pois duvidava que pudesse dar certo.
Hoje resolvi testar o programa e pra minha surpresa, ele conseguiu recuperar o código 100% correto!
Imagina uma aplicação comercial empacotada num .jar e o cara vai lá e consegue ver todo teu código-fonte?
Existe alguma opção pra bloquear de alguma forma essa engenharia reversa que ele faz, sem causar bugs no sistema?
Podes usar ofuscadores de código, que mudam o nome dos métodos, variáveis, classes pra dificultar a leitura do código, mas é fácil conseguir “desofuscar” o código.
Podes encriptar os arquivos do teu jar e usar um classloader pra descriptografar, pode ver um pouco sobre isso aqui.
Ou podes transformar diretamente teu código pra binário que vai ser usado pra determinado processador, como um .exe, conheço o programa Excelsior JET que faz isso, devem haver outros.
Aconselho estudar sobre segurança de código em java do livro Java Core 2 - Recursos Avançados Autores: HORSTMANN, CAY, CORNELL, GARY
Excelente livro, no Capítulo de Segurança vai tratar tudo sobre isso, vai tratar de Assinatura de classe, Certificação do software, Obfuscadores. Um dos melhores livros que ja estudei.
[quote=mateusviccari]Bom dia, esses dias ouvi falar num programa chamado Java Decompiler, cuja idéia era gerar os arquivos .java a partir dos compilados .class
Porém não levei muita fé pois duvidava que pudesse dar certo.
Hoje resolvi testar o programa e pra minha surpresa, ele conseguiu recuperar o código 100% correto!
Imagina uma aplicação comercial empacotada num .jar e o cara vai lá e consegue ver todo teu código-fonte?
Existe alguma opção pra bloquear de alguma forma essa engenharia reversa que ele faz, sem causar bugs no sistema?[/quote]
Existe. A pergunta é : vale a pena ? A reposta é : não.
Das duas uma, ou vc aprender a viver com isso, ou vc não usa java. Ou vc gasta tempo e dinheiro implementando os recursos de segurança necessários.
A forma mais simples de não precisar de nada disto é usar um servidor próprio. Um SaaS da vida com contém seu codigo, mas o cliente não vê.
Fora isso, um bom contrato e bons advogados lhe serão mais uteis que a tecnologia.
Se tratando de desenvolver para Desktop, sempre existira um decompilador, pois se tem como compilar, tem como decompilar, melhor se concentrar em desenvolver um produto atraente para comercializar.
Pessoal nesses meus mais de 17 anos de informática aprende uma coisa muito importante que ninguém comentou aqui ainda: “Engenharia reversa”.
Tudo que é feito de um jeito é refeito de outro. É preciso termos a consciência que sempre vai ter um jeito de fazermos a tal engenharia reversa.
O máximo que podemos fazer é dificultar o máximo para que as pessoas mal intencionadas tenha consequentemente mais dor de cabeça ao tentar fazer a engenharia reversa, tanto que acabam desistindo.
Resumindo criar barreiras e mais barreiras, porém sempre com a consciência de que muros, barreiras são derrubáveis por mais duras que sejam.
Recentemente estive trabalhando em um ofuscador para java. A experiência foi boa. Da mesma forma que quebra o java se quebra em nativo tambem pra qualquer linguagem, inclusive para c/c++, tem um monte por aí.
Primeira coisa, não é facil entender logica dos outros, alias em certos casos nem a da gente mesmo.
O melhor mesmo é ter um bom “direito autoral” e advogados.
Ofuscador, criptografia, transformar em nativo. Todos podem ser revertidos, a questão é compensa reverter ?
Mas na minha opinião o Ofuscador e’ o mais cansativo pra tentar entender o fonte e dado o cenario a melhor opção.
A criptografia do Classloader, ela pode ser interceptada até com certa facilidade relativa.
Se for o exe ou nativo pra qualquer outra plataforma, independentemente da linguagem que foi gerado tambem dá pra descompilar.
Solução 100% segura ainda não existe e isso vale para qualquer linguagem.
Agora entre ter um projeto multi plataforma e com um fonte limpo, eu prefiro usar java sem medo de errar.