1

我已经搜索了几个小时,但没有找到任何关于此的内容。

我有一个 jarinputstream,他读取一个加密的 jar 并解密它

JarInputStream jin = new JarInputStream(new CipherInputStream(in, dcipher));

我得到了确认的工作,因为当我这样做时它会打印出类名

while ((je = jin.getNextJarEntry()) != null) {
      jename = je.getName();

如果我打印出 jename,它将打印出类名和路径,因此我知道它可以很好地解密。

但是现在,当我想运行 Main.class 时,我不知道该怎么做。我不想将文件保存到磁盘,只需将其保存在内存中即可。

关于如何从该 jarinputstream 在内存中创建和运行 jar 的任何提示?

谢谢!

4

1 回答 1

1

您需要子类化ClassLoader并实现findClass()以获取给定类的解密数据并将其发送到super.defineClass().

请参阅ClassLoader文档,或者您可以从JarClassLoader 教程中获得一些灵感,或者可能是http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html?page=2通过 URLCassloader 加载加密的 JarFile

于 2013-02-07T14:12:39.123 回答