How can you protect/encrypt your Java classes?
我一直在阅读有关java.lang.ClassLoader的一些文章,一篇PDF文章Understanding the Java ClassLoader建议我可以使用自定义类加载器动态解密一些加密的类文件。在那里,我发现另一篇文章认为使用自定义类加载器保护代码毫无意义。关键是它最终必须调用defineClass方法。
也许这是我的无知,但如果我是什么
1.用密钥加密我的班级
2.我的app启动器接受用户的密码(密码是密钥)
3.我的app启动器调用我的自定义类加载器
4.然后我的自定义类加载器用密码(密钥)
解密加密文件
5.然后整个事情开始运行
这不会成功地保护类文件免受反编译吗?
P.S。
我只是为了好玩而试图这样做。
答案 0 :(得分:0)
您已经回答了自己的问题:
您的解密类加载器仍然必须调用defineClass。任何人都可以在他们的自己的类加载器中启动你的应用程序启动器,只需将你的应用程序启动器交给java.lang.ClassLoader版本,该版本将写出传递给defineClass的任何内容。
在defineClass周围有无法(除了本机代码,我想)。
如果您对您的类被反编译感到非常担心,那么最好使用混淆器(ProGuard等)或提前编译本机(GCJ,Jet)。