Как с генерировать исходный код из байтов?

122
21 декабря 2020, 02:40

Имеется массив из байтов одной Java программы. Как мне получить её исходники в нормальном Java виде, с помощью ASM может как-то ?

Вот так выглядит массив (он намного больше, просто не вмещается сюда):

public static int[] classLoaderInBytes = {
            0xCA,0xFE,0xBA,0xBE, 0x00,0x00,0x00,0x34, 0x01,0x40,0x0A,0x00, 0x15,0x00,0x9F,0x07,
            0x00,0xA0,0x07,0x00, 0xA1,0x0A,0x00,0x03, 0x00,0x9F,0x08,0x00, 0xA2,0x0A,0x00,0xA3,
            0x00,0xA4,0x0A,0x00, 0x03,0x00,0xA5,0x09, 0x00,0xA6,0x00,0xA7, 0x08,0x00,0xA8,0x0A,
            0x00,0x03,0x00,0xA9, 0x08,0x00,0xAA,0x0A, 0x00,0x02,0x00,0xAB, 0x08,0x00,0xAC,0x0A,
            0x00,0x02,0x00,0xAD, 0x0A,0x00,0x02,0x00, 0xAE,0x0A,0x00,0x15, 0x00,0xAF,0x0B,0x00
};

Конвертирую в байт массив:

byte[] bytes = new byte[classLoaderInBytes.length];
for(int i = 0; i < bytes.length; i++){
     bytes[i] =  (byte)classLoaderInBytes[i];
}
Answer 1

Хорошо бы сначала разобраться что именно хранится в массиве: один там класс или несколько.

Если там один .class файл без зависимостей, то можно попробовать сделать так:

  1. Записать байты в .class файл (byte[] to file in Java).
  2. Декомпилировать его одним из декомпиляторов Java, например JAD.

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

READ ALSO
Login Filter вопрос

Login Filter вопрос

Написал Логин Фильтр, который не будем пропускать не авторизованного юзера :

118
POST PACH в 1С из JAVA/Аndroid

POST PACH в 1С из JAVA/Аndroid

Пишу небольшое приложение под android для инвенторизации

132
Как отформатировать число jquery

Как отформатировать число jquery

Есть сумма 114358Эту цифру получаю так: 100 000 * 1

129
Каждой строке в таблице свой фон. jquery

Каждой строке в таблице свой фон. jquery

Имеется таблица с входными параметрами

94