是否有可能以图像文件(如 PNG 图像)的形式存储任意数据(如文档或程序)?我担心有人可能会将恶意软件使用的数据编码到图像中,并将其上传到 Flickr 等网站。
答案1
对于大多数文件格式来说,是的。例如,PNG 文件由类型化的块组成,因此您可以添加名为aAAA
或 的块lOLZ
,其中包含任意数据。JPEG 具有“特定于应用程序”的段;JPEG 中的 Exif 标签实际上是此类标签内的完整 TIFF 结构。其他格式(如 GIF)不可扩展,但它们通常有一个用于文本注释的字段;APPn
这已经被滥用了。
然而,也有办法防止这种情况发生 - 例如,Imgur 等网站会使用pngcrush
或类似工具自动处理所有上传内容,删除任何不是绝对需要的内容。
但归根结底,数据交换是无法阻止的。除了上述图像隐写术之外,还有 Twitter 及其克隆版本、数十个 pastebin(其中难以理解的帖子被认为是相当正常的)、旧博客文章的评论形式(我仍然试图记住这是在哪本书中提出的)……更现实的是,大多数恶意软件只会联系他们“自己的”服务器。
答案2
不存在恶意数据。数据只有在被执行时才会变成恶意的,执行后它就不再是数据了。这种事情的问题不在于图像,而在于包含导致数据被执行的错误的软件(Windows、Photoshop 等)。这显然是主要软件供应商关注的重要问题,你可以相当肯定他们会在发现这些错误后很快修复它们。
话虽如此,正如其他答案中所述,可以将不属于图像本身的数据添加到文件中。但是,这通常很有用,甚至是标准做法。我认为,与在互联网上找到的随机图像相比,对可执行文件要小心谨慎得多。这里的风险并不大。
答案3
图像文件(包括 PNG)具有特定格式。文件的标头部分描述图像,其后的任何数据都将被解释为图像数据(基于标头)。
但是,您可以将任意数据附加到 PNG 的末尾,超出图像数据的范围,然后稍后读取这些数据。这很容易检测 - 图像数据末尾不应该有任何数据。
或者,你可以使用以下方式将任意数据编码到图像本身中隐写术。这会以一种基本上无法察觉的方式巧妙地改变图像本身,除非您确切知道要寻找什么(通常需要事先了解编码方法)。