Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保护javajar文件以供分发_Java_Security_Installation - Fatal编程技术网

保护javajar文件以供分发

保护javajar文件以供分发,java,security,installation,Java,Security,Installation,我正在开发一个应用程序,不久将公开发布。我愿意尽我所能确保那些下载我的程序的人不会对其进行反向工程。我知道分发.jar文件是非常不安全的 有人能推荐一种独立于平台的方式来分发我的Java应用程序吗?另外,我想在任何平台(Windows、Linux、MacOSX)上安装它作为服务 谢谢 您是否考虑过使用本机代码编译器,例如?它不是独立于平台的(您必须为每个目标平台编译一个),但我不知道如何分发独立于平台的字节码,同时对最终用户隐藏该字节码。您可以混淆它。这将使你的程序更难进行逆向工程。 此外,我认

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

有人能推荐一种独立于平台的方式来分发我的Java应用程序吗?另外,我想在任何平台(Windows、Linux、MacOSX)上安装它作为服务


谢谢

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

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

编辑:老实说,如果应用程序的安全性非常重要,那么最好避免使用java。例如,C++可以使用GCC编译器(只要不进行系统调用,它或多或少独立于平台)。您只需要在不同的主机上编译它(这是您最初的问题指出的需要,但在java上)


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

您可以对jar进行加密,但是您需要编写一个自定义类加载器来加载jar的内容。但这仍然不是100%的万无一失——简单的事实是,如果代码是有目标的,那么您所能做的任何事情都不会使代码100%安全。请看这里的讨论


您可以使用java或其他java字节码混淆器对字节码进行置乱/混淆

独立于操作系统的分发可能很困难。IMHO最好的解决方案是在程序支持的操作系统下为程序启动创建一个包含多个脚本(.bat/.cmd for windows、.sh for linux/OSX)的普通存档


将java程序作为服务运行可能更加困难:在Linux下很容易,只需编写一个适当的启动脚本就可以在后台运行它。我知道FireDaemon在将java程序作为服务运行时遇到问题,因此在Windows上作为服务运行它可能很困难(或不可能)。对不起,我对MacOS X一无所知。它可能像Linux一样简单,也可能像Windows一样不可能。

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


请参阅,以寻找一种相对简单的方法,在多个平台上作为服务安装和运行java应用程序。

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

我知道分发.jar文件是非常不安全的

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


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

或者你可以像我那样做。用C++编写的java前端的某些后端函数编译成一个通过JNI调用的DLL。前端GUI是完全可移植的,后端grunt是本机的。

您可以制作可执行文件,但您所做的只是添加一个虚拟机。这很困难,但并非不可能。加密JAR文件的问题是,您必须提供一些代码来解密文件以供执行。该代码可以反向工程以确定解密密钥/算法。@Stephen-100%同意。毫无疑问,这种方法就像一把挂锁,是为了让一个诚实的人保持诚实。任何想要投入任何努力从jar获取源代码的人都可以这样做。毕竟,一旦它被解码,就可以从内存中直接读取。模糊处理是一种方法。