我正在为一款Java应用程序编写插件。我可以混淆插件,但仍然很容易被逆向工程破解。
我认为如果我能将此插件编译成共享库,并使用JNI与主应用程序进行通信,那么它将更难被逆向工程破解。我愿意为JNI牺牲一些性能,并且我正在编写的应用程序支持共享库加载。唯一的问题是我不知道有什么工具可以完成这项工作:gcj似乎依赖于自己的运行时,而IKVM.NET则依赖于.NET。
准确地说:
我认为如果我能将此插件编译成共享库,并使用JNI与主应用程序进行通信,那么它将更难被逆向工程破解。我愿意为JNI牺牲一些性能,并且我正在编写的应用程序支持共享库加载。唯一的问题是我不知道有什么工具可以完成这项工作:gcj似乎依赖于自己的运行时,而IKVM.NET则依赖于.NET。
准确地说:
public class PluginImpl implements Plugin {
@Override
public void startPlugin(PluginContext ctx) {
ctx.helloWorld();
}
}
应该转换为
public class PluginImpl implements Plugin {
@Override
public native void startPlugin(PluginContext ctx);
}
我的startPlugin方法的主体被编译成了一个共享库。
(是的,我知道,我本来可以一开始就用C语言编写这个插件的)