CTF. Курс молодого бойца. Начальные задания категории Crypto #7.

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". Значит это архив и его сигнатура будет следующей.

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

Перебор всех вариантов занимает не много времени, нужно лишь отсеять неверные варианты.

Остальная часть задания (написание скрипта из исходника и запуск перебора) остаётся на вас.

Report Page