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)
¿Por qué dices que bytecode ofuscado se puede invertir fácilmente? – hhafez
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
Tal vez deberías portar tu aplicación a Perl ;-) – helpermethod