Melhor obfuscator Java? [fechadas]

107

Estou desenvolvendo um software de segurança e quero ofuscar meu código java para que seja impossível fazer a engenharia reversa. Qual é o obfuscator java mais confiável?

Xinus
fonte
10
@Xinus "tornou-se impossível fazer engenharia reversa" - dificilmente, melhor se tentou e falhou
formiga
212
Tive alguns colegas que criaram códigos altamente ofuscados. Mas essa não era sua intenção.
Steve McLeod,
7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.- Dilbert
formiga
7
É impossível evitar a engenharia reversa.
Mnementh
11
@Mnementh: é o suficiente para tornar a engenharia reversa proibitivamente cara para seu aplicativo específico.
Dmitry Leskov,

Respostas:

99

Primeiro, você realmente precisa ter em mente que nunca é impossível fazer engenharia reversa em algo. Tudo pode ser hackeado. Um desenvolvedor inteligente usando um IDE inteligente já pode ir longe o suficiente.

Bem, você pode encontrar aqui uma lista. O ProGuard é muito bom. Eu mesmo usei, mas apenas para "minimizar" o código Java.

BalusC
fonte
1
@BalusC: Então, que ferramenta você usa para ofuscar o código java? você ofusca seu código java, não é?
Thinhbk
@Thinhbk A ofuscação torna mais difícil obter rastreamentos de pilha úteis.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen: Concordo. IMO, a ofuscação tornará os rastreamentos de pilha praticamente inúteis. Nesse caso, estou usando um truque com a mensagem de log, que pode ajudar.
Thinhbk
2
@Thinhbk Proguard gera um mapa para traduzir rastreamentos de pilha ofuscados de volta ao código original. Caso contrário, como você disse, os rastreamentos de pilha se tornariam inúteis (mas quem obtém exceções não detectadas de qualquer maneira ... ;-))
Matthieu
@Matthieu: É possível traduzir o rastreamento da pilha para o código original automaticamente? Seria ótimo e novo para mim. Só sei que traduzir de volta manualmente pode ser difícil se a base de código for enorme.
Thinhbk
33

Se um computador pode executá-lo, um ser humano devidamente motivado pode fazer a engenharia reversa.

Thorbjørn Ravn Andersen
fonte
3
Quantas pessoas podem ler o código ofuscado e entender a lógica? Tenho muitos amigos engenheiros e eles não podem fazer isso. Apenas John Nash pode fazer isso;)
kodmanyagha
5
@kodmanyagha Se eles estivessem motivados o suficiente, eles aprenderiam. Não é difícil.
Thorbjørn Ravn Andersen
1
No sentido matemático, é possível executar sem uma maneira de fazer a engenharia reversa. É disso que se trata a criptografia homomórfica, mas existem alguns obstáculos que precisam ser resolvidos para torná-la praticamente utilizável em software de computador em vez de SaaS. Estamos indo para lá lentamente. Trabalhos seminais de Gentry sobre criptografia totalmente homomórfica e "quebra-cabeças matemáticos" de Amit Sahai et al. deu um grande salto nessa direção. Há apenas um elemento ausente (que chamo de "função de barreira") que tornaria todo o esquema viável. O que é impossível agora será possível no futuro.
ogggre
30

Confira meu artigo Proteja seu código Java - através de ofuscadores e além [arquivado] para uma discussão sobre ofuscação versus três outras maneiras de tornar a engenharia reversa de seus aplicativos mais cara e uma coleção de links para ferramentas e outros materiais de leitura.

Dmitry Leskov
fonte
1
É disso que eu realmente preciso. Quero escrever obfuscator PHP para meus projetos. A lógica é a mesma em todos os lugares. Obrigado ...
kodmanyagha
1
Artigo legal e extenso sobre ofuscação Java e coleção de software.
m3nda de
15

Acho que Proguard é o melhor. Também é possível integrá-lo ao seu IDE (por exemplo, NetBeans). No entanto, considere que se você ofuscar seu código, pode ser difícil rastrear problemas em seus registros.

andrew0007
fonte
6
+1 para "considere que se você ofuscar seu código, poderá ser difícil rastrear problemas em seus registros". Bem quando você pensou que a depuração era difícil o suficiente ...
Adam Paynter
7
Um bom ofuscador que altera nomes e informações de número de linha deve produzir um log para reverter o processo. Dessa forma, pelo menos os rastreamentos de pilha permanecem úteis para binários ofuscados.
Joachim Sauer
3
O ProGuard cria esses arquivos reversos para depuração. :-)
Malax
10

Usei o Allatori e ele fez seu trabalho muito bem.

o perdido
fonte
7

É verdade que sempre é possível fazer engenharia reversa em algum código, assim como é impossível proteger uma casa em ordem para que ninguém possa roubá-la. Isso não me impede de trancar a porta, no entanto. Na verdade, eu não estou no mundo java, eu uso BitHelmet para .net.

Daniel Dolz
fonte
7
+1 para trazê-lo de volta à rede 0. Esta resposta não é inútil.
HaloWebMaster
6

Eu costumava trabalhar com Klassmaster em minha empresa anterior e ele funciona muito bem e pode se integrar muito bem com sistemas de compilação (o suporte maven é excelente). Mas não é grátis.

Anoop
fonte
6

Não sei ao certo se a solução é segura, mas sobre a solução ClassGuard , é interessante ler o artigo e o comentário em: http://www.javaworld.com/community/?q=node/1604#comment -12296

Renato
fonte
E outra alternativa que também usa código nativo em vez de defineClass é JarCrypt
Renato
Um artigo ensinando como quebrar o ClassGuard : setrst.blogspot.com/2010/04/classguard-unguarded.html . Só não sei se isso ainda funciona na versão mais recente.
Renato