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/