
Embed a payload inside a PNG file
Встраивание пейлоада в PNG-файл путём разделения пейлоада на несколько секций IDAT. Каждая секция шифруется индивидуально с использованием собственного 16-байтового ключа с помощью алгоритма шифрования RC4.
Главная страница Maldev Academy
Учебная программа Maldev Academy
Этот репозиторий содержит две реализации:
EmbedPayloadInPng.py — Python-скрипт для встраивания входного пейлоада в указанный PNG-файл.FetchPayloadFromPng — извлекает пейлоад из PNG-файла, созданного EmbedPayloadInPng.py, и расшифровывает его с помощью функции ExtractDecryptedPayload.EmbedPayloadInPng.py для создания PNG-файла со встроенным пейлоадом:
PNG-файл со встроенным пейлоадом Output.png — это тот же PNG-файл, что и исходный.
https://github.com/user-attachments/assets/bec6f597-9955-4552-80f7-f484bd5754c3
MARKED_IDAT_HASH, выведенное EmbedPayloadInPng.py, и замените им существующее определение в проекте FetchPayloadFromPng здесь.Как упоминалось ранее, EmbedPayloadInPng.py отвечает за встраивание файла пейлоада в PNG-файл. Ниже представлена структура PNG-файла со встроенным пейлоадом.

Поскольку максимальный размер секции IDAT составляет 8192 байта, наш пейлоад разбивается на несколько секций IDAT. Каждая секция имеет размер, равный (8192 - 16 [длина ключа RC4]). Кроме того, последняя секция IDAT будет содержать оставшиеся байты пейлоада.
Следующие изображения поясняют вывод EmbedPayloadInPng.py и сравнивают его со структурой созданного PNG-файла:

IDAT, созданная для обозначения начала нашего пейлоада. CRC-хэш этой секции используется в нашем C-коде для идентификации начала нашего пейлоада в PNG-файле.
IDAT с пейлоадом, следующая за нашей случайной секцией (выделена синим). Это изображение также демонстрирует положение CRC-хэша и размер рандомизированной секции IDAT заранее (выделено жёлтым).
IDAT с пейлоадом, расположенный в конце секции после зашифрованного первого фрагмента нашего пейлоада.
IDAT с пейлоадом.