2009-08-14 20 views
9

Estoy trabajando en una aplicación que pronto distribuiré públicamente. Me gustaría hacer todo lo que esté a mi alcance para asegurarme de que aquellos que descarguen mi programa no lo realicen en forma inversa. Entiendo que distribuir un archivo .jar es altamente inseguro.Protección de archivos jar de Java para la distribución

¿Alguien puede recomendar una plataforma independiente para distribuir mi aplicación Java? Además, me gustaría instalarlo como un servicio en cualquier plataforma (Windows, Linux, Mac OSX).

Gracias!

Respuesta

8

Puede codificar/ofuscar el código de bytes con yGuard u otros java-bytecode-ofuscadores.

La distribución independiente del sistema operativo puede ser difícil. En mi humilde opinión, la mejor solución es un archivo normal que contiene varias secuencias de comandos (.bat/.cmd para Windows, .sh para Linux/OSX) para el inicio del programa en los Sistemas Operativos que admite el programa.

Ejecutar un programa java como servicio puede ser aún más difícil: es fácil en Linux, donde solo tiene que escribir un script de inicio adecuado para ejecutarlo en segundo plano. Sé que FireDaemon tiene problemas para ejecutar los programas java como servicio, por lo que podría ser difícil (o imposible) ejecutarlo como servicio en Windows. Lo siento, pero no tengo idea acerca de MacOS X. Podría ser tan fácil como Linux, podría ser tan imposible como Windows.

+0

La ofuscación es el camino a seguir. – Carnell

2

¿Ha considerado utilizar un compilador de código nativo como GCJ? No es independiente de la plataforma (tendría que compilar uno para cada plataforma de destino), pero no veo cómo puede distribuir bytecode independiente de la plataforma y aún así ocultar ese bytecode de sus usuarios finales.

1

puede ofuscarlo. Hará que la ingeniería inversa sea más difícil para su programa. Además, creo que puede hacer que los archivos de su clase sean ejecutables (es decir, .exe para Windows) también

EDITAR: para ser sincero, si la seguridad de su aplicación es tan importante, mejor evite Java por completo. Puede usar el compilador gcc para C++, por ejemplo (que es más o menos independiente de la plataforma siempre que no haga llamadas al sistema). Solo necesita compilarlo en las diferentes máquinas host (que es algo que su pregunta original indica como su necesidad pero en java).

También hay qt, pero yo mismo no lo he probado.

+0

Puede hacer ejecutables, pero lo único que está haciendo es crear una máquina virtual. –

+0

Difícil, pero no imposible. –

2

Puede encriptar el contenedor, pero luego tendrá que escribir un cargador de clases personalizado para cargar el contenido del contenedor. Sin embargo, eso todavía no es 100% infalible, el simple hecho es que nada de lo que pueda hacer hará que su código sea 100% seguro si está destinado. Vea esta discusión aquí.

How to create encrypted Jar file?

+1

El problema con los archivos JAR cifrados es que debe proporcionar algún código para descifrar los archivos para su ejecución. Ese código puede ser de ingeniería inversa para determinar la clave/algoritmo de descifrado. –

+1

@Stephen - de acuerdo 100%. No hay duda de que este método es solo como un candado, hecho para mantener honesto a un hombre honesto. Cualquier persona que quiera poner cualquier nivel de esfuerzo en obtener la fuente de un contenedor puede hacerlo. Después de todo, una vez que ha sido decodificado, puede leerse desde la memoria. –

3

Al ejecutar su aplicación a través de un ofuscador, la ingeniería inversa es más difícil y costosa.

Eche un vistazo a Java Service Wrapper por una manera relativamente fácil de instalar y ejecutar su aplicación java como un servicio en múltiples plataformas.

2

Como han dicho otros, puede ofuscar su código. Eso hará que la ingeniería inversa no sea trivial. También puede compilar su código Java a código nativo usando (por ejemplo) GCJ. Esto dificultará la ingeniería inversa, pero también significará que debe crear diferentes paquetes de distribución para cada plataforma de hardware/SO soportada.

Pero en última instancia, debe reconocer que si distribuye el software para que se ejecute en una plataforma de stock, no hay nada técnico que pueda hacer para evitar la ingeniería inversa. Nada.

En última instancia, tiene que sacrificar los beneficios de distribuir su software frente a los riesgos de que alguien lo haga ingeniería inversa. Un enfoque que las personas adoptan es averiguar si los beneficios superan los costos de los riesgos * y usar garantías legales (por ejemplo, licencias de software apropiadas) para impedir la ingeniería inversa. El otro enfoque es decirle "buena suerte" a posibles ingenieros revertidos y hacer su dinero ofreciendo servicios en lugar de licencias de software.

1

o puede hacer lo que hice. frente java con ciertas funciones de fondo escritas en C++ compiladas en un dll llamado a través de JNI. Interfaz gráfica de usuario frontal es completamente portátil con gruñido de fondo nativo.

Cuestiones relacionadas