Лаборатория TUCTF 2016 - Small Horse

Progressor
, 16 May 2016

Дан pdf файл с нотной записью - две строки нот и название Small Horse.

Посмотрели сам файл - вроде ничего интересного. Файл был создан программой MuseScore, скачали импортировали pdf - ничего интересного. Поиск в гугле по словам Small Horse - ничего интересного.

Рассуждаем далее. Мы знаем формат флага - TUCTF{. Если предположить, что одна нота кодирует один символ - то первая и четвертая ноты должны совпадать (буква T). Это же не выполняется и для двоек, троек нот. 

Каждая нота имеет следующие аттрибуты, в которых можно закодировать информацию: положение в октаве, направление хвостика (вверх или вниз) и две ноты еще перечеркнуты.

Переходим на уровень бит. Переводим букву T в биты - 01010100 - и пытаемся найти соответствие в нотах. Если принять самую низкую ноту в группе за ноль, а самую высокую - за 7, то получается битовое представление флага! Но некоторые ноты нужно было инвертировать, чтобы они совпали с битовым представлением известной части флага. Сначала я думал, что это зависит от направления хвостика ноты, но если связь и была, то она была не очевидной.

В итоге я подписал каждую ноту ее высотой:

И начал переводить каждую восьмеричную цифру в три бита. Пришлось перебирать некоторые варианты, чтобы получить печатные символы. Иногда печатных символов получалось больше одного. Более того, для нижней строки нот разбиение на восьмерки бит пришлось делать с конца.

В итоге проследился более-менее осмысленный текст TUCTF{th3_r3d_p8ny}. Я попытался сдать этот флаг, но он не подошел. Тогда я исправил p8ny -> p0ny и флаг подошел! Я сообщил орагнизаторам об этой ошибке, они начислили нам 25 очков сверху и обновили флаг в своей системе.

Ну и в заключение отмечу, что стоимость задания очень занижена. Были задания гораздо более простые и более дорогие.