【问题标题】:how to make a java jar to be expired on certain date/time如何使 java jar 在特定日期/时间过期
【发布时间】:2019-09-12 07:23:45
【问题描述】:

我正在通过 Maven 构建一些 java jar 构建,但我需要放置某些时间戳,以使该 JAR 在 JAR 中固定/提供的某个日期过期。

谢谢 库马尔·肖拉夫

【问题讨论】:

  • if ( currentDate >= expectedDate ) crash();但这很容易被欺骗。只需解压缩罐子,更改条件或将其全部删除,然后就可以了
  • @Stultuske 感谢您的快速回复。我必须像试用版一样分发它,比如 30 天,然后它应该过期。
  • @Stultuske 如何构建或有任何maven lib?
  • 没有简单的方法可以做到不被篡改。毕竟,一个简单的:“更改系统日期”会欺骗它
  • 如果你想 100% 控制一段代码的过期时间,你可以在某处的服务器中运行 jar 文件,让人们通过 HTTP 或其他一些通信协议与之交互。这不容易被欺骗,尽管如果很多人需要使用您提供的服务,它就不会很好地工作。如果您的服务需要与文件系统等交互,它将无法工作。

标签: java maven jar maven-3


【解决方案1】:

有几种方法:

  • 简单的方法:硬编码。
  • 属性
  • 分布式方式
  • 买个工具
  • 搜索免费工具
  • 构建工具

硬编码

在您的代码中的某处,您将拥有

if (currentDate > hardcodedDate) System.exit(0);
runYourCode();

这是没有意义的。对于了解反编译的每个人来说,将其更改为:

// if (currentDate > hardcodedDate) System.exit(0);
runYourCode();

属性

在属性文件中,您可以保留它应该工作的天数。在您的应用程序启动时,您检查某个文件是否存在。如果它没有 -> 创建它,除了你当前的系统日期之外什么都没有。 每次启动时:

Date check = readDateFromFile();
if ( currentDate > check + numberOfDays ) System.exit(0);

再次,很容易伪造。您需要做的就是删除创建的文件,调回系统日期,...

分布式

这是我至少会考虑的。分发所有代码意味着可以根据用户的需要复制它。棘手的业务,因为如果他们知道您的代码,他们就可以更改它。

创建一个与处理您的业务逻辑的服务联系的客户端。确保每个客户端都有一个“密钥”,无论它是硬编码的还是在属性文件中,这是无关紧要的。在您的数据库中,保留所有密钥的列表,包括试用密钥和真实密钥。对于试用密钥,在第一次使用时,您在 DB -> 当前系统日期 + numberOfDaysAllowed 中添加一个值。 在其他所有用途中,对照系统日期检查该值(不是客户端的系统日期,而是您的服务器的系统日期)。日期到了吗?从数据库中删除试用密钥,或将标志“过期”设置为真。 然后,检查串口是否在数据库中,如果是,标志是否过期。 如果串行不在数据库中,或者标志已过期,则终止程序。 客户端可能会尝试篡改密钥,但如果他这样做了,密钥将无法在您的系统中被识别(如果您想更确定,请将其映射到用户),并且无论如何都会失败。

购买工具

让我们面对现实吧,为此创建软件的人也需要赚取收入

搜索免费工具

在我链接的线程中,有一个指向此页面的链接:trial maker,似乎是免费的。

构建工具

如果您不想购买工具,并且对任何现有的免费工具不满意,请随意构建自己的工具。

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多