Как известно, всё боится времени.
В архивных записях мы нашли старый алгоритм, который был изобретён, кажется, ещё до создания интернета.
Тогда этот алгоритм при правильном использовании считался достаточно безопасным.
А сейчас?
Бинарник открывает файл с флагом, шифрует его и записывает результат в новый файл.
Шифрование в бинарнике работает следующим образом:
- используется алгоритм LFSR, полином и состояние взяты из
/dev/urandom
и неизвестны - LFSR последовательно генерирует байты
- эти байты с помощью операции XOR преобразуют флаг
- преобразованный массив выводится в файл
Нужно заметить, что буфер для флага имеет большой размер, а перед использованием зануляется функцией memset
. Это значит, что из последних значений буфера мы можем достать последнее состояние генератора. Зная состояние, можно использовать алгоритм Берлекэмпа-Мэсси, чтобы восстановить полином.
Затем, зная полином и состояние, можно полностью восстановить байты, сгенерированные LFSR, и обратить шифрование.
Cup{g0Od_j08_LFSR_h4S_bE3N_cr4cK3D}