【问题标题】:How to find hidden files inside image files (Jpg/Gif/Png) [closed]如何在图像文件(Jpg/Gif/Png)中查找隐藏文件 [关闭]
【发布时间】:2013-01-05 05:51:04
【问题描述】:

我发现了一个链接,该链接显示了如何隐藏图像文件中的文件数量:http://lifehacker.com/282119/hide-files-inside-of-jpeg-images 此处有关检测的更多讨论:http://ask.metafilter.com/119943/How-to-detect-RARsEXEs-hidden-in-JPGs

我正在尝试找出以编程方式检测图像文件中是否隐藏其他文件的好方法?我应该尝试解压缩文件以查看是否有其他文件出来吗?

我没有以编程方式绑定,但在 JVM 上运行良好的东西会很棒。

更新

一种方法:

这样的事情会起作用吗(由 metafilter 上的某人建议)

$ cat orig.jpg test.zip > stacked.jpg
$ file stacked.jpg 
stacked.jpg: JPEG image data, JFIF standard 1.01
$ convert stacked.jpg stripped.jpg  # this is an ImageMagick command
$ ls -l
 11483 orig.jpg
322399 stacked.jpg
 11484 stripped.jpg
310916 test.zip

我可以将 JMagick 用于这种方法。

【问题讨论】:

  • 我已经更新了链接。你是对的,隐藏文件不会在元数据中。但是,问题仍然存在 - 我如何检测到图像文件中包含一些隐藏文件。
  • 你不能靠魔法,你可以猜到文件是如何隐藏在给定实例中的。但这可能因实例而异,例如,您可以创建不同的隐藏方法。
  • 是的,你可以通过魔法检测到 - en.wikipedia.org/wiki/Magic_number_(programming)
  • @SpiderPig 您指的是识别文件格式的幻数吗?我可以简单地删除它们。
  • @mmgp 我已经用我在互联网上找到的一种方法更新了这个问题

标签: java python image-processing hidden-files jmagick


【解决方案1】:

好问题!

如果您要检查的只是附加到文件末尾的 RAR 或 ZIP 文件 图像文件,然后通过unrarunzip 命令运行它是 最简单的方法。

如果您想要更快但不太准确的检查,您可以检查一些 表示特定类型文件的特殊文件格式签名。这 识别文件格式的常用 UNIX 工具是file。它使用一个 binary file signatures的数据库,其格式为 在magic(5) 手册页中定义。它不会找到 RAR 文件 你在 JPEG 的末尾,因为它只查看文件的开头 尝试快速识别它们,但您也许可以修改其源代码 做你想做的事。您还可以重用其文件签名数据库。如果您查看 Rar 文件部分中的 the archive file part of its database,它会显示:

# RAR archiver (Greg Roelofs, newt@uchicago.edu)
0   string      Rar!        RAR archive data,

表示如果您的 JPEG 文件包含四个字节 Rar! 会怀疑。但是您必须仔细检查Rar file format spec 以检查是否有更多的 Rar 文件结构 呈现以避免误报——该网页还包含四个字节 Rar! 但没有附加隐藏文件:P

但如果有人知道您的自动检查的详细信息,他们可以 轻松解决它们。最简单的解决方法是反转所有字节 在将文件附加到 JPEG 之前。那么你的没有 签名将捕获文件的反转版本。


如果有人真的想在图像中隐藏文件,有各种各样的 您将无法轻松检测到的方法。一般 对此的术语是“隐写术”。 Wikipedia page,为 例如,显示一张树的图片,里面有一张猫的图片 它。对于更简单的隐写方法,有统计检验 可以表示对图片做了一些有趣的事情,但如果有人 花了很多时间想出自己的方法来隐藏其他文件 内部图像,您将无法检测到它。

【讨论】:

  • @mmgp 请停止评论此线程。这里的任何人都不会欣赏你粗鲁和无益的cmets。
  • @andrew 谢谢。正如那张树猫图片所示,我根本不打算从各个方面处理隐写术。但是,我正在寻找方法来查找图像中是否隐藏了一个完全独立的文件。当然,一开始我不知道可以隐藏哪种文件格式,但我可以一个接一个地定位不同的格式。如果我以 RAR 为目标并且它实际上位于 JPEG 的末尾,那么选项可能是什么?我可以逐位检查 JPEG 以查看其中是否包含 RAR 吗?我该怎么做?
  • @Jayson 在附加了 RAR 文件的情况下,是否附加到 JPEG、PNG 或其他任何文件都无关紧要。存档部分在图像文件格式定义的部分之外。 RAR 文件以字符串Rar! 开头,因此您可以逐字节扫描直到找到该字符串,然后将这些字节视为RAR 文件——但unrar 工具已经这样做了。要做一些更复杂的事情,你基本上必须在 Java 中重新实现unrar:/
【解决方案2】:

您可以搜索文件签名。 http://en.wikipedia.org/wiki/List_of_file_signatures 例如对于 7z 文件,签名是 37 7A BC AF 27 1C 对于 rar 文件,它是 52 61 72 21 1A 07 00 对于 zip,它是 50 4B 03 04 在十六进制编辑器中查看压缩文件,例如高xD

【讨论】:

  • 当然它只适用于视频演示中隐藏的文件。
【解决方案3】:

要查看文件中是否附加了任何元数据或其他信息,您可以对图像进行解码并重新编码以查看大小是否显着减小。对于 JPEG 文件,您可能需要执行无损旋转等操作,以保留原始 DCT 数据,否则文件大小可能仅因编码差异而发生变化。

较小的结果不能证明隐藏数据,但它表明您需要仔细查看。

你从来没有分享过你提出这个问题的动机,但我猜它是关于将图像下载到公共站点。在这种情况下,您真的不应该关心提交的图像是否包含无关数据,您应该只清理输入。解码/重新编码过程非常适合。

【讨论】:

  • 老实说,我不明白这是怎么回事。您假设文件可以被解码,但是如果我(作为隐藏数据的人)删除了文件解码所需的数据怎么办?我处理这些文件没有任何问题,因为我知道如何删除它们。
  • @mmgp,我以为我们是从假设我们有一个有效的图像文件开始的。显然,如果你发明了自己的图像文件格式,你可以隐藏任何你想要的东西。
  • @mmgp,我很抱歉,我的回答不清楚,您对此做出了反应。我的意思是解码数据的图像部分,而不是未知部分。为了清楚起见,我稍微改变了措辞。
  • 如果您不知道数据的实际格式,问题是获取数据的图像部分。即使我们采用最简单的图像格式,例如 netpbm 的图像格式,并简单地将第一行与第二行交换,现成的工具也不会尝试读取它,因为它无法通过最简单的测试来尝试读取它识别它。在我们确定了很多先决条件之后,这个问题可能是可以回答的。就目前而言,它不能,因为我们可以编造任何隐藏过程,并且不需要发明新的格式,只需将其打乱一点即可。
  • @mmgp,我在问题中没有看到任何需要破译隐藏内容的内容。这只是一个确定在伪装成有效图像文件的文件上是否存在 隐藏内容的问题。创建一个不是有效图像的文件也超出了问题的范围。您对问题的误解近乎拖钓。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2012-04-20
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
相关资源
最近更新 更多