2010-11-20 17 views
5

Estoy escribiendo un complemento para una aplicación Java. Podría ofuscar el plugin, pero aún así sería fácilmente reversible.¿Puedo usar la compilación nativa como ofuscación Java

Creo que si pudiera compilar este complemento en una biblioteca compartida, que utiliza en gran medida JNI para comunicarse con la aplicación principal, sería mucho más difícil realizar ingeniería inversa. Estoy dispuesto a sacrificar algo de rendimiento a JNI, y la aplicación con la que estoy codificando admite la carga de bibliotecas compartidas. El único problema es que no tengo conocimiento de una herramienta que hace el trabajo: gcj parece depender de su propio tiempo de ejecución y IKVM.NET - en .NET

Para ser precisos:


public class PluginImpl implements Plugin { 
    @Override 
    public void startPlugin(PluginContext ctx) { 
     ctx.helloWorld(); 
    } 
} 

debe ser convertido a


public class PluginImpl implements Plugin { 
    @Override 
    public native void startPlugin(PluginContext ctx); 
} 

y el cuerpo de mi método startPlugin se compila en una biblioteca compartida.

(bueno, sí, lo sé, lo podría haber escrito este plugin en C en primer lugar)

+1

¿Por qué dices que bytecode ofuscado se puede invertir fácilmente? – hhafez

+9

Cualquiera que tenga el tiempo y la paciencia para desvincular su bytecode puede hacer lo mismo con el código nativo, dado más tiempo. Estás sacrificando el rendimiento, la imposibilidad de depurar, la fiabilidad (cuando el Java compilado a nativo invariablemente se comporta de forma diferente en comparación con la ejecución en la JVM) y los días de tu propio tiempo con muy poca "ganancia" y un producto muy inferior. ** Abandona ahora ** mientras no hayas invertido tanto tiempo en ofuscación que sientes que solo * tienes * para enviar el producto así ... – SimonJ

+2

Tal vez deberías portar tu aplicación a Perl ;-) – helpermethod

Respuesta

1

que se supone que tiene buenas razones para ir para la compilación nativa. Una opción que puede examinar es Excelsior JET que es una solución Java certificada.

+0

Aún así, ejecuta su propio tiempo de ejecución: "Los ejecutables resultantes necesitan el tiempo de ejecución Excelsior JET para ejecutarse, pero no el Sun JRE". (http://www.excelsior-usa.com/jetfaq.html) – obfuscer

+0

Bueno, +1 de todos modos por ser un producto muy interesante. –

+0

Cualquier aplicación Java necesita un tiempo de ejecución de Java con un recolector de elementos no utilizados, aislamiento de contexto (ya sea JNI, CNI o algo más), etc. Excelsior JET simplemente precompila el código de bytes para optimizar el código nativo. Todavía tiene un compilador JIT para manejar clases que no fueron precompiladas: proxies dinámicos, complementos de terceros, etc. –

0

Puede hacer que su complemento brinde su servicio a través de RMI. De esta forma, el complemento sería una aplicación y podría compilarse a código nativo.

+0

Muy buen punto, gracias. Sospecho que la RMI fuera de proceso supondría una gran penalización de rendimiento, pero puedo intentarlo. La ventaja añadida es que podría usar gcj entonces. Me gustaría que la API contra la que estoy escribiendo fuera más amigable con la serialización. – obfuscer

2

No se puede usar nada para la ofuscación de código si está distribuyendo código ejecutable de alguna forma. Cualquier código ejecutable puede ser de ingeniería inversa. Este es un problema comercial, no un problema técnico, y se resuelve mediante busniess: acuerdos de licencia, precio, tiempo de comercialización o, lo más probable, una evaluación más realista de los riesgos y valores, es decir, admitir que su código simplemente no lo es. eso es valioso Alternativamente, entregue su producto como un servicio en lugar de como un ejecutable.

+0

La ofuscación no pretende "prevenir" la ingeniería inversa, solo para hacerlo más difícil.Siempre que sepa que si distribuye código ejecutable es realmente imposible evitar por completo la ingeniería inversa, no hay nada de malo en utilizar la ofuscación como elemento disuasorio. – Grodriguez

+0

Existe un costo definido y un posible beneficio. Es una decisión de negocios. – EJP

+0

Puede decir lo mismo para cualquier función de cualquier producto de software. Decidir si la característica se implementa es una decisión comercial. El diseño y la implementación son un trabajo técnico. Del mismo modo, decidir si usar la ofuscación es un problema comercial. La ofuscación en sí es un tema técnico. – Grodriguez

Cuestiones relacionadas