#шифрование #байткод
У меня есть 100 байт. Вот они: 65 5A 44 5B 58 44 43 8A 4B 5A 4A 5B 41 4F 58 8A 42 4D 8A 40 4A 46 47 55 84 8A 68 8A 47 4F 45 5A 42 58 55 4D 4A 58 4F 41 56 47 51 5F 8A 40 8A 46 44 4E 4F 8A 45 44 5B 4F 41 4F 47 42 55 5F 8A 46 44 4C 4F 58 8A 5B 41 59 4C 42 58 56 8A 48 8A 40 4A 5D 4F 5B 58 48 4F 8A 59 40 5A 4A 52 4F 47 42 55 84 A7 A0 Теперь они и у вас есть. В них написан какой-то осмысленный текст. Предположительно русский (выдернуто из игры). Байты как я понял перевернуты. Что это за кодировка такая, что там написано и, чёрт возьми, кто тот герой, что сможет объяснить как их правильно конвертнуть в этом случае?
Ответы
Ответ 1
Браслет из камня. В непритязательных к моде поселениях может служить в качестве украшения. Вы были абсолютно правы, текст, явно из игры :) Шифр элементарный. С каждый байтом строки в кодировке windows (1251) произведен XOR с 0xAA. Догадаться было не сложно, по частоте символов мы определили, что чаще всего встречается 8A, предположили, что это пробел. Далее я обратил внимание, что это практически единственный байт, который больше 0x80, остальные байты гораздо меньше. А как известно, у пробела самый маленький код 0x20, латинские символы начинаются с 0x41, а русские так вообще во второй половине таблицы, после 0x80. Получается все крупные числа превратились в мелкие, а маленькое число наоборот в большое - это явный признак операции XOR, тем более она обычно и используется в криптографии т.к. легко обратима, повторением операции. 0x8A xor 0x20 = 0xAA - вот наш ключ. Сделал маленькую прогу, которая считала ваши шестнадцеричиные коды символов, сделала из них числа и провела xor 0xAA. Текст перед нами. На perl моя программа выглядела так: #!/usr/bin/perl $a=<>; // Читаем строку из входного файла @b=split(/ /,$a); // Делаем массив hex кодов, они через проблел foreach $a (@b) // бежим по массиву { $n=hex($a) ^ 0xAA; // Делаем нормальное число из шестнадцетиричного и XOR 0xAA print(chr($n)); // Печатаем символ с этим кодом }
Комментариев нет:
Отправить комментарий