Как редактировать .class файлы из архивов Jar

  • Автор темы Автор темы accavit
  • Дата начала Дата начала

accavit

Пляшущий с бубном
Участник
Сообщения
133
Розыгрыши
0
Решения
2
Репутация
0
Реакции
22
Баллы
220
Хроники
  1. Interlude
Исходники
Отсутствуют
Сборка
Lucera 1.7
Собственно, перерыл весь интернет, и никак не пойму... как отредактировать вот эти переменные в файле .class
вц.webp

В программе Recaf даже редактировать могу, но не сохраняется при экспорте. Пробовал Эклипс - там вообще нет возможности редактировать (или я не нашел). В интернете нашел Java ByteCod Editor и DirtyJoe, у них получается редактировать только методы. А вот эти строчки переменные редактировать там возможности нет.
Подскажите, пожалуйста, чем и как редактировать эти переменные, выделенные на фото?
 
Собственно, перерыл весь интернет, и никак не пойму... как отредактировать вот эти переменные в файле .class
Посмотреть вложение 37913

В программе Recaf даже редактировать могу, но не сохраняется при экспорте. Пробовал Эклипс - там вообще нет возможности редактировать (или я не нашел). В интернете нашел Java ByteCod Editor и DirtyJoe, у них получается редактировать только методы. А вот эти строчки переменные редактировать там возможности нет.
Подскажите, пожалуйста, чем и как редактировать эти переменные, выделенные на фото?
class - это скомпилированный файл. Его редактирование не допустимо. Тебе нужно для начала декомпилировать сборку, потом отдельно собирать класс и добавлять его с заменой старого в свой jar файл через WinRar.
 
декомпил, правка, повторный компил.

но делать так не советую - декомпиляторы не идеальны и вполне могут внести какие нибудь неочевидные косяки, которые повторному компилу не помешают, но вот получившийся код будет работать криво.

З.Ы. можно еще попробовать на лету, при загрузке сервера, менять значения переменых, если они не final.
 
@Deom, @Gaikotsu, что-то я так и не понял... как в итоге заменить значения то? Чем редактировать? Достать и обратно засунуть файл class через WinRar я понял, а вот чем декомпилировать и редактировать?
 
@Deom, @Gaikotsu, что-то я так и не понял... как в итоге заменить значения то? Чем редактировать? Достать и обратно засунуть файл class через WinRar я понял, а вот чем декомпилировать и редактировать?
у вас готовый класс в редакторе. копируем содержимое создаем файл с таким же названием и расширением .java редактируем ну и потом пытаемся скомпилить.
 
Ну если нужно просто поменять значения переменных, то в данном случае, в другом классе из датапака, который запускается и компилится при запуске серва просто делаем типа
Код:
MailBBSManager.EXPOSTB_COIN = 57;
Ведь эти переменные public и значит видны извне
 
@LifeGame32, сделал так, отредактировал, попытался скомпилить с помощью javac и вот что выдает:
fef.webp
Файлы в итоге остались без изменений
 
@Gaikotsu, про датапак и про "при запуске сервера", к сожалению, ничего не понял :rolleyes:
 
@Gaikotsu, про датапак и про "при запуске сервера", к сожалению, ничего не понял :rolleyes:
мозги чуть-чуть напрягать полезно, особенно когда тебе готовые методы подсказывают), но если в двух словах - тебе нужен открытый скрипт в сборку (ЛЮБОЙ СКРИПТ В КОТОРЫЙ ТЫ ПИХАЕШЬ ЭТОТ public) - с измененным значением выше, и при загрузке сервера твой скрипт будет значение заменять на нужное, и будет грузиться не то что скомпилено в основном классе.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
мозги чуть-чуть напрягать полезно, особенно когда тебе готовые методы подсказывают), но если в двух словах - тебе нужен открытый скрипт в сборку (ЛЮБОЙ СКРИПТ В КОТОРЫЙ ТЫ ПИХАЕШЬ ЭТОТ public) - с измененным значением выше, и при загрузке сервера твой скрипт будет значение заменять на нужное, и будет грузиться не то что скомпилено в основном классе.
сейчас бы тратить время на люцеру, дык еще и без сурса
 
@Deom, @Gaikotsu, что-то я так и не понял... как в итоге заменить значения то? Чем редактировать? Достать и обратно засунуть файл class через WinRar я понял, а вот чем декомпилировать и редактировать?
По поводу декомпила есть статья на хабре
 
@LifeGame32, сделал так, отредактировал, попытался скомпилить с помощью javac и вот что выдает:
Посмотреть вложение 37914
Файлы в итоге остались без изменений
javac -classpath ************.jar -Xlint:unchecked -encoding utf8 **********.java

Также лучше используй 2 декомпила (есть онлайн), они могут отличаться от того, что ты видишь.

Например ->
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Собственно, перерыл весь интернет, и никак не пойму... как отредактировать вот эти переменные в файле .class
Посмотреть вложение 37913

В программе Recaf даже редактировать могу, но не сохраняется при экспорте. Пробовал Эклипс - там вообще нет возможности редактировать (или я не нашел). В интернете нашел Java ByteCod Editor и DirtyJoe, у них получается редактировать только методы. А вот эти строчки переменные редактировать там возможности нет.
Подскажите, пожалуйста, чем и как редактировать эти переменные, выделенные на фото?
ты не соберешь обратно этот фаил так как при декомпиляции отвалятся некоторые куски кода которые нужно будет восстанавливать саморучно
 
сейчас бы тратить время на люцеру, дык еще и без сурса
Для чувака который понятия не имеет что такое .class вполне пойдет как для начала. Все когда-то свои пути ковыряния начинали с подобного)
 
Теперь вообще все накрылось тазом...
Геймсервер при запуске выдает:

Unrecognized VM option 'UseFastAccessorMethods'
Error: Could not create the Java Virtual Machine.

Что делать? Удалить JDK?

@Argest, честно говоря, скачал сборку в шаре по запросу "создать свой сервер л2". То, что это оказалась сборка Lucera 1.7 я узнал лишь тогда, когда начал шерстить этот форум. Потратил больше недели на настройку сборки и уже как-то не хотелось искать другую сборку и заново всё перенастраивать... Пока в планах добить люцеру, а в следующий раз уже буду получше думать над выбором сборки :)
 
Последнее редактирование модератором:
Ежики плакали, но продолжали жрать кактус...

Брать сборку без исходников, если в планах что-то в ней менять - ну такое себе...
 
  • Ха-ха-ха
Реакции: Rolo
@Gaikotsu, так я же говорю, брал сборку по запросу "создать свой сервер л2" ))) По гайду 2014 года с нулём знаний о создании серверов. Неделю самостоятельно ковырялся, а потом уже пошел сюда за ответами на непонятные мне вопросы :)
 
@accavit, если всего неделю - много сделать не успели, лучше пока не поздно взять что угодно другое (в рамках разумного и с пометкой "для тренировки", а не лайва) с исходниками, всяко продуктивней, чем обучаться на перспективу страдать ерундой с декомпилом.
 
@Rolo, так вроде с декомпилом разобрался... Только вот геймсервер теперь вроде пытается запуститься через JDK и не может:

Unrecognized VM option 'UseFastAccessorMethods'
Error: Could not create the Java Virtual Machine.

Удаляю JDK - всё работает. Вот думаю, может для компила вместо javac использовать что-то другое?
 
UseFastAccessorMethods опция и была в JDK 9. Вам необходимо удалить эту опцию из конфигурации запуска.
 
Назад
Сверху Снизу