Возможно ли создать собственный пользовательский загрузчик классов в java. Если да, то пожалуйста, направляйте меня. Вместо класс запутывания я хочу изменить в файле класс, так что не может быть отменен любым инструментомПользовательский загрузчик классов в Java
ответ
Вы можете использовать некоторые запутывании инструменты, как ProGuard.
Самонаписанный ClassLoader должен быть помещен в стандартный файл .class, который JVM может загрузить. И тогда вы можете защитить погрузчик от обратной инженерии.
Не делайте этого самостоятельно. Написание «безопасного» кода, не зная криптографических алгоритмов, приведет к ошибочному коду небезопасного кода.
Это не проблема, потому что криптография никак не может помочь. (Невозможно сохранить секретный ключ) – SLaks
Я просто хотел объяснить, что большинство разработчиков, которые считают, что они делают что-то более безопасное, добавляя обфускацию или «безопасность от неизвестности», делают программу более подверженной ошибкам и менее безопасной. –
Вы, конечно, правы, но в этой ситуации неизвестность - единственный выбор. Если он достаточно мал, злоумышленники могут даже слишком лениться, чтобы выполнить работу, необходимую для обратной инженерии ручной системы. – SLaks
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
*
* Simple custom class loader implementation
*
*/
public class CustomClassLoader extends ClassLoader {
/**
* The HashMap where the classes will be cached
*/
private Map<String, Class<?>> classes = new HashMap<String, Class<?>>();
@Override
public String toString() {
return CustomClassLoader.class.getName();
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
if (classes.containsKey(name)) {
return classes.get(name);
}
byte[] classData;
try {
classData = loadClassData(name);
} catch (IOException e) {
throw new ClassNotFoundException("Class [" + name
+ "] could not be found", e);
}
Class<?> c = defineClass(name, classData, 0, classData.length);
resolveClass(c);
classes.put(name, c);
return c;
}
/**
* Load the class file into byte array
*
* @param name
* The name of the class e.g. com.codeslices.test.TestClass}
* @return The class file as byte array
* @throws IOException
*/
private byte[] loadClassData(String name) throws IOException {
BufferedInputStream in = new BufferedInputStream(
ClassLoader.getSystemResourceAsStream(name.replace(".", "/")
+ ".class"));
ByteArrayOutputStream out = new ByteArrayOutputStream();
int i;
while ((i = in.read()) != -1) {
out.write(i);
}
in.close();
byte[] classData = out.toByteArray();
out.close();
return classData;
}
/**
* Simple usage of the CustomClassLoader implementation
*
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException,
NoSuchMethodException, SecurityException, IllegalArgumentException,
InvocationTargetException
{
CustomClassLoader loader = new CustomClassLoader();
// This class should be in your application class path
Class<?> c = loader.findClass("net.codeslices.test.TestClass");
Object o = c.newInstance();
Method m = c.getMethod("toString");
System.out.println(m.invoke(o));
}
}
- 1. Пользовательский загрузчик классов в java по-разному
- 2. Пользовательский загрузчик классов в Constructor.newInstance
- 3. PHP пользовательский загрузчик классов
- 4. «NegativeArraySizeException» - Пользовательский загрузчик классов
- 5. Пользовательский загрузчик классов и Java Agent
- 6. Что такое пользовательский загрузчик классов
- 7. переопределение Java загрузчик классов
- 8. пользовательский загрузчик классов для android?
- 9. Java Загрузчик классов сложности
- 10. Приоритет Загрузчик классов в Java
- 11. Использовать пользовательский загрузчик классов во время компиляции
- 12. Почему нам нужен пользовательский загрузчик классов в java
- 13. Как добавить пользовательский загрузчик классов в ObjectMapper?
- 14. Загрузчик классов модели делегирования
- 15. Нужен Java-системный загрузчик классов
- 16. Пользовательский загрузчик классов для Hibernate-mapping
- 17. Переопределить загрузчик классов в OSGi?
- 18. Как написать пользовательский загрузчик классов для загрузки классов из банки?
- 19. Что такое изолированный загрузчик классов в Java?
- 20. Мой собственный загрузчик классов?
- 21. литье через загрузчик классов?
- 22. Tomcat пользовательский загрузчик классов не удалось загрузить некоторые банки
- 23. Maven предоставил scope и загрузчик классов Java
- 24. Java-загрузчик классов с тем же банком
- 25. Пользовательский загрузчик приложений BlackBerry
- 26. Пользовательский системный загрузчик классов не используется всеми классами
- 27. Пользовательский загрузчик классов для полного применения, включая системные классы
- 28. Предотвратите загрузчик классов Java Applet от попыток удаленного извлечения классов
- 29. Как загрузчик классов загружает ресурсы?
- 30. Как установить мой пользовательский загрузчик классов по умолчанию?
Просьба провести исследование, прежде чем просить разрешения. –
Если байт-код не может быть понят «каким-либо инструментом», JVM не сможет его прочитать, поэтому он не будет работать. – dkatzel
. Все, что вам нужно сделать, - это прочитать байт-код, который ваш пользовательский загрузчик классов дает JVM , – SLaks