我正在为Java应用程序编写一个插件。我可以混淆插件,但它仍然可以很容易地被反向工程。
我相信,如果我可以将这个插件编译成一个共享库,它大量使用JNI与主应用程序通信,那么反向工程就会困难得多。我愿意为JNI牺牲一些性能,而且我正在编写的应用程序确实支持共享库加载。唯一的问题是,我不知道有什么工具可以完成这项工作: gcj似乎依赖于它自己的运行时和IKVM.NET - on .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写这个插件)
发布于 2010-11-21 08:57:47
如果您以任何形式分发可执行代码,那么您就不能真正使用任何东西来混淆代码。任何可执行代码都可以进行逆向工程。这是一个商业问题,而不是一个技术问题,它是通过商业手段解决的:许可协议,价格,上市时间,或者很可能是对风险和价值的更现实的评估,即承认你的代码没有那么有价值。或者,将产品作为服务交付,而不是作为可执行文件交付。
发布于 2010-11-20 19:38:52
我假设你有很好的理由去进行本机编译。您可以研究的一个选项是Excelsior JET,它是一种经过认证的Java解决方案。
发布于 2010-11-20 19:50:25
你可以让你的插件通过RMI提供服务。这样,插件就是一个应用程序,可以被编译成本机代码。
https://stackoverflow.com/questions/4232283
复制相似问题