java - 在优先考虑源代码保护的情况下加密 JAR

标签 java encryption jar aes

我有一个难题。基本上,我已经给一群我是 friend 的人提供了一个使用源代码的程序,我不希望小组外的任何人知道。我们都知道 Java 在进行任何级别的混淆时都非常糟糕,因为大多数混淆工具只会重命名对象、打乱代码等。我使用过这样的工具,但老实说,我想尽可能地使用程序的安全性。

由于应用程序需要用户名、密码和其他标识符才能登录到它使用的服务器,我开始怀疑是否可以为用户生成一个唯一的 AES key 来保护 JAR。

基本上,在运行各种启动器登录时,启动器应用可能会从服务器请求 AES key ,并使用它来解密已经从服务器下载的安全 JAR。 key 对每个用户来说都是唯一的,这意味着服务器必须为每个用户以不同的方式加密 JAR。

现在,我知道这听起来有多疯狂了。但由于这是一个低级的事情,我需要知道是否有一种方法可以以某种方式从任何类型的流中解密和运行 JAR。或者,如果这不可能,解密文件、运行它然后重新加密是否合理?

最佳答案

当然,您可以即时解密和运行 Java 字节码 - 字节码操作库(例如 ASM)甚至可以动态地创建新类。

但是,老实说,如果某些东西确实在计算机上运行,​​那么它的代码肯定会提供给任何了解相关知识的人。 Java 尤其方便,因为与任何 native 编译语言相比,它允许更好地访问由 JVM 加载的类的字节码。

理论上,您可以通过使用 JNA/JNI 和一两个 native 共享库来进一步混淆。但是,在坚定的攻击者手中,没有任何措施可以完全保护您的代码——他们只会花费更多时间来弄清楚您的算法是如何工作的。如果您担心盗版,那么,我们正处于虚拟化时代;实际上,只需按几下按键,您就可以从上到下克隆整个计算机系统 - 剩下的由您自己解决...

唯一可能可行的解决方案是将您的软件作为服务提供,但该方法会带来所有问题 - 而且您仍然没有绝对的安全性。

如果您担心保护您的知识产权,那么请一位律师并考虑以某种形式发布您的算法 - 默默无闻只会到此为止。它不会阻止某人对您的系统进行黑盒分析,通常只知道某些事情是可能就足够了。

停止尝试为明显不属于技术性质的问题寻找技术解决方案......

关于java - 在优先考虑源代码保护的情况下加密 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14111603/

相关文章:

java - 问题将 Base64 字符串转换为十六进制字符串

java - 由于特定的 Spring JMS 配置,无法从 Tomcat 取消部署

cocoa - 创建具有自定义文件扩展名的新文件?

c++ - 如何在 C++ 中递增字母?

javascript - 解密 Javascript 中的字符串

java - 带有 Swift 的 RESTful/JAX-RS?

java - 无法从后台 do 返回多个值以执行后

java - 从java访问外部.jar资源

Java 将 Jar URL 转换为文件

maven - 部署Maven项目抛出java.util.zip.ZipException : invalid LOC header (bad signature)