【技术分享】照片损坏与文件碎片修复
近日帮朋友恢复了一个U盘数据,根据描述其中大部分数据都是照片文件,由于U盘插入电脑可以正常识别,所以自己用数据恢复软件进行了扫描和恢复,但恢复结果并不理想,恢复出的照片文件状态是正常的。更换过多款图片查看器软件尝试打开图片但图片状态都有问题。
从发过来的几张照片中可以看到照片除了一些状态完全正常的以外,有一些缩略图预览正常但打开后图片异常、还有一些可以正常打开但图片中夹杂一些乱七八糟的条纹色带或者图片只能显示一半,另外还有一些完全损坏的照片。
单从故障表现来看出应该是出现了数据偏移导致文件碎片化,另外还有一些图片文件应该是被一些干扰数据破坏。没什么好办法,要来了U盘的镜像,先用数据恢复软件做一遍逻辑扫描吧,看是否能通过文件签名的方式恢复出一些数据。
TIMEHOST TECHNOLOGY
文件签名恢复
常规的数据恢复可以根据文件的签名信息进行数据文件的恢复,对于JPG图片文件而言其文件签名信息位于该文件的头部,另外在文件的尾部也具有签名字节。
0xFF D8文件的标志头
0xFF D9文件的尾部签名
(JPG文件)
所谓文件签名恢复就是根据不同文件的特征,尝试在硬盘底层寻找签名字节,有些文件在文件元数据中记录着文件的大小字节数,那么在寻找到文件签名后便可根据文件大小将文件进行恢复,比如BMP文件。
如下图所示,文件签名0x42 4D之后的4个字节表示文件自身的大小字节数,即1537974字节。当数据恢复软件发现BMP文件的标志头后会紧接着读取到文件的大小,然后按照记录的数据将该文件恢复出来。
而有些文件并不会记录文件自身大小,那么在签名恢复时则会在寻找到第一个文件签名后继续向下寻找,只到找到第二个文件签名为止,然后两个文件签名之间的算作一个文件。
TIMEHOST TECHNOLOGY
碎片恢复
相信在日常工作中大家也遇到过这种恢复出的照片异常的情况,那么在恢复之前应该先判断一下哪些是可以恢复的。可以将图片损坏分三类(类别名称是我个人的称呼):
1. 色彩存储位异常
JPG图片中,图像的实际内容都是按一个个的像素点进行颜色存储的从而形成一张完整的图片,而由于种种原因会导致其中一些存储位出现偏差和异常,则会导致图中所示这种情况,图片可以正常查看到其中会掺杂一些其他颜色或者条纹。
(色彩存储位异常)
通过下面这张示意图更好理解。这种损坏情况一般很难手工恢复,因为我们无从得知损坏的颜色位原本的数值。有些修复软件可以进行尝试性的修复,其原理是根据损坏位置周边位中所记录的数值通过算法计算出合适的数值并尝试填入损坏位从而达到修复的目的。
2. 图像数据异常
这类故障通常照片可以正常打开,但只能显示一半的内容,有横向和纵向两种遮挡情况;另外这类故障的表现还可能是缩略图可以正常预览。
这种情况是有几率进行修复的,出现这种故障的原因是图片文件发生了数据偏移或者图片数据中被插入了其他数据片段,下图这种情况很明显是图片被插入了一段规律数据所造成的。
(图像数据异常)
3. 严重损坏
通常缩略图无法显示,并且文件无法正常打开。一般这种情况查看文件底层会发现文件底层数据全00,或者底层被填充了无序的随机数据。所以遇到这种情况便没有办法再进行修复了。
(严重损坏)
TIMEHOST TECHNOLOGY
开始恢复
文件缩略图预览正常,但打开显示异常。说明文件属于图像数据异常,看样子应该是出现了数据偏移或者覆盖所致。
(预览正常) (打开异常)
1.查看文件底层
底层查看该文件可见其文件头状态正常。
但其文件尾部并没有以0xFF D9结尾,说明文件自身有问题,还需要分析U盘镜像来查找原因。
2. 定位文件位置
分析镜像文件,在镜像文件中寻找到这张照片的所在位置。文件起始扇区为40984,。通过偏移地址0x12H-0x13H处可知该照片存在缩略图。
3. 操作过程
前面提到,JPG图片的标志头为0xFF D8,文件尾部签名为0xFF D9,所以可在此扇区处向下搜索十六进制数0xFF D9来确定文件尾部位置。
此时光标停放在42993扇区位置,在此位置处找到一处0xFF D9。但通过文件大小可知,此处的0xFF D9并非该文件的结束位置(42993-40984=2009扇区),实际结束位置应该还要再向后一些。
通过继续向下搜索,在43534扇区寻找到了0xFF D9,经计算此处的结束位置才是该文件真实的文件尾部(43534-40984=2550,1305600字节)。
但将文件完整提取出来后还是不太对,文件还是无法正常显示。
4. 分析思路
通过分析,问题出在了第一处0xFF D9,即42993扇区。该位置有字节0xFF D9,说明此处可能是某个文件的结束位置,那么由此处再向前搜索十六进制数0xFF D8尝试是否能寻找到。
如图可见,在42946扇区处,寻找到了文件的标志头0xFF D8。经过验证此处的数据并非该图片的缩略图。
所以至此就清楚了原因,之所以该文件显示异常是因为完整的图片数据中被不明原因插入了另一张图片。
5. 文件拼接
文件起始位置40984扇区至42945扇区(0xFF D8的前一个扇区)为片段1;
42943扇区处的0xFF D9后至最后一个0xFF D9处为片段2;
将两个片段进行拼接即成功的将该文件完整的修复。
END