java - 检测 Java JAR/代码篡改

标签 java jar signed-applet urlclassloader

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

最佳答案

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

即使您从 jar 文件本身请求任意字节以进行验证,恶意用户也可能将字节配置为从良好的 jar 中获取但由错误代码呈现。

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

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

关于java - 检测 Java JAR/代码篡改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17711671/

相关文章:

执行jar/exe/etc的Java代码

java - 分布式 jar 文件未获取我的 .txt 文件

java - 某些计算机上的小程序的 ClassNotFoundException 而不是其他计算机上的小程序 - 与操作系统有关?

java - -tsa 或 -tsacert 时间戳,用于 applet jar 自签名

java - 如何一起使用 completablefuture 和 Streams

java - 面板在 Applet 上显示,但在应用程序模式下不显示

java - 使用JNA在JAVA中加载动态库是否有限制?

java - 如何覆盖 Http 中的 302 状态?

java - maven不将lib打包到jar中