Можно ли изменить rt.jar? - PullRequest
       12

Можно ли изменить rt.jar?

3 голосов
/ 04 февраля 2011

Я создаю приложение, которое запускает JVM (используя копию JRE).Если я отредактирую rt.jar, например, чтобы удалить функциональность, к которой у пользователей не должно быть доступа, это каким-то образом нарушит JRE?

РЕДАКТИРОВАТЬ: приложение включает в себя загрузку кода на компьютер пользователя, поэтому будетограничение кода, а не пользователя.Я, наверное, должен был это уточнить.

Ответы [ 5 ]

8 голосов
/ 04 февраля 2011

Есть большая вероятность, что вы сломаете что-то, что не будет заметно до времени выполнения.

Но, возможно, более важной является проблема лицензирования: ваше приложение поставляет свою собственную версиюJRE, что вам разрешено делать, за исключением того, что вы не можете изменять JRE, которую вы распространяете, согласно лицензии J2SE :

[...] (a)Вы распространяете Программное обеспечение, полное и немодифицированное и поставляемое в комплекте как часть Ваших апплетов и приложений («Программы»),

Также сомнительно, что подразумевается под «удалением функциональности, к которой у пользователей не должно быть доступа».к».Ваше приложение выполняется в контексте учетной записи пользователя, и все функции, которые вы удалили из JRE:

  • Если ОС разрешает это конкретное действие в контексте сеанса этого пользователя, то естьдругой способ сделать это - следовательно, вы находитесь в том же положении, в котором находились, прежде чем связываться с rt.jar .Ваш пользователь может просто сделать системный вызов.

  • Если ОС не разрешает это действие в контексте сеанса пользователя, то JVM не сможет это сделать.независимо от того, присутствуют ли классы или нет, так что весь вопрос спорен.

5 голосов
/ 04 февраля 2011

Обычно лучший способ удалить функциональность - использовать SecurityManager. Это позволяет вам контролировать, к чему можно получить доступ или выполнить какое-либо действие.

1 голос
/ 04 февраля 2011

почему вы спрашиваете, вы можете нарушить какое-то соглашение / лицензию, кроме того, что это нормально.

Я так не делаю, но изменяю classpath загрузчика начальной загрузки, чтобы загружать мои классы до rt.jar и т. Д. Это законно:)

В конце: Получение NoClassDefFoundError не крутоневажно, как ты на это смотришь.

1 голос
/ 04 февраля 2011

Полностью зависит от того, что вы «удаляете».Но это возможно.Пока вы ничего не нарушаете, удалите зависимости и т.д ...

И если вы хотите что-то сделать с точки зрения безопасности.Как вы можете гарантировать, что вы и только вы имеете полный контроль над пользователями JRE?

И если это так.Какую выгоду вы бы сделали, что вы не можете сделать в своем приложении?

Но это возможно и обоснованная мысль по некоторым причинам.Но они в основном бенчмаркинг, разработка, отладка.Например, дамп незашифрованного байт-кода

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

0 голосов
/ 04 февраля 2011

Если вы спрашиваете, все ли в порядке с законом, я не знаю, но есть вероятность, что это не так. (Если вы намереваетесь продать свой продукт, то есть. Для исследовательских или рекреационных целей это, вероятно, так.)

Это технически нормально? Если вы знаете, что делаете, это может быть.

Есть ли смысл? Насколько сложно клиенту установить другую виртуальную машину или просто заменить взломанный rt.jar на незарегистрированный?

И на более абстрактном уровне: стоит ли обращаться с вашими клиентами как с потенциальными преступниками? Предполагать, что первое, что они собираются попробовать, это взломать вашу систему. (Имейте в виду, я не знаю ваших клиентов, так что вы могли бы быть правы, но вопрос все же стоит задать.)

...