¿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?


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.


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.


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.


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.


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



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.


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.



6

No sé con certeza si la solución es segura, pero sobre la solución ClassGuard , es interesante leer el artículo y el comentario en: http://www.javaworld.com/community/?q=node/1604#comment -12296


Y otra alternativa que también usa código nativo en lugar de defineClass es JarCrypt
Renato

Un artículo que enseña cómo romper ClassGuard : setrst.blogspot.com/2010/04/classguard-unguarded.html . Simplemente no sé si esto todavía funciona en la última versión.
Renato
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.