CTF. Курс молодого бойца. Начальные задания категории Crypto #7.
https://t.me/hacker_sanctuary
Данный пост будет носить практический характер. В нём мы рассмотрим задания начального уровня в категории Crypto. Данные задания часто встречаются в простых CTF'ах и иногда, как разминочные, в более крупных.
Задания будут взяты с известного сайта с различными задачами (CTF и не только) - https://www.root-me.org/
Будем решать задачи из категории: Cryptanalysis
Прямая ссылка: https://www.root-me.org/en/Challenges/Cryptanalysis/
Предыдущие задания из данной категории вы можете найти на канале.
Часть 1 - ссылка
Часть 2 - ссылка
Часть 3 - ссылка
Часть 4 - ссылка
Часть 5 - ссылка
Часть 6 - ссылка
Пример 1.
Решим задание "Code - Pseudo Random Number Generator".
Смотрим описание.

Прочитав название и описание можно понять, что дело мы будем иметь с генератором псевдослучайных чисел, с помощью которого был зашифрован файл в течении декабря 2012 года (эту подсказку нам дают не просто так)
Скачиваем предлагаемые нам файлы и получаем архив, в котором два файла. Один из них это исходник на Си, второй - зашифрованный файл.
Основной смысл шифрования заключен в функция, на рисунке ниже.

Используется XOR по ключу. Ключ в свою очередь генерируется с помощью случайных чисел, которые получаются функцией Rand. Функция Rand в качестве начального значения holdrand будет использовать установленное через функцию Srand значение.
Функция Srand используется в одном месте.

time(NULL) возвращает текущее время в секундах, прошедшее с 01.01.1970 (так называемый UNIX-time). Нам дана подсказка на основе которой перебор данного числа сильно ограничивается, нам надо перебрать от начала месяца до конца.
Для того, чтобы получить крайние границы можно воспользоваться сайтом - http://i-leon.ru/tools/time

Получаем начальное и конечное значение. Вариантов ключей и расшифровок всё равно будет очень много, поэтому нужно как-то отсеивать неверные. Для этого можно взглянуть на расширении файла ".bz2.crypt". Предположим, что файл изначально имел расширение ".bz2". Значит это архив и его сигнатура будет следующей.

Отлично, остаётся лишь перенести часть кода из исходника на Си в скрипт на Питоне или любой другой удобный для вас язык.
Перебор всех вариантов занимает не много времени, нужно лишь отсеять неверные варианты.
Остальная часть задания (написание скрипта из исходника и запуск перебора) остаётся на вас.