¿El mejor ofuscador de Java? [cerrado]

106

Estoy desarrollando un software de seguridad y quiero ofuscar mi código Java para que sea imposible realizar ingeniería inversa. ¿Cuál es el ofuscador de Java más confiable?

Xinus
fuente
10
@Xinus "se vuelve imposible de aplicar ingeniería inversa" - difícilmente, lo mejor es haberlo intentado y fallado
ant
211
Tenía algunos colegas que crearon un código muy ofuscado. Pero esa no era su intención.
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
hormiga
7
Es imposible evitar la ingeniería inversa.
Mnementh
11
@Mnementh: basta con hacer que la ingeniería inversa sea prohibitivamente cara para su aplicación en particular.
Dmitry Leskov

Respuestas:

98

Primero, debe tener en cuenta que nunca es imposible realizar ingeniería inversa en algo. Todo es pirateable. Un desarrollador inteligente que utilice un IDE inteligente ya puede llegar lo suficientemente lejos.

Bueno, puedes encontrar aquí una lista. ProGuard es bastante bueno. Lo he usado yo mismo, pero solo para "minificar" el código Java.

BalusC
fuente
1
@BalusC: Entonces, ¿qué herramienta usas para ofuscar el código java? usted ofusca su código java, ¿no?
Thinhbk
@Thinhbk La ofuscación hace que sea más difícil obtener rastros de pila útiles.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen: De acuerdo. En mi opinión, la ofuscación hará que los rastros de pila se vuelvan casi inútiles. En ese caso, estoy usando algún truco con el mensaje de registro, que puede ayudar.
Thinhbk
2
@Thinhbk Proguard genera un mapa para traducir los rastros de pila obfucados al código original. De lo contrario, como dijiste, los rastros de pila se volverían inútiles (pero quién obtiene excepciones no detectadas de todos modos ... ;-))
Matthieu
@Matthieu: ¿Es posible traducir el seguimiento de la pila al código original automáticamente? Sería genial y nuevo para mí. Solo sé que traducir de nuevo manualmente puede ser difícil si la base del código es enorme.
Thinhbk
33

Si una computadora puede ejecutarlo, un ser humano debidamente motivado puede realizar ingeniería inversa.

Thorbjørn Ravn Andersen
fuente
3
¿Cuántas personas pueden leer código ofuscado y comprender la lógica? Tengo muchos amigos ingenieros y no pueden hacer eso. Solo John Nash puede hacer esto;)
kodmanyagha
5
@kodmanyagha Si estuvieran lo suficientemente motivados, lo aprenderían. No es dificil.
Thorbjørn Ravn Andersen
1
En sentido matemático, es posible ejecutarlo sin una forma de aplicar ingeniería inversa. De esto se trata el cifrado homomórfico, pero hay bastantes obstáculos que deben resolverse para que sea prácticamente utilizable en software de computadora en lugar de SaaS. Nos estamos moviendo hacia allí lentamente. Trabajos seminales de Gentry sobre cifrado totalmente homomórfico y "rompecabezas matemáticos" de Amit Sahai et al. dio un gran salto en esa dirección. Solo falta un elemento (al que llamo "función de barrera") que haría factible todo el esquema. Lo que es imposible ahora, será posible en el futuro.
ogggre
30

Consulte mi artículo Proteja su código Java: a través de ofuscadores y más [archivado] para ver una discusión sobre la ofuscación frente a otras tres formas de encarecer la ingeniería inversa de sus aplicaciones, y una colección de enlaces a herramientas y materiales de lectura adicionales.

Dmitry Leskov
fuente
1
Esto es lo que realmente necesito. Quiero escribir ofuscator PHP para mis proyectos. La lógica es la misma en todas partes. Gracias ...
kodmanyagha
1
Artículo interesante y extenso sobre la ofuscación de Java y la colección de software.
m3nda
15

Creo que Proguard es el mejor. También es posible integrarlo con su IDE (por ejemplo, NetBeans). Sin embargo, considere que si ofusca su código, podría ser difícil rastrear los problemas en sus registros.

andrew0007
fuente
6
+1 para "considere que si ofusca su código, podría ser difícil rastrear los problemas en sus registros". Justo cuando pensaba que la depuración era lo suficientemente difícil ...
Adam Paynter
7
Un buen ofuscador que cambia los nombres y la información del número de línea debería producir un registro con el que invertir el proceso. De esta manera, al menos los seguimientos de pila siguen siendo útiles para binarios ofuscados.
Joachim Sauer
3
ProGuard crea estos archivos inversos para la depuración. :-)
Malax
10

Solía Allatori y lo hizo su trabajo bastante bien.

el perdido
fuente
7

Es cierto que siempre es posible aplicar ingeniería inversa a algún código, al igual que es imposible proteger una casa para que nadie pueda robarla. Sin embargo, eso no me impide cerrar la puerta. En realidad, no estoy en el mundo de Java, uso BitHelmet para .net.

Daniel Dolz
fuente
7
+1 para llevarte de vuelta a la red 0. Esta respuesta no es inútil.
HaloWebMaster
6

Solía ​​trabajar con Klassmaster en mi empresa anterior y funciona muy bien y se puede integrar bastante bien con los sistemas de compilación (el soporte de Maven es excelente). Pero no es gratis.

Anoop
fuente