4

我正在尝试使用从 web 加载 jar 文件URLClassLoader,一切正常,但所有加载的类都保存在 Windows 临时目录中,并且可以复制以进行反混淆,直到我调用classLoader.close();这反过来会导致程序ClassNotFoundException

我可以加载类而不保存到磁盘吗?

(仅记忆)另一种解决方案加密 jar 类,并编写将解密类的自定义ClassLoader,但我没有找到任何示例。

我试图寻找有关此主题的文档或文章,但一无所获:(

请告诉我是否可以实施以及我可以在哪里获取有关该主题的材料?谢谢!

4

2 回答 2

2

您确实意识到任何可以访问您正在运行代码的机器的人都可以始终掌握将执行自定义类加载的代码,对吗?这意味着他们可以简单地反编译该类本身并使其写出解密的类,从而使整个练习变得毫无意义。诚然,大多数人不知道该怎么做,但这是可能的。

我的建议是混淆代码,如果你真的必须这样做的话。担心人们掌握您的库不会让您走得太远,因为您几乎无法保护它不被反编译,除非您使用会混淆反编译器(或功能jad等)的混淆代码结构不支持,从而导致它们产生严重损坏的反编译代码)。

任何有足够知识和适当动机的人都会想办法做到这一点。

于 2014-03-24T14:07:16.397 回答
1

创建您自己的通过网络检索类的类加载器非常简单。在Classloader的 Java 文档示例中:

class NetworkClassLoader extends ClassLoader {
     String host;
     int port;

     public Class findClass(String name) {
         byte[] b = loadClassData(name);
         return defineClass(name, b, 0, b.length);
     }

     private byte[] loadClassData(String name) {
         // load the class data from the connection
          . . .
     }
 }

您只需要实施loadClassData,其他一切都会为您处理。在该loadClassData功能中,您可以进行加密或其他任何操作。

于 2014-03-24T14:14:09.237 回答