我搜索了几个小时,却没有找到任何有关此的信息。

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

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


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

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


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

但是现在,当我想运行Main.class时,我不知道如何执行此操作。我不想将文件保存到磁盘,只需将其保存在内存中即可。

关于如何从jarinputstream创建和运行内存中的jar的任何技巧?

谢谢!

最佳答案

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

请参阅ClassLoader文档,或者您可以从the JarClassLoader tutorial,或者可能是http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html?page=2Loading Encrypted JarFile Via URLCassloader中获得启发

10-01 09:37