有没有办法检测方法是否被删除或类有? Java的

时间:2017-02-10 18:21:33

标签: java

基本上我需要知道是否有人编辑了我的代码,因此有一个验证系统可以检查用户的IP,如果有人要对它进行反编译并进行更改,以便它不检查IP可以泄露我的代码。

我已经混淆了它。

但是说他们删除了检查IP和方法的类 - 我可以检查他们是否在程序的其他地方这样做了吗?

例如,如果我执行classInstance.methodName()并且该方法不存在,该程序是否会关闭?会发生什么?

  

实际上,我非常确定通过生成一个哈希代码可以实现保护,从而将整个JAR文件考虑在内。如果您计算它并使用您的软件(外部文件)进行交付,那么您有机会检测到任何更改。但你必须确保"黑客"没有机会简单地用他自己的替换有效的哈希密钥。这直接指向加密方向。您必须以某种方式保护您的哈希密钥,以便在您不知情的情况下无法替换它...但我自己没有这方面的经验。抱歉。

这是一个回应 - 如果有可能,我将如何生成并积极使用has?

1 个答案:

答案 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%完美)

我会做以下事情:

  1. 启动时,使用您的证书验证jar是否已正确签名(可能很棘手,但听起来可行)。这是A级。
  2. 有几个随机线程。这些都是不同的,并在不同的时间产生(并且可能有一些听起来很重要的不明名称。
  3. 每个线程都有一个明文密钥,一个包含A类全名的加密字符串,以及一个A类散列的加密字符串。运行时,他们用密钥解密字符串,使用反射来获取A类的类,并用哈希验证它。
  4. 为了进一步混淆,请不时在其他地方的代码中使用反射,以隐藏“验证线程/类”'
  5. 正如您所看到的,这还远非完美。然后有人反编译需要找到所有验证线程,这些线程应该与其他类无法区分 - 所以你在其中使用的所有内容都应该用于“正常”线程。代码也是如此。然后你的代码变得更加混乱。

    如果我写这篇文章,我需要花费几周的时间来完成第一步到第四步。这听起来很多,但安全性很挑剔,特别是如果你不熟悉它的话。然后可能再添加2-3周来修改我的代码,以便验证线程无法区分 - 或者甚至可能有一个小程序为我做,所以我有很好的源代码。 再说一次,我是一个企业家,所以我希望它尽可能好“#39;。 也许只有第1步就够了