【问题标题】:Secure Java from reverse-engineering using industry grade encryption使用工业级加密保护 Java 免受逆向工程的影响
【发布时间】:2012-04-06 08:09:49
【问题描述】:

目标:

保护我的 Java 应用程序免受逆向工程。

想法:

  1. 将程序分成两半(加载程序和程序)
  2. loader 将是一个普通的 jar
  3. 程序将是一个加密的 jar 文件(bouncycastle、AES?)
  4. 加载程序向安全服务器 (https) 请求解码程序的密钥
  5. loader 然后解码程序并加载它的类

问题:

5号有可能吗?
这里有人做过吗?
你知道任何图书馆已经可用吗?
你能发现主要的缺陷/你会采取不同的做法吗?

额外

我知道阻止代码的完全逆向工程是不可能的。
我只是想让它更难、更可追溯。

【问题讨论】:

  • 似乎应该是可能的。不过我认为破解它不会太难,只需等待加载程序解密程序并将其保存到磁盘...
  • 对常规jar进行逆向工程,将程序解码并保存到类文件中,然后再次进行逆向工程
  • @Bwmat,“程序”将仅在内存中。从不在磁盘上。
  • 您无法阻止对您的应用程序进行逆向工程。你只能让它变得更加困难(放慢这个过程)。
  • 在这种情况下,您的时间/精力/金钱最好花在确保对该服务器的适当物理访问控制到位(作为您的 colo 协议的一部分)以及操作系统和其他逻辑at 的接入点已正确锁定、配置和监控。这些步骤的投资回报率远远高于尝试在实际应用中实施反 RE。

标签: java security encryption reverse-engineering bouncycastle


【解决方案1】:

这很可能使用类加载器。但是解码你的程序仍然很容易。所有需要做的就是更改您的加载器以将所有类写入磁盘,然后再使用您的自定义类加载器将它们加载到内存中。

更新

如果 Loader 是您的用户可以执行的东西,那么我只需要反编译并替换 Loader JAR 文件即可将类转储到磁盘。不仅如此,我确信一定有一些东西可以对 JVM 进行内存转储并输出所有加载的字节码。

如果 Loader 位于用户无法访问的锁定机器上,那么您要解决的用例是什么?

这些问题的“解决方案”是:

  1. 使用旨在破坏反编译器的高级混淆器。
  2. 阻止对 JAR 文件本身的访问。通过机器上的 ACL 或通过使用远程服务器来执行您想要保护的代码。这本质上就是 Web 应用程序的工作方式。 Stackoverflow 可能有大量的 IP 或处理,但我们永远无法访问后端处理,根据用户体验输出的结果。

【讨论】:

  • 确实要考虑到如果您要重新创建加载程序,您将在另一台未经远程服务器授权的机器上运行它。您有更好的解决方案(使用 Java)吗?谢谢。
  • @Frankie 为什么要在不同的机器上运行?您的装载机是否安装在无人可以使用的机器上?如果是这样,那你为什么担心反编译?
  • @Frankie 运行加载程序的机器是否在功能上受到某种限制?什么可以阻止攻击者制作被黑的加载器 jar 并将其放回原始机器上?
  • @Andrew Finnell 加载程序可能会在云服务器上运行,我将拥有 root 访问权限。最近的 linode 黑客事件让我保持警惕。
  • @Matt C 如果装载机运行的机器受到威胁,我希望我能在短时间内抓住黑客并采取积极措施。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 2020-05-02
  • 2017-05-28
  • 2019-10-11
  • 2021-02-08
  • 1970-01-01
  • 2010-09-11
相关资源
最近更新 更多