
Embed a payload inside a PNG file
ペイロードを複数の IDAT セクションに分割して PNG ファイル内に埋め込みます。各セクションは、RC4 暗号化アルゴリズムを使用して、それぞれ独自の 16バイト鍵で個別に暗号化されます。
このリポジトリには、以下の2つの実装が含まれています:
EmbedPayloadInPng.py - 入力ペイロードを指定された PNG ファイルに埋め込む Python スクリプトです。FetchPayloadFromPng - EmbedPayloadInPng.py が出力した PNG ファイルからペイロードを抽出し、ExtractDecryptedPayload 関数を使用して復号化します。EmbedPayloadInPng.py を使用して、ペイロードが埋め込まれた PNG ファイルを作成します:
ペイロードが埋め込まれた PNG ファイル Output.png は、元の PNG ファイルと同じ PNG ファイルです。
https://github.com/user-attachments/assets/bec6f597-9955-4552-80f7-f484bd5754c3
EmbedPayloadInPng.py が出力した MARKED_IDAT_HASH マクロ定義をコピーし、FetchPayloadFromPng プロジェクト内の既存の定義をこちらで置き換えます。前述のとおり、EmbedPayloadInPng.py はペイロードファイルを PNG ファイル内に埋め込む役割を担います。以下は、ペイロードが埋め込まれた PNG ファイルの構造です。

IDAT セクションの最大サイズは8192バイトであるため、ペイロードは複数の IDAT セクションに分割されます。各セクションのサイズは(8192 - 16 [RC4 鍵長])に相当します。さらに、最後の IDAT セクションには、ペイロードの残りのバイトが格納されます。
以下の画像は、EmbedPayloadInPng.py の出力内容を説明し、作成された PNG ファイルの構造と比較したものです:


IDAT セクション。この画像は、CRC ハッシュの位置と、事前のランダム IDAT セクションのサイズ(黄)も示しています。

