3

我正在编写一个作为 JAR 文件分发的软件。目前,这个 JAR 文件可以被篡改,以检索和保存我们的服务器通过 传输的另一个文件URLClassLoader,被反编译,并在我们的代码中找到各种应该保持私有的东西,以确保使用它的客户端的安全。基本上,我想实现一种方法来检查原始 JAR 是否被篡改。我知道通过实施对SignedObject由于Java的性质能够被反编译,因此在原始类中,但是是否有其他方法可以确定原始文件中的代码是否已被篡改?此检查可以通过下载的用于检查有效性的中间类或任何其他保证有效的方式进行。我整天都坐在这里试图想出解决这个问题的办法。欢迎任何帮助。

4

1 回答 1

2

这在理论上和实践上都是不可能的。jar 的验证发生在客户端。任何加密都不会以可验证的方式呈现给您,并且您相信客户提供任何加密。

即使您要从 jar 文件本身请求任意字节进行验证,邪恶的用户也可能配置从一个好的 jar 获取字节但由错误的代码提供。

您可以使用加密证明来确保对方数据,但确保它只有该数据的副本/修订/版本是不可能的。一个坚定的攻击者可以向您提供任何谎言,因为他可以在任何验证中声称他拥有有效的罐子。

简而言之,正确数据的存在并不意味着相同的唯一存在。

于 2013-07-18T00:27:33.167 回答