我正在编写一个作为JAR文件分发的软件。目前,这个JAR文件可以被篡改,以检索和保存我们的服务器通过URLClassLoader
传输的另一个文件,进行反编译,并在我们的代码中查找应该保持私有的各种内容,以保证使用它的客户端的安全性。基本上,我想实现一种方法来检查原始JAR是否被篡改。我知道通过在原始类中实现SignedObject
的有效性检查是不可能的,因为Java的性质可以被反编译,但还是有其他方法可以确定代码是否被篡改在原始文件中?此检查可以通过下载的中间类来检查有效性,或任何其他可以保证有效的方法。我整天坐在这里试图找到解决这个问题的方法。欢迎任何帮助。
答案 0 :(得分:1)
这在理论上和实际上都是不可能的。罐子的验证发生在客户端。任何加密都不会以可验证的方式呈现给您,您相信客户端会提供任何加密。
即使您要从jar文件本身请求任意字节进行验证,恶意用户也可以配置从一个好的jar中获取的字节,但是由坏代码提供。
您可以使用加密证明来确保对方拥有数据,但确保只有该数据的副本/版本/版本是不可能的。坚定的攻击者可以向你提供任何谎言,因为他可以在任何验证中声明他拥有有效的罐子。
简而言之,正确数据的存在并不意味着独占的存在。