如何提取附加到 png 文件的二进制数据?

use*_*739 6 python awk command-line png

看来,如果我将二进制数据附加到 png 文件的末尾,则该 png 文件仍然可以查看。所以 png 文件仍然是一个有效的文件。有没有办法从未记录原始文件大小的 png 文件中自动提取此类尾随数据?

Bri*_*ian 7

PNG 以“IEND”块结尾。最后 12 个字节看起来总是一样的。所以你也许可以使用:

dd if=appended.png of=extracted.png bs=1 count=$((($(od -t x1 appended.png | awk '{$1=""}1' | tr -d \\n | sed "s/00 00 00 00 49 45 4e 44 ae 42 60 82/XMATCHX/" | tr X \\n  | grep -b MATCH | cut -f1 -d:)-2)/3+12))
Run Code Online (Sandbox Code Playgroud)

上面的内容比在 macos 上工作所需的时间要长一点,它的处理方式grep -b与 GNU grep 不同。

其要点是:

  • 使用 dd 从开头提取 count 个字节appended.png
  • 通过以下方式确定计数:
    • 使用 od/awk/tr 将文件转换为一行上空格分隔字节的十六进制字符串
    • 搜索 IEND 模式并MATCH使用 sed/tr替换
    • grep -b使用and获取 MATCH 的偏移量cut
    • 计算实际文件长度(减去额外空格/CR,除以每字节 3 个十六进制字符/空格,为 IEND len 添加 12)

注意:即使不是不可能,12 字节 IEND 块也不太可能出现在 PNG 中,但上面没有检查它。

这是一次有趣的冠状病毒练习 - 谢谢!