Статья Прячем стегосообщение в обложке альбома MP3 файла

image_stega.png

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

MP3 (более точно, англ. MPEG-1/2/2.5 Layer 3; но не MPEG-3) – это формат файла для хранения аудиоинформации. MP3-файл состоит из нескольких фрагментов (фреймов) MP3, которые, в свою очередь, состоят из заголовка и блока данных. В начале MP3-файла содержатся специальные теги – ID3-метаданные. Они являются ничем иным как метками в границах MP3-файла (в начале и/или в конце). В них может быть записана информация об авторстве, альбоме, годе выпуска, обложка альбома и текст песни и прочая информация о треке. Строки разделяются нулями или пробелами. Неиспользуемые поля заполняются как пустые строки.

Существуют следующие стандарты метаданных: ID1, ID2, ID3v1 и ID3v2. Стандарт ID3v2 определяет 84 типа фреймов, а также разрешает приложениям создавать свои фреймы. В числе стандартных имеются фреймы для хранения изображения обложки, числа ударов в минуту, информации об авторских правах и лицензии, текста песен, произвольного текста, ссылок и других данных.
Таким образом, MP3 файл посредством хранения информации в ID3v2 формате может содержать изображение обложки альбома, а также иную информацию, которую возможно использовать для сокрытия стего-сообщения.

В качестве обложки можно использовать любое изображение JPG/PNG. Стоит отметить особенность PNG изображений.
Вспомним структуру PNG формата:
1. PNG сигнатура (89 50 4E 47 0D 0A 1A 0A)
  • 89 — non-ASCII символ. Препятствует распознаванию PNG, как текстового файла, и наоборот.
  • 50 4E 47 — PNG в ASCII записи.
  • 0D 0A — CRLF (Carriage-return, Line-feed), DOS-style перевод строки.
  • 1A — останавливает вывод файла в DOS режиме (end-of-file), чтобы вам не вываливалось многокилобайтное изображение в текстовом виде.
  • 0A — LF, Unix-style перевод строки
2. Фреймы (чанки) - это блоки данных, из которых состоит файл. Каждый чанк состоит из 4 секций.

Обязательные чанки:
IHDR — заголовок файла, содержит основную информацию о изображении. Обязан быть первым чанком.
PLTE — палитра, список цветов.
IDAT — содержит, собственно, изображение. Рисунок можно разбить на несколько IDAT чанков, для потоковой передачи. В каждом файле должен быть хотя бы один IDAT чанк.
IEND — завершающий чанк, обязан быть последним в файле.

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

Стего-алгоритм будет следующим:
  • конвертируем текст ASCII в base16;
  • дописываем 16-ричных код после IEND чанка;
  • Перезаписываем обложку MP3 файла изображением со скрытым сообщением.
Разберем построение подобной программы на интерпретируемом языке Python 2.7
Нам понадобятся такие библиотеки и модули как sys, os.patch и "Mutagen"

Для того, чтоб установить "Mutagen" необходимо выполнить (1 или 2):
  1. sudo apt-get install python-mutagen python3-mutagen
  2. pip install mutagen
Также необходимо добавить в начало скрипта # -*- coding: utf-8 -*- чтобы не было проблем с кодировкой при выполнении скрипта в консоли:
Python:
import sys, os.path
from mutagen import File
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, APIC, error

Недостатком библиотеки «Mutagen" является то, что при наличии в MP3 файле обложки альбома, перезапись его не осуществится, поэтому принудительно удаляем существующую обложку.

Python:
audio = MP3(mp3file, ID3=ID3)
audio.delete() #удаляем уже существующую обложку
audio.save()

Необходимо открыть, прочитать файл в переменную, обработать ID3 теги и сохранить полученный результат:
Python:
audio.tags.add(APIC( encoding=1, mime='image/png', type=3, data=open(filename).read() ) ) #изменяем
audio.save() #сохраняем

Извлечь стего-текст можно следующим кодом:
Python:
# -*- coding: utf-8 -*-
import binascii

file = File(mp3file)
artwork = file.tags['APIC:'].data
with open('image.png', 'wb') as img:
    img.write(artwork)
 
#Извлекаем из контейнера сообщение

IEND_chunk = "0049454e44ae426082"
filename = 'image.png'
with open(filename, 'rb') as f:
    content = f.read()
fs = binascii.hexlify(content)
a = fs.split(IEND_chunk, 1)[1]
print a.decode("hex")

У данного способа есть минус, а именно рассмотрев HEX представление MP3 файла можно без труда обнаружить стегосообщение. Но нам ничего не мешает применить шифрование, либо простое конвертирование в base10 или base2, чтобы потом встроить в PNG.
Таким образом, мы рассмотрели с вами еще один способ тайной передачи сообщений посредством внедрения информации в PNG файл, который приклеили в качестве альбома MP3.

Дописал скрипты на python!
Если хотите проверить действие данного метода - все во вложении...

codeby.net
 

Вложения

  • test.zip
    1,4 МБ · Просмотры: 651
Последнее редактирование модератором:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!