我搜索了几个小时,却没有找到任何有关此的信息。
我有一个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=2或Loading Encrypted JarFile Via URLCassloader中获得启发