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

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

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

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

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

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

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


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

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

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



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

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

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

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

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

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

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


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

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

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

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

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

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

Править руками байт код - да ну нах... А кто это будет потом поддерживать, где гарантия, что случайно не запортил?
...
Рейтинг: 0 / 0
14.06.2016, 11:07
    #39255531
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять константу строки в скомпилированном файле.
Leonid KudryavtsevПравить руками байт код - да ну нах... А кто это будет потом поддерживать, где гарантия, что случайно не запортил?
Чем запортил, блин??? Исходников у него нет. Пересобирать он jar не собирается. Только если новая версия от вендора будет. А хранить в репозитории правленый бинарник или декомпилированый исходный код особой разницы нет.
...
Рейтинг: 0 / 0
14.06.2016, 11:30
    #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
14.06.2016, 12:31
    #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
14.06.2016, 12:52
    #39255637
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять константу строки в скомпилированном файле.
Лекомпильнул весь джарник и получил

авторDecompiled with CFR 0_114


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

yylex()
Unable to fully structure code
...
Рейтинг: 0 / 0
15.06.2016, 02:42
    #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
15.06.2016, 05:13
    #39256052
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять константу строки в скомпилированном файле.
...
Рейтинг: 0 / 0
16.06.2016, 02:43
    #39256729
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять константу строки в скомпилированном файле.
redwhite90Посоветуйте простой способ- Декомпилируем необходимый class-файл: меняем значение нужной нам константы...
- Добавляем класс в свой проект: имя класса, имя пакета должны быть такими, как в исп. JAR-нике!
- Исполняемый JAR-ник подключается как зависимость (остальные зависимости этого класса будут подтягиваться с исп. JAR-ника!)
- После сборки проекта, добавленный в проект класс "заменит" тот, что в исп. JAR-нике! (скорее всего на уровне ClassLoader-а)
- Профит
...
Рейтинг: 0 / 0
16.06.2016, 17:38
    #39257305
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять константу строки в скомпилированном файле.
1. Не надо автоматизировать разовые операции;
2. Проблема топикстартера в том, что декомпилятор не справляется с куском байт-кода.
...
Рейтинг: 0 / 0
16.06.2016, 19:46
    #39257369
rfq
rfq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять константу строки в скомпилированном файле.
redwhite90Нашли в каком .class файле эта константа.
...
в .class файле константа явно не хранится.

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


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