
Embed a payload inside a PNG file
通过将载荷拆分到多个 IDAT 区块中,将载荷嵌入 PNG 文件。每个区块使用 RC4 加密算法,以各自的 16 字节密钥单独加密。
本仓库包含两种实现:
EmbedPayloadInPng.py - 用于将输入载荷嵌入指定 PNG 文件的 Python 脚本。FetchPayloadFromPng - 从 EmbedPayloadInPng.py 输出的 PNG 文件中提取载荷,并使用 ExtractDecryptedPayload 函数进行解密。EmbedPayloadInPng.py 创建嵌入载荷的 PNG 文件:
嵌入载荷的 PNG 文件 Output.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 区块的大小(黄色)。
IDAT 区块的 CRC 哈希,位于该区块的末尾,紧随加密后的第一个载荷块之后。
IDAT 区块的开头。