I am trying to load a jar file directly into memory without dropping it to the hard drive. I tried using ClassLoader, but I am getting an error.
This is my code:
Custom Class Loader
public class CLS_ClassLoader extends ClassLoader { private byte[] bArrData; public CLS_ClassLoader(ClassLoader parent, byte[] bArrData) { super(parent); this.bArrData = bArrData; } public Class<?> loadClass(String name) throws ClassNotFoundException { return defineClass(name, bArrData, 0, bArrData.length); } }
home
ClassLoader tParentClsLoader = CLS_ClassLoader.class.getClassLoader(); CLS_ClassLoader tClsLoader = new CLS_ClassLoader(tParentClsLoader, fileToByteArray("D:/App.jar")); Class<?> tClass = null; try { tClass = tClsLoader.loadClass("pkg_main.CLS_Main"); } catch (ClassNotFoundException e) { e.printStackTrace(); }
Output
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1347093252 in class file pkg_main/CLS_Main at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at pkg_main.CLS_ClassLoader.loadClass(CLS_ClassLoader.java:20) at pkg_main.CSL_Main.main(CSL_Main.java:27)
My idea is to take an encrypted jar file, decrypt it at runtime, and load directly into memory.
Sorry for the typos, I did not speak English well. Thanks in advance!
source share