java - Custom ClassLoader使用秘钥解密预加密类文件(已经用秘钥加密)

标签 java encryption classloader obfuscation decompiling

How can you protect/encrypt your Java classes?

我一直在阅读一些关于 java.lang.ClassLoader 的文章和一篇 PDF 文章 Understanding the Java ClassLoader建议我可以使用自定义类加载器来动态解密一些加密的类文件。在那里我发现了另一篇文章,认为使用自定义类加载器来保护您的代码毫无意义。关键是它最终必须调用 defineClass 方法。

也许这是我的无知,但如果我
1. 用 key 加密我的类(class)
2. 我的应用程序启动器接受用户的密码(密码是 key )
3. 我的应用程序启动器调用我的自定义类加载器
4. 然后我的自定义类加载器使用密码( key )解密加密文件
5.然后整个事情开始运行


这不是成功地保护了类文件不被反编译吗?

附言
我这样做只是为了好玩。

最佳答案

您已经回答了自己的问题:

您的解密类加载器仍然必须调用 defineClass。任何人都可以在他们自己的类加载器中启动您的应用程序启动器,只需向您的应用程序启动器提供一个 java.lang.ClassLoader 版本,它会写出传递给 defineClass 的任何内容。

没有办法围绕 defineClass(我想除了 native 代码)。

如果您非常担心您的类被反编译,您最好使用混淆器(ProGuard 或类似工具)可能是提前的 native 编译器(GCJ、Jet)。

关于java - Custom ClassLoader使用秘钥解密预加密类文件(已经用秘钥加密),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17061514/

相关文章:

java - 使用 Java 将可见标志设置为 .pst 文件内的电子邮件

java - 填充错误 - 在 Java 中使用 AES 加密并在 C 中使用解密时

java - Node.js 解密不适用于其他密码的密文

bash - 自动解密并运行加密的 bash 脚本而不将解密的文件保存到文件系统

java - 如何单元测试 getClassLoader() 返回 null

java - 在 java 类中,括号中的代码如何/何时执行?

java - Android按钮点击显示不同的Toast消息取决于点击次数

java - Spring继承不起作用

java - 通过java在运行时加载两个不同版本的jar

java - 以编程方式填充 JVM 永久代 (PermGen) 内存区域