文章“破解Java字节码加密”(javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html)解释了为什么使用自定义类加载器的类文件加密毫无意义,因为在某些时候你总是需要调用defineClass()来传递类将文件作为未加密的字节数组发送到JVM。
然而,我已经看到了使用稍微不同的方法的解决方案;该类由本机库解密,并通过findClass()方法作为java.lang.Class实例移交给JVM - 从不调用defineClass()。
这是否意味着这些解决方案没有这个弱点?当然,您始终可以通过在汇编程序级别使用调试程序来提取类文件,并且确定的黑客可以破坏任何保护。但至少这使得反编译比仅修补defineClass()以将未加密的.class文件转储到磁盘更困难。或者我忽略了什么?
答案 0 :(得分:1)
但至少这使得反编译比仅修补defineClass()以将未加密的.class文件转储到磁盘更困难。
只有一点点。不足以产生太大的不同。
或者我忽视了什么?
在某些时候,本机库必须解密字节码。修补本机库以便在那时进行snarf并不困难。反汇编和修补二进制库不是“火箭科学”。
答案 1 :(得分:0)
如果您要求存在本机库,则放弃平台独立性。此时,您可能需要调查gcj并直接编译为可执行文件。