7

我遇到了一个链接,该链接显示了如何隐藏图像文件中的文件数量: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。

4

3 回答 3

2

好问题!

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

如果您想要更快但不太准确的检查,您可以检查一些指示某些文件类型的特殊文件格式签名。识别文件格式的常用 UNIX 工具是file. 它使用二进制文件签名数据库,其格式在magic(5)手册页中定义。它不会在 JPEG 的末尾为您找到 RAR 文件,因为它只查看文件的开头以尝试快速识别它们,但您可以修改其源代码以执行您想要的操作。您还可以重用其文件签名数据库。如果您在 Rar 文件部分查看其数据库的存档文件部分,它会显示:

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

这表明您的 JPEG 文件是否包含Rar!可疑的四个字节。但是您必须详细检查Rar 文件格式规范,以检查是否存在更多 Rar 文件结构以避免误报——该网页也包含四个字节 Rar!,但没有附加隐藏文件:P

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


如果有人真的想在图像中隐藏文件,那么有各种方法可以做到这一点,您将无法轻易检测到。对此的通用术语是“隐写术”。例如,维基百科页面显示了一张树木图片,其中隐藏了一张猫的图片。对于更简单的隐写方法,有统计测试可以表明对图片做了一些有趣的事情,但如果有人花很多时间想出自己的方法来隐藏图像中的其他文件,你将无法检测它。

于 2013-01-22T04:11:31.090 回答
0

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

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

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

于 2013-01-22T03:56:21.423 回答
0

您可以搜索文件签名。 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 看看十六进制编辑器中的压缩文件,例如 HxD

于 2013-01-22T04:14:17.307 回答