Write-up Арбатско-Покровская линия? (UgraCTF2021)

Write-up Арбатско-Покровская линия? (UgraCTF2021)

User1

Выпущено при поддержке https://t.me/ch4nnel1

Содержание:

Разбор

Само задание (https://q.2021.ugractf.ru/tasks/apl)

Первым делом загуглим название таска из его 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 и не понимая, что происходит в этой программе можно было решить этот таск. В принципе, я так и решаю все таски на реверс Хоть это задание и было отнесено в категорию крипты, я бы больше посчитал его за реверс.

А на этом все, я хочу спать и кушать, пришлите мне кто-нибудь печенек пожалуйста.

Большая печенька с функцией само-доставки


Report Page