Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обмануть JVM, надо подсунуть "фальшивый" класс 
:(
    Опции темы
lazycat
Дата 28.10.2010, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



Доброго времени суток всем!

Есть приложение. Исходный код недоступен. В какой-то момент времени в нем создается экземпляр класса A. Надо вместо A подсунуть ему класс B. В классе A и B одинаковый набор переменных и методов, но коды методов различаются.

Простейшее решение, заменить A.class другим файлом не проходит, так как A - из библиотеки rt.jar (увы!). 
Сделать загрузчик классов, который бы формировал не тот код не получается - метод defineClass - final.

Обращаюсь к гуру, как вы думаете, есть ли способ решить проблему, не уродуя JVM?

Кстати, по поводу последнего вопроса. Кто знает, где лежит исходный код JRE? Все ссылки на сервер Sun уже нерабочие (похоже Oracle ведет свою политику).

Заранее благодарен всем откликнувшимся.

PM MAIL   Вверх
dobrolub
Дата 28.10.2010, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



посмотри на следующие вещи:

javas -Xbootclasspath/p: myjar.jar

ставит твой jarик вперёд всех, но там могут быть ограничения на package name. Если такие есть, посмотри как их можно обойти. Глянь в исходники java.

посмотри на java.lang.instrument package . Он предназначен для переопределения классов. Но я не уверен, что можно переопределить класс из java.*

А что за задачка то? Может можно по другому подойти?

Это сообщение отредактировал(а) dobrolub - 28.10.2010, 05:04
PM   Вверх
COVD
Дата 28.10.2010, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

А что за задачка то?

Видимо, "вскрыть сейф".
PM MAIL   Вверх
Skipy
Дата 28.10.2010, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 6
Всего: 16



Цитата(lazycat @ 28.10.2010,  03:57)
Кстати, по поводу последнего вопроса. Кто знает, где лежит исходный код JRE? Все ссылки на сервер Sun уже нерабочие (похоже Oracle ведет свою политику).

Неделю назад скачивал исходники 6u23. Сейчас проверил: прямо на странице скачивания - http://www.oracle.com/technetwork/java/jav...oads/index.html - есть раздел Java SE 6 JDK Source Code. Нажимаете кнопку, попадаете сюда: http://download.java.net/jdk6/source/. Пожалуйста, полные исходники по лицензии JRL. 7-я версия тут же: http://download.java.net/jdk7/


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Kircul
Дата 28.10.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 6
Всего: 7



Насколько я понял это все продолжение данной темы.

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

В общем так или иначе желательно запускать с параметром -verbose и разобраться какие классы каким загрузчиком загрузились. Это поможет определиться подойдет ли данный метод в вашем случае.

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  pr.tar.gz 5,45 Kb
PM   Вверх
lazycat
Дата 28.10.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



Спасибо всем, кто откликнулся, но неожиданно проблема разрешилась сама собой (владелец программы дал исходные коды и извращаться уже не надо).

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

Еще раз спасибо всем!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.