• Открыта запись на вторую часть курса по анонимности и безопасности в сети интернет "Paranoid II" от команды codeby. Анонимные роутеры, Подъём, настройка и администрирование Tor-ноды, Работа с железом ПК, Удаление аппаратных закладок, Минимизация рисков, Авторские разработки и многое другое. Подробнее ...

Статья Прячем информацию внутри PNG файла

GlowFisch

GlowFisch

Happy New Year
26.01.2019
75
70
В одной из статей была рассмотрена структура PNG файлов. Стоит напомнить о том, что первые 8 байт файла – это сигнатура PNG 89 50 4E 47 0D 0A 1A 0A. То, что идет дальше является фрагментами (chunk).

Структурно чанк включает в себя: 4 байта длина фрагмента (Length), 4 байта типа чанка (Chunk type), данные (Chunk data) и 4 байта контрольной суммы (CRC). В случае отсутствия какой-либо информации чанке, длина равняется нулю, а блок чанк данных отсутствуют. CRC всегда присутствует, даже для фрагментов, не содержащих данных.

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

Существует четыре обязательных (критически важных) фрагмента: IHDR, IDAT, PLTE, IEND.

Однако здесь возникает неоднозначность - палитра критически важна только для изображений, у которых ColorType = COLOR_PALETTE, для остальных она допустима (правильный декодер должен попытаться ей воспользоваться, если монитор может отображать одновременно лишь ограниченное число цветов), но как правило отсутствует. Помимо обязательных чанков, существуют и дополнительные фрагменты, содержащие текстовую информацию: iTXt, tEXt, zTXt. Следует отметить, что первая строчная буква указывает на необязательность вышеназванных чанков.

Вторая буква названия фрагмента заглавная, если он «публичный», то есть входит в спецификацию. Если буква строчная, то чанк «частный». Adobe Fireworks использовала формат PNG в качестве базового, но добавила туда свои собственные фрагменты mkBS, mkTS, mkBF, prVW и другие, чтобы хранить информацию о слоях и векторах, чтобы можно было сохранить проект в PNG, а позже открыть его и продолжить работать как ни в чем ни бывало.

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

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

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

Если бит безопасного фрагмента блока равен 1, блок может быть скопирован в измененный файл PNG независимо от того, распознает ли программа тип блока и независимо от степени изменения файла.

Если бит равен 0, то нераспознанные небезопасные чанки не должны копироваться в конечный файл PNG.

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

Файл в который внедряем (исходный файл): input.png
Файл, который внедряем (скрываемый файл): codeby.jpg
  • Создаем файл punk.chunk;
  • Открываем его HEX редактором;
  • Вставляем в начало следующие байты «70 75 4e 6b» либо добавляем «puNk» – это будет приватный чанк, защищенный от копирования;
  • Затем после «puNk» вставляем шестнадцатиричный код внедряемого изображения;
  • Открываем утилиту TweakPNG;
  • Перетаскиваем исходное изображение в программу;
  • Нажимаем Edit->Import Chunk и указываем наш файл punk.chunk
  • Мы внедрили в структуру нашего PNG еще одно изображение. Конечно же здесь не обойтись без криптографии, потому что, открыв изображение в HEX редакторе, можно увидеть еще одну сигнатуру JFIF.
Прячем информацию внутри PNG файла


К сожалению, сжимать и изменять формат файла нельзя, так как скрытая информация теряется вместе с остальными метаданными.
Данную операцию можно провести посредством Python. Сам класс для импорта приложен к данной статье.

С условием, что мы осуществили импорт необходимого класса Punk, делаем следующее:
Python:
punk = Punk() #Объявляем класс
punk.encode('input.png', file('codeby.jpg').read()) # Внедряем;
punk.decode('input.png', 'out.jpg') # Декодируем;
Таким образом, мы рассмотрели возможность реализации сокрытия информации в частном чанке PNG файла. Применение данного способа необходимо дополнить криптографическим шифром. В таком случае анонимность передачи сообщений будет близка к 100%.

Полезные ресурсы:
 

Вложения

  • 1 КБ Просмотры: 45
8

8bit

The Codeby Youtube
Grey Team
09.04.2018
19
111
Да, делайте видео, только со всеми пояснениями и практикой. Если озвучиваете сами, то не должно быть шума. Дикция и качество речи тоже оценивайте. Если нет - то тайминг необходим. Качество видео должно быть минимум 1080
 
  • Нравится
Реакции: The Codeby
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб