Java JAR 保护

标签 java classloader urlclassloader source-code-protection

我编写了一个 Java 应用程序,并计划在线发布它。每个版本都将使用我制作的 secret 序列 key 锁定。

我需要从反编译器等保护我的 jar 文件。这是我到目前为止所做的:

  1. 用户在表格中输入他的序列号
  2. 序列号通过 php 脚本发送到我的开发服务器
  3. 脚本生成一个新的 jar bin 文件,该文件以 AES 128 加密
  4. 我的“加载器”以字节形式下载 jar 文件并对其进行解密。
  5. 它调用主要方法。
  6. 用户可以随心所欲地使用该应用
  7. 用户关闭应用
  8. 清除缓存,一切返回到步骤 1 或之前。

我已经完成了步骤 1 到 3,但我需要知道是否可以制作一个自定义类加载器来从 HTTP 获取字节、解密它们并调用 main 方法。由于文件已完全加密(在 PHP 服务器上保存为 bin),我无法使用基本的类加载器。关于第8步,是否可以从计算机内存中卸载内容?

最佳答案

是的,这是可能的,但也没用。

您的类加载器将是您安全系统的最薄弱点。不能加密,反编译相对容易。

现在,由于类加载器中有一个地方必须有字节数组形式的解密类,攻击者唯一需要做的就是将这个字节数组转储到一个文件中。

引用dystroy的代码:

classBytes = EncryptionUtil.decryptBytes(url, key); 

// In this moment, classBytes contains unencrypted class.
// If an attacker adds:   
//
//   FileOutputStream fos = new FileOutputStream("some.name");
//   fos.write(classBytes);
//   fos.close();
// 
// he will destroy all your security.


return defineClass(name, classBytes, 0, classBytes.length);

关于Java JAR 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11137545/

相关文章:

java - 得到 NoClassDefFoundError : wrong name with Windows path

Java 如何使用系统类加载器(无 URLClassLoader)从类路径中的 jar 中加载类?

java - Spring - 服务层方法通用与特定

java - Spring - 带有注释的构造函数对象的 AspectJ 切入点

java - 是否有与 getchar 等效的 Java?

jSTL - 基本问题复杂解决方案-Tomcat到JBoss

java - Sun Java 未加载 UnixPrincipal (Ubuntu 12)

java - 枚举如何管理泛型?

java - 比较 JAR 内容的优雅方式(以查找新的类和方法)

java - 从一组文件加载类