Как расшифровать сообщение в байтах
Обновлено: 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) обязательна. Напишите коротенький макрос с выводом результата на экран, в качестве символа возьмите ту же русскую А.
Наберите в гугле "Сайт Константина Полякова", там он достаточно подробно поясняет и этот раздел информатики
Читайте также: