Sto provando a caricare un file jar direttamente nella memoria senza rilasciarlo sull'HDD. Ho provato a utilizzare ClassLoader, ma ottengo un errore.Caricare la matrice di byte del file nella memoria
Questo è il mio codice:
personalizzato programma di caricamento classi
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);
}
}
principale
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();
}
uscita
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)
La mia idea è di prendere un file jar crittografato, decrittarlo in fase di runtime e caricare direttamente in memoria.
Siamo spiacenti per gli errori di battitura, non ho parlato bene l'inglese. Grazie in anticipo!
* "Sto cercando di caricare un file jar direttamente nella memoria senza farla cadere al disco rigido "* Dove sono quei byte che arrivano ** da **? Un URL? Compilato in memoria? Pixies? * "La mia idea è di prendere un file jar crittografato, decrittarlo in runtime e caricarlo direttamente nella memoria." * Questa è una pessima idea. Se è inteso a fermare il furto/decodifica dei codici da parte delle persone, fermerà solo il più dilettante degli hacker. Sono gli hacker con capacità anche moderate di cui devi preoccuparti. –
Hai letto il codice sorgente che ho incollato? se hai letto che avrai visto "fileToByteArray (" D: /App.jar ")". Ho detto, voglio caricare l'array di byte direttamente nella memoria. E penso che sarebbe una buona idea proteggere il mio codice dalla decompilazione. Non serve a un hacker sapere decompilare java. Grazie. –
@ SamuelPedrosa Forse questa risposta aiuterà: http://stackoverflow.com/a/6797331/1531054. Prova a decomprimere il file '.class' da' .jar' e quindi alimentare il suo array di byte al programma di caricamento classi. –