Write-up Арбатско-Покровская линия? (UgraCTF2021)
User1Выпущено при поддержке https://t.me/ch4nnel1
Содержание:
Разбор
Первым делом загуглим название таска из его url. Поймем что это отсылка на ЯП, который скорее всего и используется в таске.
Первым делом я поискал его на сайте https://tio.run/#, так как на нем часто находятся интерпретаторы для мертвых и малоизвестных языков, плюс он выглядит стильно.
Пробуем разные версии интерпретаторов для apl, но ни одна из них не может выполнить строку E¨flag, так что я выбрал apl-dzaima. Пока забьем на эту строчку и удалим её, и пойдем почитаем просто про сам язык. Я что-то попытался понять, но все мои знания в результате свелись к тому, что ← передает значение, а создание функции как-то связано с {}.
Теперь воспользуемся удобным функционалом сайта, и попросим привести пример Hello word для apl.
Теперь мы еще знаем, что ⎕ принтит то, что в неё/него подали. Попробуем запринтить I и S из данного нам кода.
Опа, оказывается это две матрицы 6x6, посмотрим каким числам соответствует начало флага при сопастовлении этих матриц. Получим что ugra_ = 54 32 47 22 63, а наш шифротекст начинается с 43 21 36 11 52. Получается различие шифротекста и нашей последовательности только в том, что элементы нашей последовательности больше на 11. Теперь мы можем расшифровать данную нам последовательность к примеру таким скриптом. И получить флаг.
Так же позже (27 февраля 19:45) авторы внесли поправку в код, и теперь матрицы строятся правильно, то есть не появляется непонятного смещения на 11.
Решение
(уже относительно внесенных правок)
- понять что в задании используется ЯП apl
- найти интерпритатор и вывести значение переменных
- заметить что переменные I и S содержат матрицы 6x6
- понять что флаг шифруется простым сопоставлением элементов одной матрицы с элементами другой
- написать скрипт на нормальном ЯП для расшифровки
Эпилог
Вот так вот почти ничего не зная про apl и не понимая, что происходит в этой программе можно было решить этот таск. В принципе, я так и решаю все таски на реверс Хоть это задание и было отнесено в категорию крипты, я бы больше посчитал его за реверс.
А на этом все, я хочу спать и кушать, пришлите мне кто-нибудь печенек пожалуйста.