-
Notifications
You must be signed in to change notification settings - Fork 1
cats vs dogs
- Категория: PPC
- Стоимость: 400
- Автор: Максим Пивко
- Репозиторий
Специалисты в области компьютерных расследований из компании Rubelfzederg Security представили доклад, в котором говорится о роли интернет-мемов в кибербезопасности. Проведённое исследование показало, что зачастую публикуемые для развлечения картинки содержат скрытую информацию, доступ к которой можно получить, только зная метод, использованный передающим лицом.
В качестве примера сотрудники Rubelfzederg Security приводят давно ставшее популярным изображение нескольких десятков котов и собак. «Новейшие технологии, использующие в том числе искусственный интеллект, позволили нам сделать однозначный вывод о наличии скрытой информации в этой не вызывающей подозрений картинке», — говорят авторы в докладе.
Отметим, однако, что эксперты не смогли извлечь информацию, которая, по их мнению, содержится в изображении. «Извлечение этой информации — тема для будущих исследований», — заявил специалист Rubelfzederg Марк Заслански.
В условии дано изображение. Если к нему приглядется, то можно заметить, что оно состоит из комбинации изображений котов и собак размером 50*50px. Само изображение имеет размеры 15000*1500px, т.е. 300*30 котов/собак.
Попробуем разметить на картинке котов и собак, чтобы понять, по какому принципу они расставлены. Чтобы не тратить время на ручное распознавание, воспользуемся готовым инструментом. Доступных для использования предобученных распознавателей достаточно много. Например, один из самых известных, попадащих в первые строки выдачи гугла — tensorflow. Можно прочитать простую инструкцию и сразу начать распознавать. В случае, если ваш компьютер имеет GPU с поддержкой CUDA, распознавание, скорее всего, пройдет быстро и без труда. В случае если подходящей видеокарты нет, придется немного адаптировать распознаватель, чтобы он работал не слишком долго (распознавание на CPU как правило работает значительно медленнее, чем на GPU). Я для для этого использовал другой, чуть менее известный вариант (который, тем не менее, тоже достаточно легко находится в гугле) — Darknet YOLO.
Для начала разрежем изображение на независимые кусочки 50*50px. Есть множество способов сделать это, один из них — с помощью ImageMagick:
convert example.png -crop 50x50 image-%d.png
Получаем 9000 изображений с именами image-0.png, image-1.png, image-2.png и т.д. (номера присвоены последовательно по рядам сверху вниз).
YOLO работает достаточно быстро, но можно немного подредактировать стандартные настройки распознавателя (в частности, с учетом того, что изображения всего 50*50px), чтобы ещё сильнее ускорить его, потеряв немного в качестве. На ноутбуке 2014 года с процессором Intel Core i5 распознавание заняло около 34 минут.
Получается далеко не самое чистое изображение, однако можно разобрать на нём флаг (есть смысл попробовать несколько вариантов в случае сомнений в отношении каких-то букв).
В данном случае флаг — QCTF{CATDOG_AYHHPLAH}
Некоторые команды решали таск вручную. Возможно, это было не медленнее компьютера (или даже быстрее), однако такое решение занимало человека на время распознавания, в то время как автоматический распознаватель позволяет решать другие таски, пока распознавание не завершится.
Тем не менее, стоит упомянуть несколько идей, которые помогли бы ускорить распознавание тем, кто всё же решился провести его вручную (на практике эти идеи авторами не проверялись, поэтому они могут иметь свои подводные камни).
- Можно было попробовать уменьшить разрешение результирующего изображения, выбросив из исходного изображения каждый второй столбец и каждую вторую строку.
- Можно было открыть картинку в графическом редакторе, находить очередного кота и закрашивать связные области с котами: глазами легко заметить котов, находящихся рядом. Благодаря тому, что котов на изображении меньше половины (т.к. коты — буквы, а собаки — фон), такой подход может позволить сэкономить время.
- Ещё одна вариация второй идеи, описанная одной из команд: можно закрашивать столбцы на изображении. Большинство столбцов имеет не больше двух непрерывных отрезков котов, поэтому должно получиться довольно быстро.