与this问题相关,是否可以/我应该使用jar签名来创建防篡改jar,其中嵌入了信息,以便运行时强制允许使用该应用程序的用户数量?我的想法是:
我的第3步假设是否正确?对于我想要做的事情,这是一个很好的方法吗?如果没有,标准做法是什么?
谢谢!
答案 0 :(得分:4)
如果用户必须在某些坚持签名存在且功能正常的环境中运行它,那么这只是“防篡改”。如果你把一个罐子交给普通人,而普通人可以在一个普通的JVM(不是applet,而不是webstart)中运行它,他们可以完全删除签名。如果你想试图阻止它,你必须编写代码来调用Class.getSigners
并在你没有看到自己的情况下爆炸。因此,他们需要启动asm才能将该支票写出来,并且他们会很高兴。
Java代码签名允许某个容器验证jar文件是否保持其源的完整性。它没有为您提供创建防篡改包的方法。
答案 1 :(得分:2)
简单的JAR签名不起作用。 JAR签名是关于信任您的JAR文件的客户端。它不会阻止客户端从JAR的内容(带有调整)创建新的JAR并将其作为未签名的JAR运行。
JAR中的类可能会尝试检查它们是否是从适当签名的JAR加载的,但是可以调整任何此类来禁用该检查。对于一个坚定的攻击者来说,这是一个速度提升......但肯定不是一个不可行的解决方案。
对同时用户实施限制的常规方法是实施单独的许可证管理器/许可证密钥系统;例如的FlexLM。 (当然,也可以通过调整类来跳过许可证检查来解决这个问题。)
最重要的是,在客户端控制的计算机上运行的代码的任何许可证管理方案都可能被取消。