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 перевод строки
Обязательные чанки:
IHDR — заголовок файла, содержит основную информацию о изображении. Обязан быть первым чанком.
PLTE — палитра, список цветов.
IDAT — содержит, собственно, изображение. Рисунок можно разбить на несколько IDAT чанков, для потоковой передачи. В каждом файле должен быть хотя бы один IDAT чанк.
IEND — завершающий чанк, обязан быть последним в файле.
IEND чанк сигнализирует о конце файла, блок данных этого чанка не содержит ничего. Если дописать после IEND чанка в файле PNG какой-то текст, то файл так и будет определяться как изображение, более того, абсолютно никаких искажений не будет замечено.
Стего-алгоритм будет следующим:
- конвертируем текст ASCII в base16;
- дописываем 16-ричных код после IEND чанка;
- Перезаписываем обложку MP3 файла изображением со скрытым сообщением.
Нам понадобятся такие библиотеки и модули как sys, os.patch и "Mutagen"
Для того, чтоб установить "Mutagen" необходимо выполнить (1 или 2):
sudo apt-get install python-mutagen python3-mutagen
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
Вложения
Последнее редактирование модератором: