Как расшифровать сообщение в байтах

Обновлено: 05.07.2024

Байткод – аналог машинного кода для JVM. Он получается в результате компиляции исходного .java файла и хранится в .class файле. Анализ байткода иногда может помочь в исследовании бага, или лучше настроить производительность. Он необходим для отладки с инструментами динамической манипуляции байткодом, вроде ASM или BCEL.

Это бинарный код, и открыть его простым текстовым редактором не выйдет. В пакете утилит JDK доступен инструмент javap . Это утилита командной строки для чтения .class файлов.

Аргументами передается полное имя класса, и classpath в котором этот класс искать. По умолчанию отображаются только объявления публичных членов. Ключ -p добавит приватные методы и поля; -v выведет дополнительные метаданные; -c отобразит сам байткод – скомпилированную реализацию методов.

Теперь они и у вас есть. В них написан какой-то осмысленный текст. Предположительно русский (выдернуто из игры). Байты как я понял перевернуты. Что это за кодировка такая, что там написано и, чёрт возьми, кто тот герой, что сможет объяснить как их правильно конвертнуть в этом случае?


Откуда такая уверенность, что тут просто что то написано, а не зашифровано каким нибудь хитрым шифром. уж больно разброс значений ни на какую кодировку не похож. половина в латинской части ASCII половина в русской. Хотя конечно соглашусь, байты не случайные, совсем мелких значений вообще нет

В общем моя уверенность вот на каких слонах держится: 1) перед этими байтами явно было указано число 100, такая закономерность повторяется дальше через эти 100 байт, и так на протяжении всего файла. Так обычно помечают строки. 2) сам файл называется description.sdb, что как бы намекает :) 3) есть некая закономерность, например при нормальном порядке байт первый символ - мелкий, дальше все заглавные, при обратном порядке наоборот, что намекает что это строка, начинающаяся с заглавной буквы и байты в обратном порядке.

Странная уверенность. любые данные можно хранить, предваряя их длиной. в подавляющем большинстве сетевых протоколов идет длина а за ней какие либо данные и текстом они при этом не являются ни разу

Знаешь, тут может быть русский текст, всего 31 уникальный байт, в русском как известно 33 буквы. С другой стороны, самый распространенный 8A - если это пробел, то у нас 13 слов с средней длиной 7 букв, как то многовато

Кстааати. Огромное спасибо. Вы прямо шерлок, насчет пробелов, пляшущие человечки. Я не догадывался так строки распознавать :О

1 ответ 1

Браслет из камня. В непритязательных к моде поселениях может служить в качестве украшения.

Вы были абсолютно правы, текст, явно из игры :)

Шифр элементарный. С каждый байтом строки в кодировке windows (1251) произведен XOR с 0xAA .

Догадаться было не сложно, по частоте символов мы определили, что чаще всего встречается 8A, предположили, что это пробел. Далее я обратил внимание, что это практически единственный байт, который больше 0x80, остальные байты гораздо меньше. А как известно, у пробела самый маленький код 0x20, латинские символы начинаются с 0x41, а русские так вообще во второй половине таблицы, после 0x80. Получается все крупные числа превратились в мелкие, а маленькое число наоборот в большое - это явный признак операции XOR, тем более она обычно и используется в криптографии т.к. легко обратима, повторением операции. 0x8A xor 0x20 = 0xAA - вот наш ключ. Сделал маленькую прогу, которая считала ваши шестнадцеричиные коды символов, сделала из них числа и провела xor 0xAA . Текст перед нами.

Кодировка (кодовая страница) – это набор байт, соответствующий печатному символу. Это правила по которым компьютер представляет текстовые данные пользователю.

В разных странах и системах могут использоваться разные кодовые страницы.

Для кодирования русскоязычных текстов используются кодировки: Windows-1251, KOI8, MacCyrillic, а также универсальная таблица символов - Юникод (UTF-8).

Только популярные кодировки или все?

Сайт построен на HTML5

Для корректной работы данного сайта требуется HTML5.

Пожалуйста, воспользуйтесь браузером, который поддерживает HTML5. Многие современные браузеры поддерживают HTML5. Например:

Добрый день. Русская буква "А" в юникодной кодировке состоит из двух байтов: 16 и 4.
В юникодной кодировке у русской буквы "А" номер 1040.
Как между собой связаны 16, 4 и 1040? Что нужно сделать с числами 16 и 4, чтобы получить 1040?

Числа 16 и 4 получаю этим кодом:

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


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


Расшифровать строку путем уменьшения кода символа на величину введенного числа
Ввести с клавиатуры строку текста и число от 0 до 32. Расшифровать строку и вывести результат на.

Расшифровать строку путем уменьшения кода символа на величину введенного числа
Ввести с клавиатуры строку текста и число от 0 до 32. Расшифровать строку и вывести результат на.

Korshi, да вроде как 256*4+16=1040

Burk, какой это раздел в информатике? Можете дать ссылку на какую-нибудь статью, а то я вообще информатику не изучал. В интернете попытался найти расшифровки, но не нашёл.

Korshi, а может вам нужно просто работать с аналогами обычных функций Asc и Chr, то это AscW и ChrW для юникода? Да я как-то тоже информатику не изучал, можно просто, я думаю, набрать в поисковике Системы счисления или Книги по информатике. Но завтра спрошу у дочери и сообщу.

есть ещё функции перевода 10-16 и 16-10 WorksheetFunction.Dec2Hex WorksheetFunction.Hex2Dec
а на форуме в разделе Учебники, Справочники .. разве ничего нет?

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

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

Korshi, Символ=Chr(Число) выдает символ, десятичный код которого Число, Код = Asc(Символ) выдает Код Символа, это функции ВБА, если в поиске набрать эти функции, то можно видеть более подробное описание.
Символ = ChrW(ЧислоКодировкаЮникод) ЧислоЮниКод =AscW(Символ) то же самое только кодировка юникодовская. WorksheetFunction. в функциях перевода из одной системы счисления в другую (Dec2Hex Hex2Dec) обязательна. Напишите коротенький макрос с выводом результата на экран, в качестве символа возьмите ту же русскую А.
Наберите в гугле "Сайт Константина Полякова", там он достаточно подробно поясняет и этот раздел информатики

Читайте также: