基本上我需要知道是否有人编辑了我的代码,因此有一个验证系统可以检查用户的IP,如果有人要对它进行反编译并进行更改,以便它不检查IP可以泄露我的代码。
我已经混淆了它。
但是说他们删除了检查IP和方法的类 - 我可以检查他们是否在程序的其他地方这样做了吗?
例如,如果我执行classInstance.methodName()
并且该方法不存在,该程序是否会关闭?会发生什么?
实际上,我非常确定通过生成一个哈希代码可以实现保护,从而将整个JAR文件考虑在内。如果您计算它并使用您的软件(外部文件)进行交付,那么您有机会检测到任何更改。但你必须确保"黑客"没有机会简单地用他自己的替换有效的哈希密钥。这直接指向加密方向。您必须以某种方式保护您的哈希密钥,以便在您不知情的情况下无法替换它...但我自己没有这方面的经验。抱歉。
这是一个回应 - 如果有可能,我将如何生成并积极使用has?
答案 0 :(得分:1)
您可以考虑的是签署您的jar文件,并在启动时进行验证。查找签名和验证课程 https://docs.oracle.com/javase/tutorial/deployment/jar/signing.html https://docs.oracle.com/javase/tutorial/deployment/jar/verify.html
启动时,您只需查看添加的公共证书,该证书是签名块的一部分(请参阅https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html)
此验证也可以通过第三方软件完成(通过Let加密生成证书,或者如果您愿意花钱,则可以通过其他付费提供商生成) 如果这是有效的,您可以信任该证书。如果该证书是您的,那么该罐子由您签名。如果你然后验证了jar,那么那个jar必须是未经修改的。
但是,这只会保护用户免于运行被黑客攻击的副本,如果他不想要被黑客攻击的副本。否则反编译,修改,编译就会很好 - 谁在乎它是否签名。
复制保护不是绝对可以解决的问题,只有默默无闻。所以,是的,混淆! (并记住,它不是100%完美)
我会做以下事情:
正如您所看到的,这还远非完美。然后有人反编译需要找到所有验证线程,这些线程应该与其他类无法区分 - 所以你在其中使用的所有内容都应该用于“正常”线程。代码也是如此。然后你的代码变得更加混乱。
如果我写这篇文章,我需要花费几周的时间来完成第一步到第四步。这听起来很多,但安全性很挑剔,特别是如果你不熟悉它的话。然后可能再添加2-3周来修改我的代码,以便验证线程无法区分 - 或者甚至可能有一个小程序为我做,所以我有很好的源代码。 再说一次,我是一个企业家,所以我希望它尽可能好“#39;。 也许只有第1步就够了