Próbuję załadować plik JAR bezpośrednio do pamięci bez upuszczania go na dysk twardy. Próbowałem używać ClassLoader, ale pojawia się błąd.Załaduj tablicę bajtów pliku do pamięci
To jest mój kod:
niestandardowe classloader
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);
}
}
główna
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();
}
Wyjście
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)
Moim zamysłem jest zaszyfrować plik JAR, zaszyfrować go w środowisku wykonawczym i załadować bezpośrednio do pamięci.
Przepraszam za literówki, nie mówiłem dobrze po angielsku. Z góry dziękuję!
* "Próbuję załadować plik jar bezpośrednio do pamięci bez upuszczenie go na dysku twardym "* Gdzie są te bajty przychodzące ** od **? Adres URL? Skompilowany w pamięci? Pixies? * "Moim pomysłem jest zaszyfrowanie pliku JAR, odszyfrowanie go w środowisku wykonawczym i załadowanie bezpośrednio do pamięci." * To kiepski pomysł. Jeśli ma to na celu powstrzymanie kradzieży/inżynierii wstecznej kodów ", zatrzyma tylko najbardziej amatorów hakerów. To hakerzy z nawet umiarkowanymi umiejętnościami, o które musisz się martwić. –
Czy przeczytałeś kod źródłowy, który wkleiłem? jeśli przeczytałeś, że zobaczysz "fileToByteArray (" D: /App.jar ")". Powiedziałem, chcę załadować tablicę bajtów bezpośrednio do pamięci. Myślę, że dobrym pomysłem byłoby zabezpieczenie mojego kodu przed dekompilacją. Nie trzeba hakera, aby wiedzieć, jak dekompilować java. Dzięki. –
@SamuelPedrosa Być może ta odpowiedź pomoże: http://stackoverflow.com/a/6797331/1531054. Spróbuj rozpakować plik '.class' z' .jar', a następnie załaduj jego tablicę bajtów do programu ładującego klasy. –