如何将java程序交付给客户端?

时间:2009-10-13 20:04:29

标签: java encryption obfuscation deployment

我用Java编写了一个软件应用程序。现在我想把它交给我的客户。但在此之前,我想对下面提到的那个软件做点什么。您可以回答以下任何或所有问题:

我想:

  1. 加密所有.class文件,以便没有人可以反编译它。我该如何加密?
  2. 加密后我想混淆该代码以增加额外的安全性。我该怎么办?
  3. 添加一些“串行密钥”功能,以便软件只有在使用我提供的密钥注册后才能工作。这非常重要,以防止多用户使用我的软件。如何添加该关键功能以及如何生成密钥。如何限制该软件只能在一台计算机上运行。
  4. 可以解压缩jar文件,并可以看到.class文件。有没有办法将jar文件包装成某种东西,以便没有人可以解压缩该文件。
  5. 我不想告诉客户端先安装java来运行我的应用程序。那么有没有办法,如果有人安装我的软件,java会自动安装在他/她的计算机上,而不会告诉他java正在安装到他的计算机上。如果可能,那么以这种方式使用Java软件是否合法。
  6. 永久更改jar文件的图标。
  7. 实施代码,检查我的网站是否有任何可用的更新。
  8. 如果您想要任何其他建议来提高软件的安全性,那么您也会受到欢迎。

7 个答案:

答案 0 :(得分:9)

没有特别的顺序:

2 - 有些产品会进行混淆。它们通常将类/变量/方法重命名为单个字母名称。这使得确定用户报告的错误相当困难。显示异常发生在a.b.c中的堆栈跟踪并不是特别有用。

1,3,4 - 如果您正在分发java,则无法完全避免此风险。您的代码需要在某个时候解压缩并加载。如果有人替换了jvm中的rt.jar,那么他们可以替换顶级类加载器并转储出类似的类。混淆使得它对它们没那么有用,但请看上面的警告。

5 - 分发“私人jre”。基本上,你的程序文件夹中有一个jre。您的启动器脚本运行它。但是会增加您的发行版的大小。

6 - 在Windows上,这将是文件关联问题。但这也会影响所有其他jar文件。除非作为4的一部分(但是你管理它),否则你也使用不同的扩展名。不确定其他操作系统。

7 - 使用Java Web Start?如果做不到这一点,只需在服务器上列出最新版本的文件,获取文件并与安装的版本进行比较。

对于1,2,4和5,您还可以查看使用gcj或类似代码编译本机代码。如果你这样做,请注意兼容性问题。

答案 1 :(得分:7)

  

加密所有.class文件,以便没有人可以反编译它。怎么能   我加密了吗?

你做不到。如果没有人可以反编译它,你期望目标JVM如何?

  

加密后我想混淆该代码以增加额外的代码   安全。我怎么能这样做?

     

我想添加一些“串行密钥”   功能使软件   注册后才能使用   我提供的钥匙。这是非常的   重要的是要防止多用户   使用我的软件。我该如何添加   关键功能,我该怎么做   生成密钥。我怎么能限制   该软件只能在单个上运行   计算机。

有几种方法可以做到这一点,但一个简单的方法是公钥加密:

  • 您的软件会根据计算机属性生成随机请求ID或请求ID,您的用户会将此提交给您。
  • 您使用私钥对请求ID进行签名,然后将其发回给用户。
  • 用户向软件提供已签名的请求ID,以验证您是否已签名。
  

可以解压缩jar文件,可以看到.class文件。在那儿   任何方式将jar文件包装成   这样的东西,没有人可以解压缩   那个文件。

没有

  

我不想告诉客户端先安装java来运行我的   应用。那有什么办法吗?   如果有人安装我的软件,   java自动安装   在他/她的电脑上没有通知   他正在下载java   他的电脑。如果有可能,那么   使用Java软件是否合法   这样。

尝试为您的应用程序构建NSIS安装程序,以检测/安装Java和您的程序。

答案 2 :(得分:4)

与客户建立更好的信任关系。

然后你可以花费额外的时间(不做任务1-5)来改进,修复错误等,从而改善与客户的关系。

答案 3 :(得分:3)

您可以使用GCJ编译它,它会将您的应用程序编译为正常的Windows / Linux本机可执行文件(.exe)。然后,您可以使用InstallShield等程序创建安装。

答案 4 :(得分:1)

我工作的公司实际上发送了未经混淆的jar文件,并且所有调试信息都已到位。这样,如果客户端站点发生错误,他们可以向我们发送完整的堆栈跟踪,这有助于分析和本地化代码中的错误。

试图混淆你的代码将导致你与潜在的破解者进行军备竞赛并消耗大量的时间而几乎没有真正的好处。相反,我建议你尝试找到其他方法来为你的客户购买(而不是盗版)你的软件。例如,您可以为他们提供免费更新,或技术支持,或类似的东西。


至于 6 :您可以使用JSmooth或类似工具为您的应用创建一个exe包装器。它将允许您更改图标,您的客户端将有一个exe文件,他们可以双击,而不必混淆jar文件的文件关联。
但请注意,生成的exe文件不包含Java或jar文件。但是,如果Java不可用,它将打印一条很好的错误消息。

答案 5 :(得分:0)

在这里添加其他答案:

1和4 :如果您修改JVM并将其与您的安装预先打包,您实际上可以执行此操作,但是这违反了Java的许可协议,即分发修改后的JVM而无需像Sun那样支付Sun元。

答案 6 :(得分:0)

谁是您的客户? Piratebay.org?说真的,美国的每家大公司都支付软件费用。客户退出并打电话给他们的风险太高了。您需要足够的保护,以便程序员更容易购买产品,而不是规避您的版权保护。