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

标签 java encryption obfuscation deployment

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

我想:

  1. 加密所有的.class 文件,这样就没人可以反编译了。如何加密?
  2. 加密后,我想混淆该代码以增加额外的安全性。我该怎么做?
  3. 添加一些“序列 key ”功能,以便软件只有在使用我提供的 key 注册后才能运行。这对于防止多用户使用我的软件非常重要。如何添加该关键功能以及如何生成 key 。以及如何限制该软件仅在一台计算机上运行。
  4. 可以解压jar文件,可以看到.class文件。有什么方法可以将 jar 文件包装成某种东西,这样就没人可以解压缩该文件了。
  5. 我不想让客户先安装 java 来运行我的应用程序。那么有什么方法可以让任何人安装我的软件时,java 自动安装在他/她的计算机上,而不通知他 java 正在安装到他的计算机上。如果可能,那么以这种方式使用 Java 软件是否合法。
  6. 永久更改 jar 文件的图标。
  7. 实现一个代码来检查我的网站是否有任何可用的更新。

如果您需要任何其他建议来增加软件的安全性,那么也欢迎您。

最佳答案

排名不分先后:

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

1,3,4 - 如果您要分发 java,则无法完全避免这种风险。您的代码需要在某个时候解压缩和加载。如果有人替换了 jvm 中的 rt.jar,那么他们可以替换顶级类加载器并像那样转储你的类。混淆会降低这对他们的用处,但请参阅上述警告。

5 - 分发“私有(private) jre”。基本上,您的程序文件夹中有一个 jre。您的启动器脚本运行它。不过会增加分发的大小。

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

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

对于 1、2、4 和 5,您还可以考虑使用 gcj 或类似工具编译为 native 代码。如果这样做,请注意兼容性问题。

关于java - 如何将java程序交付给客户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562617/

相关文章:

java - TDLib - 通过他的电话号码向其他人发送消息

Java密封对象

asp.net - 从 SqlMembershipProvider 迁移到自定义提供程序

ruby-on-rails - 随机化数据库记录 ID

java - 我怎样才能使这个图像缩放器快速?

java - 从 HashMap 中检索记录

java - Proguard保留类名?

android - 如何从 proguard 中排除 .so 文件?

java - zeromq 与 Python 与 Java 的 node.js 性能

Business Catalyst 中的电子邮件混淆