Java - Как использовать динамическую загрузку JAR? - PullRequest
3 голосов
/ 29 ноября 2011

Я работаю над Java-приложением с закрытым исходным кодом, которое анализирует JAR-файлы.Поскольку java можно легко декомпилировать, а запутывание действительно не представляет особой проблемы, я хочу предоставить онлайн-сервис, который будет запускать приложение на моем сервере и возвращать его результат, как у fernflower, здесь: www.reversed-java.com/fernflower/.

Проблема в том, что я боюсь, что это может привести к катастрофе, когда мое приложение загрузит любые потенциально опасные банки на сервер, даже если я никогда не запускаю банки.Все, что я делаю, это загружаю их, используя URLClassLoader и JarInputStream .

Может ли jar загружать переопределенные классы в моем исходном приложении для выполнения вредоносного кодаили испортить мою программу?

Каковы риски в динамически загружаемых банках?

1 Ответ

8 голосов
/ 29 ноября 2011

Каковы риски при динамической загрузке банок?

Нет рисков динамической загрузки как таковых . Риски - это риски запуска ненадежного кода. Если вы сделаете это, не приняв надлежащих мер предосторожности, вы рискуете полностью взломать вашу машину.

Если вы собираетесь делать такие вещи, по крайней мере, вы должны запускать ненадежный код в песочнице, чтобы он не делал ничего потенциально опасного. Например, вам нужно заблокировать чтение и запись локальных файлов, запуск внешних процессов, использование отражения, доступ к системным свойствам и т. Д. И вы можете остановить его, создавая потоки, сокеты и другие вещи, которые потребляют системные ресурсы.

Наконец, вам нужно рассмотреть случай, когда у некоторого ненадежного JAR есть метод, который является бесконечным циклом. Эта проблема не может быть решена с помощью песочниц безопасности. Действительно, единственный защищенный от бомб способ избавиться от зацикленного потока - это выйти из JVM и перезапустить его.

Может ли jar im загружать переопределенные классы в моем исходном приложении, чтобы выполнить вредоносный код, или испортить мою программу?

Я не думаю, что это может легко переопределить ваши классы, но есть много других способов для ненадежного кода "испортить" ваш мир; смотри выше. (И если ненадежный код может выполнять рефлексивный код, то он может переопределить ваши классы, возиться с частными структурами данных загрузчика классов.)

...