Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ... / 18 сообщений из 18, страница 1 из 1
28.01.2015, 17:42
    #38865781
Маслов Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса внести правки в бинарный файл.
Собственно есть условие, например:
Код: java
1.
if (Thread.activeCount() > i)


мне нужно поменять больше на меньше.

Возможно такое сделать?


Всё, что мы видим - это лишь иллюзия ...
...
Рейтинг: 0 / 0
28.01.2015, 17:50
    #38865786
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
C:\2>type x.java
public class x
{
    public static void main(String args[])
    {
        int a = 1, b = 2;
        if (a > b)
        System.out.println("Hello World!");
    }
}

... компилируем варианты с > и < ...

C:\2>fc /b x_gt.class x_lt.class
Сравнение файлов x_gt.class и X_LT.CLASS
00000187: A4 A2

C:\2>
...
Рейтинг: 0 / 0
28.01.2015, 17:51
    #38865788
Маслов Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
RWolf
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
C:\2>type x.java
public class x
{
    public static void main(String args[])
    {
        int a = 1, b = 2;
        if (a > b)
        System.out.println("Hello World!");
    }
}

... компилируем варианты с > и < ...

C:\2>fc /b x_gt.class x_lt.class
Сравнение файлов x_gt.class и X_LT.CLASS
00000187: A4 A2

C:\2>


Эхх, если бы все так просто....
...
Рейтинг: 0 / 0
28.01.2015, 17:54
    #38865793
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Маслов АндрейЭхх, если бы все так просто....Вам объяснили что на что заменить любым шестнадцатиричным редактором.
Поиск смещения оставили в качестве домашнего упражнения.
...
Рейтинг: 0 / 0
28.01.2015, 18:17
    #38865827
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Маслов Андрей,

ASM http://asm.ow2.org/index.html , там в примеры есть что-то похожее
...
Рейтинг: 0 / 0
28.01.2015, 19:10
    #38865885
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Маслов АндрейJava Decompiler восстанавливает код класса и мне нужно без компиляции класса внести правки в бинарный файл.
Тут... как-то по смыслу странно. Лучше-бы поискать свойстко или константу где i инициализировалось.

Да и практика какая-то порочная. Байты менять. Это даже не реверс-инжинеринг а просто "стрельба
себе в ногу".
...
Рейтинг: 0 / 0
28.01.2015, 23:35
    #38866052
Маслов Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
maytonМаслов АндрейJava Decompiler восстанавливает код класса и мне нужно без компиляции класса внести правки в бинарный файл.
Тут... как-то по смыслу странно. Лучше-бы поискать свойстко или константу где i инициализировалось.

Да и практика какая-то порочная. Байты менять. Это даже не реверс-инжинеринг а просто "стрельба
себе в ногу".

Это был первый шаг, я нашел, но там всего один байт. Мне удалось установить число 0x79, если больше, то он рассматривает значение, как отрицательное число. Поэтому пришла мысль поискать другой способ. Например поменять условие...
...
Рейтинг: 0 / 0
28.01.2015, 23:36
    #38866053
Маслов Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Basil A. SidorovМаслов АндрейЭхх, если бы все так просто....Вам объяснили что на что заменить любым шестнадцатиричным редактором.
Поиск смещения оставили в качестве домашнего упражнения.

Если таких байтов больше 1000?! Долгое домашнее задание.
...
Рейтинг: 0 / 0
29.01.2015, 05:44
    #38866149
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Маслов Андрейmaytonпропущено...

Тут... как-то по смыслу странно. Лучше-бы поискать свойстко или константу где i инициализировалось.

Да и практика какая-то порочная. Байты менять. Это даже не реверс-инжинеринг а просто "стрельба
себе в ногу".

Это был первый шаг, я нашел, но там всего один байт. Мне удалось установить число 0x79, если больше, то он рассматривает значение, как отрицательное число. Поэтому пришла мысль поискать другой способ. Например поменять условие...
Был кастинг в byte (с диапазоном от -128 до 127) на каком-то этапе.

Слушай. Игры с константами до добра не доведут.
Во первых компиллятор их расшаривает для других целей. Тоесть (теоретически) ты правил константу не для этого кода
а для множеста логик где она использовалась. Во вторых в JVM есть магические константы (-1,0,1,2....8)
которые нигде не декларируются но имеют краткие опкоды прогрузки констант на стек. И ты нифига
никогда не догадаешся какую константу они грузят ибо опкод не содержит в себе ее саму.

По этой теме можешь курить JVM instruction set в разделе iconst_<i>

Тоесть подмена байтов в Java-байткоде с целью достижения какого-либо эффекта имеет
еще меньше надежд на успех чем в бинарнике собраном ассемблером для x86.
...
Рейтинг: 0 / 0
29.01.2015, 09:58
    #38866285
Маслов Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
maytonМаслов Андрейпропущено...


Это был первый шаг, я нашел, но там всего один байт. Мне удалось установить число 0x79, если больше, то он рассматривает значение, как отрицательное число. Поэтому пришла мысль поискать другой способ. Например поменять условие...
Был кастинг в byte (с диапазоном от -128 до 127) на каком-то этапе.

Слушай. Игры с константами до добра не доведут.
Во первых компиллятор их расшаривает для других целей. Тоесть (теоретически) ты правил константу не для этого кода
а для множеста логик где она использовалась. Во вторых в JVM есть магические константы (-1,0,1,2....8)
которые нигде не декларируются но имеют краткие опкоды прогрузки констант на стек. И ты нифига
никогда не догадаешся какую константу они грузят ибо опкод не содержит в себе ее саму.

По этой теме можешь курить JVM instruction set в разделе iconst_<i>

Тоесть подмена байтов в Java-байткоде с целью достижения какого-либо эффекта имеет
еще меньше надежд на успех чем в бинарнике собраном ассемблером для x86.

не все так плохо 8). Подмена прекрасно работает, во всяком случае, для моей ситуации. А за совет спасибо 8).
Тут другая проблема, куда более трудная. Я никогда с таким не сталкивался и понятия не имею, как такое сделать. См. ссылку
...
Рейтинг: 0 / 0
29.01.2015, 13:39
    #38866641
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Лечение битого zip-архива это практически не программистская задача.
Есть масса утилит (в свободном доступе) которые это делают.

Какая здесь точка приложения для Java разработки - непонятно.
Если стандартный java.util.zip обругался на формат файлов то
видимо так и надо. А владельцы торрент-раздач как будто
издеваются над нами. Специально фабрикуют битые архивы.
Хуже того это длинное имя чаще замаскировано под вирус.
Поэтому луче его вообще не открывать.

Так оно жить спокойнее будет.
...
Рейтинг: 0 / 0
29.01.2015, 16:48
    #38866938
Маслов Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
maytonЛечение битого zip-архива это практически не программистская задача.
Есть масса утилит (в свободном доступе) которые это делают.

Какая здесь точка приложения для Java разработки - непонятно.
Если стандартный java.util.zip обругался на формат файлов то
видимо так и надо. А владельцы торрент-раздач как будто
издеваются над нами. Специально фабрикуют битые архивы.
Хуже того это длинное имя чаще замаскировано под вирус.
Поэтому луче его вообще не открывать.

Так оно жить спокойнее будет.
Железная логика 8)
Но все-таки мне нужно каким-то образом это имя заменить, либо текст в этом файле
...
Рейтинг: 0 / 0
30.01.2015, 10:12
    #38867449
rfq
rfq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Маслов Андрей,
Надо взять пару ассемблер-дизассемблер, например, из https://wiki.openjdk.java.net/display/CodeTools/Chapter 2 .
Дизассемблируете, правите текст, и обратно компилируете в байткод.
...
Рейтинг: 0 / 0
30.01.2015, 10:16
    #38867454
Маслов Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
rfqМаслов Андрей,
Надо взять пару ассемблер-дизассемблер, например, из https://wiki.openjdk.java.net/display/CodeTools/Chapter 2.
Дизассемблируете, правите текст, и обратно компилируете в байткод.
Спасибо, но это не так просто сделать после обфускатора.
...
Рейтинг: 0 / 0
30.01.2015, 10:20
    #38867459
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Маслов Андрей,

Так Вы декомпилировали файл нашли место, т.е. метод, далее с помощью AspectJ замените(модифицируете) этот метод в классе на свой переписанный и сразу можете записать в jar. И не надо беспокоится о длинных именах, AspectJ может загрузить класс из архива, модифицировать и снова записать в архив.
...
Рейтинг: 0 / 0
30.01.2015, 12:58
    #38867670
Маслов Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
0FDМаслов Андрей,

Так Вы декомпилировали файл нашли место, т.е. метод, далее с помощью AspectJ замените(модифицируете) этот метод в классе на свой переписанный и сразу можете записать в jar. И не надо беспокоится о длинных именах, AspectJ может загрузить класс из архива, модифицировать и снова записать в архив.
а если имя файла класс 262 симовла?
...
Рейтинг: 0 / 0
30.01.2015, 13:16
    #38867691
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Маслов Андрей,

Какая разница, ведь на диске не создается такой файл? а в архиве. есть там параметр outjar, как-то так, если использовать ajc.
...
Рейтинг: 0 / 0
30.01.2015, 17:05
    #38868034
rfq
rfq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ...
Маслов АндрейСпасибо, но это не так просто сделать после обфускатора.
А в чем проблема? Вы пробовали и у вас возникли трудности? Какие? Не буквенно-цифровые идентификаторы? Но jasm вроде должен с этим справляться, а jcoder и подавно.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java Decompiler восстанавливает код класса и мне нужно без компиляции класса ... / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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