Как найти шифр в картинке

Время на прочтение
5 мин

Количество просмотров 30K

На хакерских конкурсах и играх CTF (Capture The Flag) иногда попадаются задачки на стеганографию: вам дают картинку, в которой нужно найти скрытое сообщение. Наверное, самый простой способ спрятать текст в картинке PNG — прописать его в одном из цветовых каналов или в альфа-канале (канал прозрачности). Для выявления подобных «закладок» есть специальные инструменты, такие как stegsolve, pngcheck и stegdetect, иногда конкурсантам приходится вручную повозиться с фильтрами в GIMP или Photoshop.

Однако прогресс не стоит на месте — и в последнее время всё чаще используются другие способы скрытия данных, например, PNG-наполнение. Посмотрим, как это делается.

Начнём с небольшого теоретического введения по «невидимым» частям PNG.

Альфа-канал

На экране компьютера при отображении картинки цвета создаются сочетанием красного, зелёного и синего компонентов. Эти три цветовые плоскости называются каналами. Обычно они записываются как RGB.

Кроме этих трёх каналов, в PNG может быть ещё четвёртый канал, называемый альфа (обозначается буквой А) для определения уровня прозрачности. Полученное изображение RGBA определяет видимые цвета и степень прозрачности.

В большинстве графических форматов альфа-канал является значением от 0% до 100% (или от 0 до 255 в байтах). Значение 0% (чёрный) обозначает место на изображении, где должна быть полная прозрачность — тут значение RGB игнорируется, и полностью виден фон под картинкой. Значение альфа-канала 100% (белый) означает, что каналы RGB полностью непрозрачны. Промежуточные значения определяют, насколько нужно смешать фон со значением RGB-пикселя.


Альфа-градиент в PNG

Значения альфа-градиента обычно используются для наложения изображения на другое изображение или на веб-страницу. Альфа-градиенты есть в PNG, WebP, ICO, ICN и других растровых форматах. Формат GIF поддерживает только логическое значение (пиксель либо прозрачен, либо нет).

Альфа-канал — только один из вариантов для размещения скрытого текста. Переходим к PNG-наполнению (padding) для прямой записи данных в бинарный файл.

PNG-наполнение по столбцам

Формат PNG достаточно прост. Каждый файл начинается с восьми стандартных байт подписи, вот её десятичные значения: 137 80 78 71 13 10 26 10. Первый байт выбран за пределами ASCII, чтобы никакой редактор случайно не принял изображение за текстовый файл. Следующие три байта соответствуют буквам P, N, G. Затем разрыв строки DOS (13 10), маркер DOS окончания файла (26), чтобы программа type не выдавала весь бинарный мусор, и маркер Unix новой строки.

После заголовка начинаются блоки данных (chunks) со стандартной структурой. Сначала идёт блок IHDR с указанием ширины и высоты изображения, цветового пространства, количества бит на пиксель, методом сжатия, методом фильтрации и указанием наличия/отсутствия чересстрочного кодирования. Для ширины и высоты выделено по четыре байта, для остальных параметров — по одному байту.

Затем следует опциональный блок tEXt с текстовыми метаданными, например, с названием программы, которая сгенерировала данный файл PNG. В текстовые блоки можно записывать текстовую информацию в открытом виде.

За IHDR и tEXt следуют блоки IDAT со сжатыми значениями RGB или RGBA для растровых пикселей. При рендеринге PNG обрабатывается IHDR, выделяется буфер в памяти для изображения, данные извлекаются из сжатого формата и попиксельно записываются в буфер. Файл PNG завершается блоком IEND.

В конце каждого блока записана контрольная сумма CRC для этого блока, которая вычисляется по стандартному алгоритму.

Обычно изображения PNG содержат 8 или 16 бит информации на каждый канал RGB или RGBA, то есть выходит от трёх до восьми байт на пиксель. В таком формате все байты заняты полезной информацией о цвете и прозрачности, так что в конце каждой строки графического изображения у нас нет места для записи произвольных данных.

Но для задач стеганографии нужно знать, что PNG поддерживает и меньшую глубину цвета: 1 бит (2 цвета), 2 бита (4 цвета) и 4 бита (16 цветов). В такой ситуации получается, что в одном байте хранится информация о нескольких пикселях. Вот здесь и появляется теоретическая возможность для «горизонтального» наполнения PNG посторонними данными. Если ширина картинки в пикселях не кратна восьми, то в последнем байте строки остаётся неиспользуемые биты, которые все вместе формируют целый неиспользуемый «столбец пикселей».

В случае 1-битного изображения в конце каждой строки может остаться до 7 свободных бит, которые не будут обработаны парсером. В случае 2-битного изображения в последнем байте остаётся до 3 свободных бит. Онлайновый инструмент FotoForensics находит такие неиспользуемые «столбцы пикселей» в изображениях PNG.

Впрочем, PNG-картинки с малой глубиной цвета встречаются очень редко, поэтому и данный метод стеганографии можно считать экзотикой. Если вам попалось PNG-изображение с 2, 4 или 16 цветами, один этот факт уже вызывает подозрение и может инициировать проверку PNG-наполнения по столбцам.

Совсем другое дело — PNG-наполнение за границами картинки. Это более простой метод стеганографии, который позволяет спрятать в изображении гораздо больше информации.

PNG-наполнение за границами картинки

PNG-наполнение за границами картинки (post-pixel padding) часто используется в различных играх, головоломках и конкурсах, не только хакерских. Вот как работает этот метод:

  1. Берём изображение PNG (с любой глубиной цвета).

  2. Вставляем секретную информацию в нижнюю часть картинки.

  3. Сохраняем PNG, не используя чересстрочное кодирование.
  4. Открываем файл в hex-редакторе.
  5. Находим блок IHDR. Он располагается в начале файла после восьми обязательных байт подписи и помечен как IHDR.

  6. Первые четыре байта после метки IHDR — это ширина файла, следующие четыре байта — высота. Уменьшаем это значение c 00 00 01 9D (413 пикселей), например, до 00 00 01 7E (382 пикселя).

  7. Не забудьте пересчитать четыре байта CRC (в формате PNG вычисляется значение CRC для каждого блока данных, в том числе для IHDR), которые записаны в конце блока. Если вы не можете посчитать CRC самостоятельно, посмотрите это значение в любом PNG-файле с аналогичными значениями блока IHDR.

    Получаем результат.

Обратите внимание, что секретные данные остались в нижней части изображения. Размер файла не изменился: 335 906 байт. Просто парсер теперь не обрабатывает эти пиксели — и нижняя часть картинки не демонстрируется на экране.

Несложно догадаться, что в «секретной» части картинки можно спрятать не только текстовую надпись, но и произвольные данные. Например, мы можем записать туда запароленный архив RAR. Картинка с секретным посланием может быть опубликована на Habrastorage или любом другом общедоступном хостинге. Послание получит только тот человек, с которым вы заранее договорились о способе передачи информации и согласовали пароль. Таким способом вредоносные программы могут передавать полезную нагрузку через Хабр и другие общедоступные хостинги.


На правах рекламы

VDS для размещения сайтов — это про наши эпичные! Все серверы «из коробки» защищены от DDoS-атак, автоматическая установка удобной панели управления VestaCP. Лучше один раз попробовать ;)

Работа с изображениями

В этой статье мы поговорим о способе определения метода сокрытия информации в изображениях.

Общие проверки для BMP/PNG/JMP и других

Получение exif файлов
Первое что обычно я делаю, если не знаю с чего начать — получаю exif файла. Пример:
Дана картинка: 1

Последовательность действий:

  1. Переходим на сайт http://regex.info/exif.cgi
  2. Отсылаем картинку.
  3. Замечаем текст Youarethebesthackerihaveeverseen!1337 — это и есть флаг к заданию!

2

Получение GEO-тегов

Аналогичное с EXIF решение, но отсылается файлик на сайт http://www.geoimgr.com/
В итоге получаем координаты:
3

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

Архив

Изображение может оказаться архивом. Чаще всего это заметно, если картинка весит больше, чем доолжна весить при таких размерах.
Пример:
Дано изображение: 4

Последовательность действий:

  1. Переименовать оканчание в .rar/.zip/.7z или в любой другой тип архивов (перебор).
  2. Попробовать распаковать.
  3. При оканчании .rar данный файл разархивируется. Получаем файл flag.txt
  4. Открываем txt файл и получаем флаг «BESTFLAGIHAVEEVERSEEN!»
  5. Profit!

Все признаки по которым можно это заподозрить/убедиться:

  • Большой вес изображения при данном разрешении
  • В hexedit увидеть заголовки двух склеенных файлов — изображения и архива
  • Перебор оканчаний с последующим разархивированием

PNG/BMP изображения

Нам дано изображение. Попробуем по некоторым факторам определить, как нам решить этот таск.

Монотонное изображение
5

Если вам дали монотонное изображение, то чаще всего в ней находятся водяные знаки.

Водяные знаки
Чтобы узнать, есть ли на ней водяные знаки, есть несколько вариантов

Painter
Самый простой вариант — открыть изображение в Painter (или любом другом редакторе изображений).
6

Далее заливкой тыкнуть каким-нибудь контрастным цветом. В данном случае лучше всего белым.

Информация об изображении
В некоторых программах-просмотрах картинок есть статистика по цветам/пикселям. Таким образом мы можем узнать, что картинка не монотонна и на ней присутствуют пиксели разных цветов.
На этом этапе суть в том, чтобы определить следующий этап:) Тут может быть как морзянка, так и бинарный код (1001010), о чем пойдет в соответствующей последующей главе.

Другое
Есть еще утилиты, помогающие в поиске водяных знаков, такая как StegSolve. Их мы рассмотрим в соответствующей теме.

Обыкновенное изображение

Нам дано обыкновенное ничем не выделяющееся изображение.
7

Попиксельное вычитание из оригинала
Тут нам следует найти оригинал изображения.

Поиск оригинала изображения
Для этого есть несколько способов.
Сретства для поиска изображений:

  • https://images.google.com/
  • https://yandex.ru/images/

Воспользуемся google поиском:
8

Находим в картинках изображение такого же размера и скачиваем его.
Далее нам остается с помощью какой-либо библиотеки написать программу,которая пройдется по двум изображениям и выделит отличающиеся пиксели.
Лично я сделал со StegSolve, речь о котором пойдет в соседнем разделе.

Разноцветные пиксели

Пиксели двух цветов
Если у вас предоставлено изображение с пикселями двух цветов, то первое что попробуем сделать — это перевести пиксели в байты.
Приведу пример с прошедших соревнований Break In CTF 2016 — таск You Can(t) See Me.
Нам дана картинка color.png: 9

Последовательность действий:

  1. Пишем программу на Python+PIL/Pygame, которая проходит по строкам и создает свою строку f, в которой заменяет черный пиксель на 0 и красный пиксель на 1. Стоит заметить что при переходе на новую строку пикселей во время считывания, мы добавляем пробел в нашу строку f. В итоге получаем строку из 7 разных повторяющихся цифр.
  2. Идем на сайт https://www.branah.com/ascii-converter и вбиваем нашу строку в поле «Binary» и тыкаем на «Convert».
  3. Видим в поле «ASCII» текст «3xXKkFstTUpsG2IFDirE6xDrcAF8DSx4iWxd5f9IQ9T205izN8lS2MQUlsF11gT4TFXHHlLHVHprNTtrh6lURfdUW7Lpuzgu1VKzwb1bg1oq6Ae3GnykkLZZsnze3HVLxHlfCYtzyrcV2Oxp0Gb0Z2ELphR4Oxo7TyvHCuWKWlN8t8KIfHysZK7jBNPu6wRVEUPIwVra.»
  4. Флаг найден!

взято с сайта http://itsecwiki.org/

results matching ««

    No results matching ««

    Данный калькулятор применяет стеганографический метод для сокрытия сообщения в цифровом изображении. Вы можете загрузить картинку и ввести сообщение — калькулятор сгенерирует картинку со спрятанным в ней сообщением. Для извлечения сообщения из картинки нужно использовать парный калькулятор ниже — если загрузить в него изображение, сгенерированное первым калькулятором, то он покажет скрытое в нем сообщение. Подробнее про стеганографические методы сокрытия информации в цифровых изображениях можно прочитать под калькулятором.

    Калькулятор для добавления сообщения в изображение:

    PLANETCALC, Сокрытие информации в изображении

    Сокрытие информации в изображении

    Исходное изображение

    • Перетащите сюда файлы

    Стеганографическое изображение

    Калькулятор для извлечения сообщения из изображения, созданного калькулятором выше:

    PLANETCALC, Извлечение информации из изображения

    Извлечение информации из изображения

    Исходное изображение

    • Перетащите сюда файлы

    Стеганография в цифровых изображениях

    Стеганография — способ передачи или хранения информации с учетом сохранения в тайне самого факта такой передачи (хранения). Таким образом, в отличие от криптографии, стеганография скрывает сам факт существования тайного сообщения. Информация скрывается в объекте-носителе (англ. carrier) или контейнере, при этом после добавления сообщения объект-носитель должен выглядеть «нормальным», так, чтобы присутствие спрятанного сообщения в нем было незаметно постороннему наблюдателю. Поскольку стеганография никак не шифрует скрытую информацию, стеганографические методы применяют в дополнение к криптографическим.

    Стеганография может применяться для скрытия информации в разных типах цифровых данных: тексте, изображениях, аудио и видеофайлах. Цифровые изображения представляют в этом смысле чуть ли не самый популярный формат объекта-носителя, поскольку имеют большой объем и не вызывают подозрений при публикации в соцсетях и отправке по электронной почте.

    Стеганографические методы, то есть методы встраивания тайного сообщения в объект-носитель, обычно оценивают по нескольким критериям:

    1. Незаметность или уровень восприятия (imperceptibility) — в случае с цифровым изображением, человек не должен увидеть разницу между исходным изображением и изображением со встроенным в него тайным сообщением.
    2. Емкость/Вместимость (embedding capacity) — максимальный объем данных, который можно вставить в объект-носитель.
    3. Устойчивость (robustness) — способность сообщения сопротивляться искажениям, вносимым при обработке или передаче объекта контейнера, например, при сжатии изображения или при редактировании (вращении или переворачивании изображения). Такие искажения иногда используются для целенаправленного повреждения стеганограммы.

    Также могут учитываться и другие характеристики, например, устойчивость к статистической атаке (стеганограмма не должна создавать в объекте-носителе характерную сигнатуру, выявляемую методами статистического анализа), независимость от формата (метод можно применять к файлам разных форматов), скрытность (сложность обнаружения стеганограммы в носителе, если известно, что она там есть).

    Стеганографические методы для цифровых изображений разделяются на два класса: пространственные методы (или методы для временной области) и частотные методы (или методы для частотной области). Пространственные методы манипулируют значениями в пространственной области — пикселями. Частотные методы — частотными характеристиками изображения.

    Основные пространственные методы:

    • LSB (англ. Least Significant Bit — Наименее значимый бит)
    • PVD (англ. Pixel Value Difference — Разность значений пикселей)
    • GLM (англ. Grey Level Modification — Изменение уровня серого)
    • MPV (англ. Mid Position Value — Значение в средней позиции)

    Основные частотные методы:

    • DCT (англ. Discrete Cosine Transform — Дискретное косинусное преобразование)
    • DWT (англ. Discrete Wavelet Transform — Дискретное вейвлет-преобразование)

    Метод наименее значимого бита (LSB — Least Significant Bit)

    Этот метод является наиболее простым методом стеганографии цифровых изображений. Метод заключается в замене наименее значимых бит изображения-контейнера на биты сообщения. Логику метода можно проиллюстрировать следующей картинкой

    LSB
    LSB

    Метод обладает хорошей незаметностью. Изменение одного бита в цвете соответствует изменению базового цвета на 1/256 от возможного диапазона или 0,4%, что не позволяет человеческому глазу заметить искажение изображения. Существуют модификации LSB, меняющие 2, 3 или даже 4 младших бита в байте цвета. При этом даже в самом худшем случае изменение базового цвета составляет 16/256, или 6,25%, что также довольно незаметно для человеческого глаза. Могут применяться модификации, затрудняющие выявление сообщения, например, вставка только в один байт цвета.

    Метод обладает хорошей емкостью по сравнению с другими методами. Для 24-битной RGB-модели каждый пиксель изображения может содержать 3 бита тайного сообщения (меняют три байта цвета, байт для прозрачности не изменяют). Таким образом, используя метод LSB, в цифровое изображение размером 3048 на 2032 пикселя можно встроить примерно 2 мегабайта скрытых данных. Разумеется, это верно, если речь идет о форматах, которые используют для хранения изображения алгоритмы сжатия без потери данных (lossless compression), например, png и gif, и неверно для формата jpg. Именно поэтому калькуляторы выше генерируют стегоизображение в png формате.

    К недостаткам же метода можно отнести его слабую устойчивость — метод очень чувствителен к искажениям стегоизображения.

    0 / 0 / 0

    Регистрация: 29.06.2016

    Сообщений: 1

    1

    Какой может быть шифр в картинке

    29.06.2016, 03:09. Показов 5446. Ответов 1


    Студворк — интернет-сервис помощи студентам

    Если в этом изображении зашифровано послание, то что это может быть за шифр?

    Это не шутка

    Миниатюры

    Какой может быть шифр в картинке
     



    0



    Регистрация: 23.10.2013

    Сообщений: 5,076

    Записей в блоге: 8

    29.06.2016, 19:13

    2

    efti1
    Есть много способов при шифровании текста использовать
    графические файлы.
    1. Самый очевидный — это рисовать символы типа «пляшущие человечки»
    2. Менее очевидный. Строка пикселей — каждый цвет пикселя — число (код)
    3. Совсем не очевидный. Тоже самое можно проделать с какой-нибудь
    линией изображения.
    4. Скрытый (невидимый). Код можно вставить в изображение так, что сама
    картинка и не изменится вовсе.
    5. Совсем скрытый. Если рисунок цветной (24 бита), то можно для кодирования
    использовать каждый восьмой младший бит. (Это часто применяется)
    Тут и шифровать не надо (это метод для стеганографии)
    примечание.
    Графика — очень благодарный объект для шифрования.

    Добавлено через 2 минуты
    Хорошая картинка
    На черном фоне вы не увидите черно-серые пиксели…



    0



    Введение

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

    encryption.png

    В чём преимущества программ с открытым исходным кодом?

    На самом деле если сравнивать с программным обеспечением которое является закрытым(с закрытым исходным кодом), то у программ с открытым исходным кодом есть множество весомых преимуществ: такие программы являются прежде всего бесплатными изначально, так же благодаря открытости исходного кода, мы можем без проблем увидеть и понять как работает программа, каждый желающий может внести свои изменения и усовершенствовать такие программы, исходя из открытого кода, мы сможем убедиться в безопасности программы(не будет же какой-то дурачок прям в открытом коде писать хост и порт для удалённого доступа например).

    В целом хочу сказать, что в использовании программ с открытым исходным кодом нельзя не заметить массу преимуществ, ведь одним из главных считается то, что практически у всего большинства программного обеспечения с закрытым исходным имеются аналоги, только уже приложения opensource.

    Cryptomator

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

    Шифрование происходит путём ключа AES длинной в 256 бит, причём шифруются как файлы, так и их имена. Cryptomator не имеет регистрации, ключ от хранилища не лежит где-то на стороне сервера облачного провайдера, а непосредственно у нас. Виртуальный зашифрованный диск может так же выступать как в качестве флешки.

    Ну что же, давайте собственно приступим к самому инструменту. Займёмся его установкой и созданием защищённого хранилища. Ставить я это всё дело буду на Kali Linux, поэтому переходим на

    Ссылка скрыта от гостей

    этого инструмента и скачиваем файл.

    Снимок экрана от 2023-01-28 20-33-35.png

    После скачивания открываем терминал и переходим в директорию где хранится наш файл. У меня он хранится в папке загрузок. После, даём разрешение на исполнение этого файла, и запускаем его через ./

    Снимок экрана от 2023-01-28 20-37-18.png

    Обязательно нужно запускать его только от имени обычного пользователя, а не привилегированного. Далее нас будет приветствовать меню инструмента, которое является довольно простым и ориентированно понятным. Нажимаем на «+ Добавить хранилище», далее выбираем ему имя, где будет храниться, и собственно ввод пароля. Вам будет предоставлен выбор между тем, чтобы создать ключ для восстановления в случае утери пароля или не создавать его, я не буду создавать т.к для статьи мне достаточно будет простого пароля.

    Ну и вот перед нами в боковом меню наше зашифрованное хранилище

    Снимок экрана от 2023-01-28 20-46-03.png

    Нажимаем на него, а далее на пункт «Разблокировать» и вводим пароль. Теперь нам доступно наше хранилище, в которое мы можем помещать различные важные файлы, и они будут надёжно защищены, это хранилище можно будет выгрузить уже на любой облачный диск и не бояться за конфиденциальность наших файлов. Вот например создал текстовый файл.

    Снимок экрана от 2023-01-28 20-50-53.png

    Снимок экрана от 2023-01-28 20-51-44.png

    Scrambpy

    Следующий инструмент в очереди не менее интересный и так же ориентирован на шифровку информации, несколько необычным путём. А конкретно интересную шифровку изображений. В общем в чём суть, наверняка каждый из вас замазывал лицо на фотографии с помощью различных редакторов изображений, здесь примерно так же, только это самое «зашифрованное лицо», можно будет расшифровать, так же можно будет поставить пароль(только честно говоря я так и не разобрался как это делать), и таким образом ваше лицо могут реально брутфорсить, как бы странно это не звучало)

    А теперь давайте разберём на практике. Ставить буду на всё тот же Kali Linux, для начала скачиваем наш замечательный репозиторий следующей командой

    Код:

    git clone https://github.com/snekbeater/scrambpy

    переходим в директорию нашего скремблера и устанавливаем модуль для работы с инструментом

    Ну и теперь запускаем сначала этот скрипт

    Код:

    python3 scrambpystudio.py

    У нас открывается графическая оболочка скремблера изображений

    Снимок экрана от 2023-01-28 21-07-11.png

    Меню здесь интуитивно понятное, мы нажимаем на File —> open image и выбираем изображение которое хотим зашифровать, далее просто водим «кисточкой» в местах где хотите зашифровать изображение и далее нажимаете в верхней панели на пункт Scramble —> export scrambled image. Зашифрованное изображение будет храниться в папке со скриптом.

    Теперь давайте попробуем расшифровать изображение которое я взял и зашифровал для примера, кстати так называемая «змейка» которая обводит наше изображение и есть то что нам нужно для расшифровки изображения.

    photo_2023-01-27_20-16-31_scst_scrambled.jpg

    Для этого воспользуемся другим скриптом

    Код:

    python3 scramb.py photo.jpg

    Вот собственно и расшифровалось наше изображение

    photo_2023-01-27_20-16-31_scst_scrambled_descrambled.jpg

    Заключение

    Сегодня я показал вам два довольно интересных инструмента для шифровки и дешифровки с открытым исходным кодом, которые могут неплохо так помочь вам в сохранности и защите ваших данных. В заключение хочу сказать, что полностью поддерживаю идею пользования программами с открытым исходным кодом, и хочу продвинуть эту идею в массы за счёт интересных и уникальных статей, в которых буду обозревать подобные программы.

    Понравилась статья? Поделить с друзьями:
  • Как найти оригинал программы
  • Как найти котенка на улице видео
  • Прочитай рассказ составь план как саша провел выходной день
  • Как исправить текст в ворде на полях
  • Филворды как найти золотое слово