【问题标题】:How to check that my jar file is not modified?如何检查我的 jar 文件没有被修改?
【发布时间】:2020-04-18 01:21:07
【问题描述】:

我希望你在这个复杂的时期做得很好,周围都很好:D

所以我遇到了我的问题,目前我正在开发一个 Java 游戏,我知道可以修改我的游戏的 jar 文件,这让我有点恼火,因为它会给恶意玩家提供作弊的可能性。 ..我想到了一个解决方案,即使它不是万无一失的,那就是确保检查jar文件是否没有被修改。但问题是我不知道如何检查这个,我想到了一个系统,即使我怀疑它会是最好的解决方案,它也会检查文件的点。

如果您有任何其他想法来保护我的游戏,我会很感兴趣:D

【问题讨论】:

  • 哈希。但他们只能找到哈希检查。混淆。还是可以打败的。服务器调用——实际上与哈希相同。祝你好运!
  • Java 具有创建者对 jar 进行签名的内置功能; JVM 检查此签名(如果存在),并将检测 jar 中的条目是否已被修改。签名使用任何其他人都无法伪造的公钥加密。但是作弊者可以删除签名;如果您编写代码来检查是否缺少签名,他们可以删除/更改该代码。基本上,这可以防御第三方(即下载代码的网络上的某个人,这是 Java 的原始用例)而不是您的预期用户。

标签: java security


【解决方案1】:

可以检查您机器上的 JAR 文件是否已被修改。只需将当前 JAR 文件的加密哈希与先前记录的原始副本的哈希进行比较。 (或者只是与原始副本进行逐字节比较。)

但是你不能对用户机器上的 JAR 文件执行此操作

  • 您无法登录到用户的计算机并访问他们的文件系统来查看 JAR 文件。 (即使可以,也不能保证您会看到作弊者实际使用的文件。)
  • 如果您的应用程序(在用户计算机上运行)试图报告其 JAR 文件的完整性,这可能会被作弊者打败。他们需要做的就是修改包含报告代码的 JAR 文件以报告 fake 哈希。

基本上,除了检测作弊者本身的异常行为之外,没有可靠的方法来检测作弊者正在运行修改后的 JAR。


但是这样想吧。如果有一个好的(可靠的,没有规避的)机制来检测作弊者正在运行修改过的客户端,那么在现有的许多在线游戏中作弊就不会成为问题。并且(通过扩展)没有办法击败软件许可实施方案......因为软件供应商会使用类似的机制。

所以,我的建议是不要在这种方法上浪费太多时间。它仅适用于技术专长或动力有限的人。

完全防止作弊的唯一方法是控制客户端运行的平台。这通常是不切实际的。

【讨论】:

    【解决方案2】:

    关于您关于其他想法的问题,您能做的最好的事情是验证来自客户的所有内容。您应该始终记住的一件事是,客户端不能被信任,因为您无法从中验证任何内容。您所能做的就是将状态存储在远程服务器上,当客户端告诉您某些事情时,对其进行验证,并在必要时给出响应或在必要时阻止该操作。

    【讨论】:

      【解决方案3】:

      您需要以某种方式找出 jar 文件的位置:Java - Search for files in a directory

      然后可以查看文件的最后修改日期:https://www.boraji.com/java-get-last-modified-date-of-a-file

      但是,我不认为这是一种非常强大的作弊防御措施,因为可以修改 jar 文件并删除文件日期的验证。

      您需要考虑可能发生的作弊类型,并提出其他安全措施。

      编辑

      正如 Dave Thompson 所指出的,修改后的时间戳也可以更改,这使得 jar 文件的修改变得不必要,即使黑客仍然需要逆向工程,因为这就是他们找出规则的方式。应用程序是。

      【讨论】:

      • 我什至不需要修改 jar,我可以轻松地将修改后的时间戳设置为我想要的任何值——在每个 Unix 上,因为它永远是内置的(触摸),在 Windows 上运行了十多年 PS 用一行代码完成,在此之前我可以使用 VBS 或用大约 3 行代码编写 C 程序。
      猜你喜欢
      • 2013-09-05
      • 1970-01-01
      • 2011-09-14
      • 2021-11-23
      • 2018-04-17
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多