
Embed a payload inside a PNG file
Betten Sie eine Payload in eine PNG-Datei ein, indem Sie die Payload auf mehrere IDAT-Abschnitte verteilen. Jeder Abschnitt wird einzeln mit einem eigenen 16-Byte-Schlüssel unter Verwendung des RC4-Verschlüsselungsalgorithmus verschlüsselt.
Dieses Repository besteht aus zwei Implementierungen:
EmbedPayloadInPng.py – Python-Skript zum Einbetten einer Eingabe-Payload in eine angegebene PNG-Datei.FetchPayloadFromPng – Extrahiert die Payload aus der von EmbedPayloadInPng.py erzeugten PNG-Datei und entschlüsselt sie mithilfe der Funktion ExtractDecryptedPayload.EmbedPayloadInPng.py, um die PNG-Datei mit eingebetteter Payload zu erstellen:
Die PNG-Datei mit eingebetteter Payload, Output.png, ist dieselbe .PNG-Datei wie das Original.
https://github.com/user-attachments/assets/bec6f597-9955-4552-80f7-f484bd5754c3
EmbedPayloadInPng.py ausgegebene Makrodefinition MARKED_IDAT_HASH und ersetzen Sie damit die vorhandene im Projekt FetchPayloadFromPng hier.Wie bereits erwähnt, ist EmbedPayloadInPng.py dafür verantwortlich, die Payload-Datei in eine PNG-Datei einzubetten. Nachfolgend ist die Struktur einer PNG-Datei mit eingebetteter Payload dargestellt.

Da die maximale Größe eines IDAT-Abschnitts 8192 Bytes beträgt, wird unsere Payload auf mehrere IDAT-Abschnitte aufgeteilt. Jeder Abschnitt hat eine Größe, die (8192 - 16 [RC4-Schlüssellänge]) entspricht. Darüber hinaus enthält der letzte IDAT-Abschnitt die verbleibenden Bytes der Payload.
Die folgenden Bilder erläutern die Ausgabe von EmbedPayloadInPng.py und vergleichen sie mit der Struktur der erstellten PNG-Datei:


IDAT-Abschnitt, der auf unseren zufälligen Abschnitt folgt (in Blau). Dieses Bild zeigt außerdem die Position des CRC-Hashs und die Größe des zuvor randomisierten IDAT-Abschnitts (in Gelb).

