保护用于分发的Java jar文件

时间:2009-08-14 23:43:38

标签: java security installer

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

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

谢谢!

7 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:3)

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

查看Java Service Wrapper,了解在多个平台上安装和运行Java应用程序作为服务的相对简单的方法。

答案 2 :(得分:3)

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

  

据我所知,分发.jar文件非常不安全。

您必须明白,如果您以任何形式分发软件以在您无法完全控制的平台上运行,那么您无法采取任何技术来阻止逆向工程。什么都没有。

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

How to create encrypted Jar file?

答案 6 :(得分:1)

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