保护用于分发的Java jar文件

我正在开发一个我即将公开发布的应用程序。 我想尽我所能来确保那些下载我程序的人不会对它进行逆向工程。 我知道分发.jar文件是非常不安全的。

有人能推荐一种独立于平台的方式来分发我的Java应用程序吗 此外,我想在任何平台(Windows,Linux,Mac OSX)上将其作为服务安装。

谢谢!

您可以使用yGuard或其他java-bytecode-obfuscators对字节码进行加扰/混淆。

操作系统独立分发可能很困难。 恕我直言最好的解决方案是一个普通的存档,包含几个脚本(Windows的.bat / .cmd,linux / OSX的.sh),用于程序支持的操作系统下的程序启动。

将Java程序作为服务运行可能会更加困难:在Linux下很容易,只需编写一个正确的启动脚本即可在后台运行它。 我知道FireDaemon在将java程序作为服务运行时存在问题,因此在Windows上将其作为服务运行可能很困难(或不可能)。 对不起,但我不知道MacOS X.可能像Linux一样容易,可能像Windows一样不可能。

通过混淆器运行应用程序使逆向工程更加困难和昂贵。

查看Java Service Wrapper,以便在多个平台上以相对简单的方式安装和运行Java app作为服务。

您是否考虑过使用GCJ等本机代码编译器? 它不是独立于平台的(您必须为每个目标平台编译一个),但我不知道如何分发与平台无关的字节码,而是从最终用户隐藏该字节码。

你可以加密jar,但是你需要编写一个自定义类加载器来加载jar的内容。 尽管如此,这仍然不是100%万无一失 – 简单的事实是,如果有针对性的话,你所做的任何事情都不会使你的代码100%安全。 请在此处查看此讨论。

如何创建加密的Jar文件?

正如其他人所说,你可以混淆你的代码。 这将使逆向工程变得非常重要。 您还可以使用(例如)GCJ将Java编译为本机代码。 这将使逆向工程更难,但这也意味着您必须为每个支持的硬件/ OS平台创建不同的分发包。

但最终您必须认识到,如果您将软件分发到库存平台上运行,那么您无法采取任何技术来阻止逆向工程。 没有。

最终,您必须权衡分发软件的好处与对其进行逆向工程的风险。 人们采取的一种方法是弄清楚收益是否超过风险*成本,并使用法律保障措施(例如适当的软件许可证)来阻止逆向工程。 另一种方法是向潜在的逆向工程师说“祝你好运”,并通过提供服务而不是软件许可来赚钱。

你可以混淆它。 这将使您的程序的逆向工程更加困难。 此外,我认为你可以使你的类文件可执行(即Windows的.exe)

编辑:说实话,如果你的应用程序的安全性如此重要,最好完全避免使用java。 例如,您可以将gcc编译器用于c ++(只要您不进行系统调用,它或多或少与平台无关)。 您只需要在不同的主机上编译它(这是您的原始问题表明您需要的东西,但在java上)。

还有qt,但我自己没试过那个。

或者你可以做我做的事。 java前端用c ++编写的某些后端函数编译成一个通过JNI调用的dll。 前端GUI完全可移植,后端咕噜声完成原生。