我编写了一个 Java 应用程序,并计划在线发布它。每个版本都将使用我制作的 secret 序列 key 锁定。
我需要从反编译器等保护我的 jar 文件。这是我到目前为止所做的:
- 用户在表格中输入他的序列号
- 序列号通过 php 脚本发送到我的开发服务器
- 脚本生成一个新的 jar bin 文件,该文件以 AES 128 加密
- 我的“加载器”以字节形式下载 jar 文件并对其进行解密。
- 它调用主要方法。
- 用户可以随心所欲地使用该应用
- 用户关闭应用
- 清除缓存,一切返回到步骤 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/