powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Поменять константу строки в скомпилированном файле.
19 сообщений из 19, страница 1 из 1
Поменять константу строки в скомпилированном файле.
    #39255267
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дали исполняемый jar-ник. Просят поменять значение константы в одном из файликов.
Исходников нет.

Нашли в каком .class файле эта константа. Для этого декомпильнули всё, что внутри джарника нашли.

Теперь встаёт вопрос как подменить константу. в .class файле константа явно не хранится.

Перекомпильнуть только один файл явно не получится ибо будет ругань на импорты.
Декомпильнуть, подправить константу и компильнуть весь проект ?
А как ? я ж не знаю как он вообще собирался? какие либы там используются

Посоветуйте простой способ
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255277
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Попробуйте этот сервис: http://www.javadecompilers.com/

С уважением, Валентин
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255279
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Перекомпильнуть только один файл явно не получится ибо будет ругань на импорты.


Действительно ругается или это предположения?
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255282
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90, я поддерживаю постановку смены константы.

Такие тулзы как декомпиляторы (JD-GUI) захватывают слишком длинный стек
операций. Зачастую нам это не нужно когда в коде надо пофиксить константу

Код: java
1.
static final String password="passoword123" ; 



на что нибудь другое.

Формат classFile https://en.wikipedia.org/wiki/Java_class_file#Sections достаточно прозрачен
и документирован чтобы провернуть эту операцию
быстро. Без цикла пересборки.

Единственный вопрос на который я для себя пока не ответил - это вопрос
повторного юзания этой константы из пула констант где-то в других частях байткода.

Юзается или нет? Не знаю.
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255341
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikovredwhite90,

Попробуйте этот сервис: http://www.javadecompilers.com/

С уважением, Валентин

Этот сервис помогает только декомпилировать или я что-то не правильно понял?
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255343
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander A. Sakredwhite90Перекомпильнуть только один файл явно не получится ибо будет ругань на импорты.


Действительно ругается или это предположения?

ну я откровенно говоря не знаю как(javac с какими-то хитрыми ключами?). я в идее клацаю build->rebuild и всё компилится.

Тем более структура сорцов обычно не совпадает со структурой билда. Просветите меня)
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255406
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
unzip -d classes все-jar-ы
javac -d bin -cp classes src/хакнутая.java

P.S. Меняете DEMO с трю на фальсе?
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255491
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно добавить аспект ?!
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255507
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

А какого типа константа? Что-то тут никто не написал до сих пор про то что константы имеют свойство инлайниться. И тогда только полная перекомпиляция всех зависимостей.

Либо, как вариант, взять любой редактор байткода и править без всяких перекомпиляций.
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255527
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Oracle CC&B нормально декомпилировал классы, компилировал обратно. Мне кажется, опасения автора топика "не соберется" это от лукавого.

Править руками байт код - да ну нах... А кто это будет потом поддерживать, где гарантия, что случайно не запортил?
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255531
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevПравить руками байт код - да ну нах... А кто это будет потом поддерживать, где гарантия, что случайно не запортил?
Чем запортил, блин??? Исходников у него нет. Пересобирать он jar не собирается. Только если новая версия от вендора будет. А хранить в репозитории правленый бинарник или декомпилированый исходный код особой разницы нет.
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255549
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу числовых констант (integer). У меня есть предположение почему автор из не видит.

Некоторые быстрые команды прогрузки целого на стек от -1 до 5 идут отдельными байткодами
без операнда.

https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf
Код: java
1.
2.
3.
4.
5.
6.
7.
03 (0x03)
    iconst_0
04 (0x04)
    iconst_1
05 (0x05)
    iconst_2
...


Те - которые с операндом - скорее всего имеют длину = 1 опкод + sizeof(int) байтов и их надо курить
отдельно... опять-же помня о big-endian и помня об оптимизации.
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255607
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
Код: plaintext
1.
unzip -d classes все-jar-ы
javac -d bin -cp classes src/хакнутая.java

P.S. Меняете DEMO с трю на фальсе?
автор....
GUI.java:126: ';' expected
btnSelectTool.addActionListener((ActionListener)new /* Unavailable Anonymous Inner Class!! */);
^
100 errors

меняем одну строку на другую.
Код: java
1.
new MyClass("String to replace");
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39255637
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лекомпильнул весь джарник и получил

авторDecompiled with CFR 0_114


com.orsoncharts.util.json.parser.Yylex
----------------------------

yylex()
Unable to fully structure code
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39256041
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Код: plaintext
1.
2.
3.
GUI.java:126: ';' expected
        btnSelectTool.addActionListener((ActionListener)new /* Unavailable Anonymous Inner Class!! */);
                                                                                                       ^
100 errors
Я объяснял как компилировать код "не имея импортов", а не как компилировать код с синтаксическими ошибками.

P.S. Если строку заменить, то ищите то, что умеет редактировать class-файлы.
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39256052
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39256729
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Посоветуйте простой способ- Декомпилируем необходимый class-файл: меняем значение нужной нам константы...
- Добавляем класс в свой проект: имя класса, имя пакета должны быть такими, как в исп. JAR-нике!
- Исполняемый JAR-ник подключается как зависимость (остальные зависимости этого класса будут подтягиваться с исп. JAR-ника!)
- После сборки проекта, добавленный в проект класс "заменит" тот, что в исп. JAR-нике! (скорее всего на уровне ClassLoader-а)
- Профит
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39257305
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Не надо автоматизировать разовые операции;
2. Проблема топикстартера в том, что декомпилятор не справляется с куском байт-кода.
...
Рейтинг: 0 / 0
Поменять константу строки в скомпилированном файле.
    #39257369
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Нашли в каком .class файле эта константа.
...
в .class файле константа явно не хранится.

Константы хранятся явно в .class файлах, в constant pool'e.
Так вы нашли в каком .class файле эта константа хранится, или нет?
Сначала надо найти .class файл, затем подредактировать любым бинарным редактором.
Если константа числовая, то просто меняете байты. Если строковая, то еще надо скорректировать байты, содержащие длину строки.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Поменять константу строки в скомпилированном файле.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]