Новости RuCTF 2010 Quals .::. Разбор Stegano .::.

Progressor
, 09 March 2010

Из категории стегано мы решили задания на 100, 200 и 400. Начали ковырять таск на 500 - но не хватило времени.

Stegano100.

Дана ссылка на GoogleMaps с установленными метками в различных субъектах Российской Федерации. Причем в описании каждой метки написано несколько чисел.

Ну, задание на 100, должно быть легким - первая мысль - соединить метки по номерам, авось получится фигура или стрелка. Не получилась. Затем подумалось, что название "Поехали!" может указывать на космическую тематику, попробовали привязать Гагарина и других космонавтов к этим регионам. Не прокатило. Поскольку это было в вечер пятницы, пришлось расходиться из универа по домам.

На утро выяснилось, что наши ночью задание решили. Оказалось все прямолинейнее - каждый субъект страны имеет числовой автомобильный номер, нужно было выстроить эти номера в соответствии с порядком, указанным в описании меток, и получить в итоге набор чисел, который задает символы в ASCII. Welcome to RuCTF!

Stegano200.

Дан файл ructf.ws . Задание - что-то вроде "Вот вам карта звездного неба. Похоже, там есть еще что-то". В файле - строчки со звездочками в некотором неизвестном порядке. Всего в файле встречается 4 различных символа - пробел, табуляция, перевод строки (\r\n) и символ *. Расширение ws вывело нас на эзотерический язык программирования Whitespace, который иногда используется для стеганографических целей. Быстренько скачали транслятор (написан на руби:)), запустили - программа оказалась вполне себе валидной и вывела "MAGIC WHITESPACE". Попробовали отправить это в качестве ответа - не получилось. Даже жюри помучали вопросами - а мож это сбой проверяющей системы? Нет, сказали "думать дальше". Ок, думаем. За субботу ничего не надумали.

Вечером я дома дизассемблировал прогу, прогнал на листочке все инструкции - Whitespace использует стековую машину - прога, оказывается, даже была слегка обфусцирована. Недостижимый код, мертвый код (три раза плюс два, один раз минус шесть), переходы по меткам. Зачем? Непонятно. Просто для ложного следа.

На утро поиски продолжились. Стали склоняться к версии, что информация скрыта в расположении звездочек. Максимальное расстояние между двумя звездочками - 4, минимальное - 1. Родилась идея - возможно, азбука Морзе со звездочками в качестве разделителей. Прикинув на глаз, получив всякую абракадабру вместо осмысленного текста, я отнесся довольно скептически к этой идее. Но все же стал накидывать прогу для перевода с азбуки Морзе в символы. Вопрос - в какой алфавит, английский или русский? Ну попробовали в английский. Написал, запустил. Получилась ерунда. Поменял местами точки и тире. Получилась ерунда. Мельком пролистал файл и - о чудо. В последних строчках глаз резанули осмысленные слова - ANSWER: ORIGINALITY.

Stegano400.

Безуспешно потыкав задание на 300, приняв во внимание, что его решили совсем немногие и гораздо большее количество команд решило задание на 400 - решили заняться им. Итак, дана картинка, bmp, 4 метра. Задание - "Zoo. Посмотрите на это". На картинке явно несколько наложенных друг на друга изображений, смутно угадываются очертания каких-то животных. Стали смотреть на пиксели - увидели закономерность - в квадрате 3 на 3 каждый пиксель задает одну из 9 картинок. Установили ImageMagick, RMagick - и вперед.

Разложили исходную картинку на 9. Волшебным образом на этих картинках появились звери - все фотки из википедии. В мирке тем временем сказали, что суммарно команды отправили уже 1300 попыток ответов на этот квест. Наверно животных перебирали, подумали мы и не стали этого делать:). Вместо этого обнаружили, что на каждой картинке остались артефакты с регулярной структурой. Прикинули, как эти пиксели расположены на исходной картинке - и вырезали только их. Получили такого блееедного верблюда. Уплотнили пиксели - верблюд стал четким. Точнее, мозаика с перепутанными кусочками, на которой фотка дромадера - одногорбого верблюда - опять же из википедии. Пробовали отправлять дромадера, дромедара, одногорбого верблюда, на латыни, на английском, на немецком, в разных регистрах... Опять задали вопрос насчет возможного сбоя проверяющей системы, но ответа так и не дождались. Ну и ладно. Отправили несколько вариантов какого-то там сингапурского зоопарка, но все бестолку.

Фантазия иссякла, я уже подумал, что не видать нам ответа в этом таске. Однако Костя таки подмутил что-то с этим верблюдом, опять же выцепив только некоторые символы - и пересобрал два варианта мозаики в правильную картинку. И вот на них на фоне этого несчастного дромадера проявилась какое-то кабаноподобное чудище с клыками. Все кинулись искать в интернете, что же это за чудо-юдо. Я вбил в гугл - "кабан с клыками" (как выяснилось позже, в документации на этом шаге так и предлагалось - либо признайте животное сразу, либо вбейте в гугл "свинья с клыками":)). И тут вскрик - О! Я поворачиваюсь и вижу на проекторе эту фотку, снова из википедии. Бабирусса. Отправили - есть! Докопали, дорыли, догрызли:)

Это задание с картинкой мы сдали уже ближе к вечеру воскресенья, оставалось еще немного времени. Поскольку никаких конструктивных мыслей не возникло по поводу стегано300, то решили взяться за стегано500. Видео, на котором организаторы, команда ХакерДом, поют песенку про хакеров. "С чего начинаются хакеры". В видео воткнуты кадры с хорошо различимыми помехами. В конце исполнители руками показывают нолики-единички. Гугл подсказал, что это последовательность Морса-Туэ. Она к тому же бесконечная, что сочеталось с подсказками жюри. А дальше мы раскопать не успели, кончилось время...

В заключение про Stegano скажу, что задания были приятные, многоступенчатые, требующие фантазии от команд и силы, чтобы эти фантазии проверять. А уж сколько надо фантазии, чтоб придумать такие довольно оригинальные задания - ХакерДом молодцы :)