Obscurecer código java
13/11/2017 08:18
1
Olá a todos. Vocês usam alguma ferramenta para obscurecer os .jar/.war gerados para dificultar a engenharia reversa?
Tags: springboot, obscurecer, .jar, .war


0
Oi Paulo,

existem algumas ferramentas para isto, mas não recomendo que você as use pela seguinte razão: o código Java não é compilado uma única vez, mas sim diversas vezes em tempo de execução pelo JIT (Just In Time Compiler) da JVM para que tenha sua execução otimizada. Neste processo de sucessivas recompilações uma das coisas que é realizada é justamente a otimização do código: o JIT pode, por exemplo, mudar a ordem de execução das suas instruções (mantendo a lógica) para que seja obtido um desempenho superior. É por isto que, não sei se já observou, código que fica mais tempo no servidor costuma ficar mais rápido (em algumas situações, isto fica claramente evidente, na maior parte, muito pouco).

(um livro que trata esta questão de uma forma muito interessante é este aqui, publicado em 2010, mas que ainda se aplica hoje: https://www.amazon.com/Oracle-JRockit-Definitive-Marcus-Hirt/dp/1847198066/ref=sr_1_1?ie=UTF8&qid=1510569676&sr=8-1&keywords=jrockit)

A maior parte dos ofuscadores de código pode então alterar o seu código fonte de tal forma que, ao ser processado pelo JIT, se torne inclusive mais lento. Na maior parte das vezes o que ele fará inclusive será simplesmente trocar o nome das variáveis e métodos, o que, mesmo assim, não evitaria uma engenharia reversa de forma tão eficiente assim. Sendo assim acaba que é um esforço que não vale à pena.

E indo um pouco além, se for código que vai ser executado no seu servidor, é um esforço que vale menos à pena ainda, dado que você terá acesso a onde o código é executado. Se for código executado do cliente, você também não conseguiria evitar uma engenharia reversa, pois existem técnicas limpas de se obter o mesmo executado, variando apenas os inputs fornecidos ao sistema (foi assim que a Compaq, nos anos 80, fez a engenharia reversa da BIOS do PC da IBM, por exemplo).


0
Muito interessante Henrique, não sabia que isso era recompilado durante a execução. Então não teria uma melhor forma de proteger o fonte sem hospeda-lo em um servidor próprio, certo?
Será que usar o servidor em ambiente virtualizado seria a solução (Docker ou VM em geral)?


0
Oi Paulo,
na minha opinião a única solução para este problema é jurídica mesmo, por que se quiserem realizar a engenharia reversa do seu código, vão conseguir, mesmo sem ter acesso direto a ele, saca?
Infelizmente no Brasil não existe patente para software, que é considerado propriedade intelectual. Se não me engano, você o trataria por copyright ou algo similar. Na minha opinião, se for para proteger então, a melhor solução seria você oferecer apenas uma interface que interaja com seu sistema, como uma API REST ou mesmo páginas web ou desktop.

Agora: minha opinião sobre isto. Na prática as pessoas não se dão ao trabalho de realizar engenharia reversa de sistemas. Então tendo seu código no próprio servidor, já está de bom tamanho se o objetivo for tentar evitar acesso a ele.
Aliás, sobre ocultar o código fonte, há duas visões e não sei qual das duas é a correta.
* Uma diz que código aberto é mais seguro, por que qualquer um pode detectar falhas e portanto corrigi-las.
* Outra diz que você tem de ocultar o código, por que alguém poderia detectar falhas e então tirar proveito das mesmas sem enviar correções.

(acho que é jurídica mesmo a questão :D )


0
Compreendo. Obrigado pela sugestão Henrique. 



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails, Spring e mais com a Formação itexto!

Livro de Spring


/dev/All

Os melhores blogs de TI
em um único lugar!

 
Spring Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.