myr*_*dio 0 jpeg file-format corrupt
前段时间我的外部硬盘崩溃了(完全停止工作),我不得不从另一个硬盘中恢复文件,这些文件已被删除。一段时间后,我意识到一些已恢复的图片已损坏。
我无法通过任何图像程序打开这些图像。当我在 .jpgs 上运行“文件”命令时,我得到:
DSCN9129.JPG: JPEG image data, EXIF standard 2.2
DSCN9130.JPG: JPEG image data, EXIF standard 2.2
DSCN9131.JPG: JPEG image data, EXIF standard 2.2
DSCN9132.JPG: DOS executable (COM)
DSCN9133.JPG: data
DSCN9134.JPG: data
DSCN9135.JPG: JPEG image data, EXIF standard 2.2
DSCN9136.JPG: data
DSCN9137.JPG: data
DSCN9138.JPG: data
DSCN9139.JPG: data
DSCN9140.JPG: 8086 relocatable (Microsoft)
DSCN9141.JPG: data
DSCN9142.JPG: data
Run Code Online (Sandbox Code Playgroud)
在那里,我们可以注意到有些图像还可以,有些无法识别,有些则被错误地解释为其他类型的文件。
我正在上传 2 个示例图像:
http://ul.to/u7emvxp8 ---> DSCN9133.JPG(已损坏)
http://ul.to/zegf7q8a ---> DSCN9131.JPG(未损坏)
我使用这个 python 代码来查看文件中的内容:
import sys, os
with open("./images/DSCN9133.JPG", "rb") as f:
stri=""
i=0
byte = f.read(1)
while byte != "" and i < 1000:
i=i+1
stri = stri+" "+hex(ord(byte))
byte = f.read(1)
print(stri)
Run Code Online (Sandbox Code Playgroud)
我在这里打印损坏和未损坏图像的前几个字节。
损坏:
0x6b 0xe8 0xf2 0xd6 0x9b 0xba 0x77 0xb4 0x97 0xd1 0x69 0xbb 0x2e 0xe 0xda 0x8d 0x4 0xb7 0x7 0x33 0xb2 0xf2 0x10 0x35 0x58 0x4e 0xa1 0x80 0x4c 0x2b 0x1f 0x8f 0x9 0xd0 0xaf 0x22 0x5 0x2d 0x87 0xab 0x81 0xb0 0x6c 0x7a 0xd8 0x4c 0x7b 0x52 0xf1 0xe9 0xf3 0xe9 0xca 0xa6 0x4 0xcb 0x9c 0x7b 0x64 0x34 0x98 0x46 0x4 0xd1 0xa6 0x30 0x60 0xb5 0xae 0xcb 0xf2 0x56 0xda 0x20 0x15 0xcf 0x7 0x61 0x2c 0xc 0x3f 0x44 0x67 0x49 0x0 0x41 0xfe 0xac 0x4f 0x15 0xcf 0x9d 0x3a 0x6b 0xdb 0x94 0xb5 0x85 0xa 0x4 0x34 0x7d 0xfd 0x9 0xba 0x86 0xec 0x2f 0xe9 0xa9 0xb6 0xaa 0x62 0x80 0xbb 0x43 0x96 0xa1 0x4d 0x54 0xfa 0x1b 0xdf 0x33 0xab 0x93 0x8a 0xd6 0xdc 0x33 0xe1 0x9d 0x91 0x5a 0x4e 0xd0 0xe5 0x6a 0x1c 0x95 0x72 0x53 0x9f 0x27 0x9a 0x1e 0x8f 0x7d 0x1d 0xad 0x34 0x7b 0xf6 0xc8 0xf 0xde 0xe1 0x48 0xa7 0x58 0x52 0x4d 0x16 0x2b 0x53 0x1b 0x2 0x2a 0x93 0xc6 0x7c 0x76 0x3d 0x78 0xca 0xe2 0x90 0xd3 0x55 0xdb 0x32 0x62 0x1d 0x4f 0xd1 0xd1 0xdc 0x13 0xf 0xb6 0x4e 0x4e 0x66
Run Code Online (Sandbox Code Playgroud)
未损坏:
0xff 0xd8 0xff 0xe1 0x8a 0x45 0x45 0x78 0x69 0x66 0x0 0x0 0x49 0x49 0x2a 0x0 0x8 0x0 0x0 0x0 0xb 0x0 0xe 0x1 0x2 0x0 0xb 0x0 0x0 0x0 0x92 0x0 0x0 0x0 0xf 0x1 0x2 0x0 0x6 0x0 0x0 0x0 0xb2 0x0 0x0 0x0 0x10 0x1 0x2 0x0 0x6 0x0 0x0 0x0 0xca 0x0 0x0 0x0 0x12 0x1 0x3 0x0 0x1 0x0 0x0 0x0 0x1 0x0 0x0 0x0 0x1a 0x1 0x5 0x0 0x1 0x0 0x0 0x0 0xd8 0x0 0x0 0x0 0x1b 0x1 0x5 0x0 0x1 0x0 0x0 0x0 0xe0 0x0 0x0 0x0 0x28 0x1 0x3 0x0 0x1 0x0 0x0 0x0 0x2 0x0 0x0 0x0 0x31 0x1 0x2 0x0 0xa 0x0 0x0 0x0 0xe8 0x0 0x0 0x0 0x32 0x1 0x2 0x0 0x14 0x0 0x0 0x0 0x8 0x1 0x0 0x0 0x13 0x2 0x3 0x0 0x1 0x0 0x0 0x0 0x2 0x0 0x0 0x0 0x69 0x87 0x4 0x0 0x1 0x0 0x0 0x0 0x1c 0x1 0x0 0x0 0xa4 0x3 0x0 0x0 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x4e 0x49 0x4b 0x4f 0x4e 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x45 0x33 0x37 0x30 0x30 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x2c 0x1 0x0 0x0 0x1 0x0 0x0 0x0 0x2c
Run Code Online (Sandbox Code Playgroud)
但我不知道jpg是由什么组成的...
有人可以给我建议我应该遵循的方向,以找出是否可以修复图像?
我如何判断像素信息是否存在,或者我一直在保留随机数据?
我认为知道图像的大小是一件好事,但当然,由于这些图像是压缩的,所以不会那么容易。
编辑:我发现这个http://www.w3.org/Graphics/JPEG/itu-t81.pdf应该对此有用,但我也想知道如何判断像素数据是否存在.
EDIT2:我最初的问题集中在以下几点(我澄清是因为我意识到它不够清楚)我认为这些图像上的字节可能是 jpeg 的一部分。可能是字节刚移位或头丢失,也许有一种方法可以探索数据是否存在。当然,如果这些是 BMP 或某个国王的未压缩图像,情况可能就是这样。作为 jpg,我认为被压缩会使一切变得更加困难,并非完全不可能。但是,我更一般地想知道,如果我告诉某人在某些字节中包含来自图像的像素信息,我们将如何进行?
小智 5
这是您的整个问题:“我必须从另一个硬盘驱动器中恢复它们已被删除的文件”
创建任何文件时,操作系统(通常)会跨多个块写入数据,并将指向这些块的指针放置在索引文件中。当一个文件被删除时,这些索引和它们指向的块被标记为“空闲”(如“磁盘中现在可以存储数据的区域”)。
重要的是要了解被删除的文件仍然保留在磁盘上,并且只有指针被重写。
当然,这正是数据恢复的工作原理。恢复程序会扫描磁盘的“已删除”部分,寻找可识别的数据。当它发现某些东西时,它会以各种方式保存该数据,并且通常会评估发现的数据是否实际上是“可恢复的”。
数据识别的一种方法是通过“幻数”,也就是“文件签名”。对于 JPG 文件,文件开头和结尾的幻数分别为:0xFFD8 和 0xFFD9。
如果您查看发布的数据,您会发现“未损坏”文件确实以“0xFFD8”开头,并且恢复程序会将其标记为 JPG 文件。
然而......当一个文件被删除时,正如我之前所说,它的数据块对于操作系统来说是“免费的”,可以写入新的用户数据,覆盖旧数据。这通常会导致说“xyz.jpg”在被删除之前最初跨越 3 个块。你继续使用你的电脑,在某个时候,给 mabel 姨妈的一封信的一部分被写入其中一个块,只有原始 xyz.jpg 的其他 2 个块可以恢复(即使这样,有很多原因恢复程序可能只找到这些块之一,而不是两者)
OTOH,一个恢复程序 mat 也恢复一个索引指针,并抓住那里的任何东西。因此,如果恢复的文件指针显示“DSCN9132.JPG”驻留在某某地址,则恢复程序将抓取数据块,将其命名为“DSCN9132.JPG”,但将数据类型标识为“DOS 可执行文件” (COM)" 文件 - 因为这是由于被覆盖而现在实际存在的文件类型。这是获得如列表示例中所示的描述结果的原因之一。
顺便说一句,当使用图形程序查看您在恢复目录中看到的 JPG 文件时,恢复图像文件的另一个结果是:有些图像看起来很棒,有些图像有下半部分(“一半”是主观的) : 可能是底部几行到几乎整个图像丢失,有些会产生文件错误。
这不是关于文件删除、恢复或损坏的详尽或写得很好的论文,但我认为您的问题值得某种答案,我希望它为您提供有关这些系统如何工作的一些线索。
归档时间: |
|
查看次数: |
4484 次 |
最近记录: |