¿Cómo proteger las clases compiladas de Java?


Lo sé, muchas preguntas similares se han hecho aquí. No estoy preguntando si puedo proteger mi clase Java compilada, porque obviamente dirás 'no, no puedes'. Me pregunto cuál es el método más conocido para proteger las clases Java contra la descompilación. Si tiene conocimiento de alguna investigación o artículo académico en este campo, por favor hágamelo saber. Además, si ha utilizado algunos métodos o software, por favor comparta su experiencia? Cualquier tipo de información será muy útil. Agradecer.

Author: JasonMArcher, 2010-03-14

5 answers

En primer lugar, si usted está apuntando "solo" el mercado de Windows hay una muy fácil de evitar la ".clase a .java " decompilación: utilice una herramienta como Excelsior Jet que transformará el .jar en un .exe.

Esto es infalible: es imposible obtener el .java archivo de vuelta si se utiliza Excelsior Jet (tanto tiempo para todas las personas diciendo "es imposible evitar la descompilación de un .class file"). Claro, un atacante podría lanzar Softtice e intentar rastrea tu .exe pero eso resultará un poco más complicado que usar JAD para descompilar el .clase a a .java y ciertamente no permitirá encontrar el .java archivo de vuelta.

Ahora tal vez usted está apuntando OS X y Linux también o usted no tiene shell para shell off para Excelsior Jet.

Estoy escribiendo un software comercial escrito en Java. Ese software solo tiene sentido si hay una conexión a Internet. Por lo tanto, "protegemos" nuestro software, entre otros, al tener parte del cómputo ocurre en el lado del servidor: tenemos varios .clase que no funcionará a menos que se generen desde el lado del servidor y los enviemos por el cable (y lo que se envía en el cable es siempre diferente: estamos generando único, único .archivos de clase en el lado del servidor).

Esto requiere una conexión a Internet, pero si al usuario no le gusta cómo funciona nuestro software, entonces es libre de comprar uno de los productos inferiores de nuestro competidor ;)

Descompilar no hará mucho bien: usted necesita activamente para descifrar el software (es decir, reproducir lo que está sucediendo en el lado del servidor) o usted no será capaz de utilizarlo.

Usamos nuestra propia "ofuscación de cadenas" antes de usamos Proguard. También hacemos instrumentación de código fuente (también podríamos haber hecho instrumentación de bytecode) donde eliminamos muchas cosas del código (como la "afirmación" que comentamos) e introducimos alguna "ofuscación de flujo de código" aleatoria [el software puede tomar diferentes caminos pero obtener el mismo resultado, esto es algo que realmente hace que el software sea difícil de rastrear]).

Luego usamos Proguard (que es gratis) para aplanar toda nuestra jerarquía OO y ofuscar el código ya-código-flujo-y-cadena-ofuscado.

Así que nuestro flujo es:

  • ofuscación de cadena
  • ofuscación de flujo de código aleatorio
  • Proguard
  • final .jar que depende de .clase que son (diferentemente) dinámicamente generado en el lado del servidor.

Además de eso lanzamos una actualización muy regular (y automatizada) que siempre se asegura de modificar un poco nuestro esquema de protección cliente/servidor (de modo que con cada lanzamiento un atacante hipotético tiene que comenzar principalmente desde cero).

Por supuesto, es más fácil tirar la toalla y pensar: "no hay nada que pueda hacer para hacer la vida de un atacante más difícil porque JAD puede encontrar de nuevo el .archivo java de todos modos " (que es más que muy discutible y descaradamente mal en el caso en que se utiliza un .clase a .convertidor exe para proteger su .clase de descompilación).

 15
Author: SyntaxT3rr0r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-14 22:03:26

Un ofuscador (véase http://java-source.net/open-source/obfuscators ) "codificará" el código de tal manera que no tendrá ningún sentido cuando se descompila.

 6
Author: Itay Maman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-14 20:38:42

Hay varios métodos:

Todo discutido en detalle en mi artículo Proteja Su Código Java-A Través De Ofuscadores Y Más Allá

 6
Author: Dmitry Leskov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-10 12:17:28

Entonces, ¿cómo puedes proteger tus clases de ser descompiladas? Una respuesta es Crema. Crema codifica la información simbólica en su .archivos de clase para que sean menos vulnerables a la descompilación. La información simbólica que Crema codifica incluye el nombre de la clase, su superclase, interfaces, nombres de variables, métodos, etc. La máquina virtual Java (JVM) necesita estos nombres simbólicos para vincular sus clases con paquetes de bibliotecas. Crema revuelve estos nombres simbólicos y hace referencias a ellos de la misma manera para que la JVM aún pueda lograr el enlace correcto entre clases y paquetes.

Entonces, ¿cómo funciona la Crema? Básicamente, antes de distribuir sus archivos de clase en Internet, ejecute Crema en ellos. Crema codificará la información simbólica contenida en ellos, y colocará cada nueva clase en el archivo 1.crema. Su trabajo entonces es cambiar el nombre de 1.crema a algo como filename.clase antes de distribuirlo en el Internet.

CÓMO PROYECTAR JAVA COMPLIED CLASSSES

 0
Author: Ravindra Shekhawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 06:56:40

Puede probar el Protector de Java. Es una mejor manera que obfuscation.It crea un cargador de clases nativo modificando el código fuente de OpenJDK, podría cifrar las clases que desea proteger mediante AES y analizarlas en su JRE personalizado.Puede publicar su software con el JRE y distribuir su seguridad de software.

 0
Author: Yongfa Lin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-09 02:39:13