通过文件签名恢复数据

文件签名

大多数文件都有自己的文件签名File Signature,也叫文件头文件尾,用来作为某种文件类型的标志。

取证大喇叭公众号的头像是一张jpeg格式的图片,jpeg格式文件的文件头是FF D8 FF E0,文件尾是FF D9

文件头
文件尾
文件签名可以出现在文件开头的某个偏移处,许多情况下,也出现在文件末尾,通过在磁盘某块区域扫描这些文件签名,可以定位并恢复文件,这个过程在很多地方也叫做File Carving文件雕刻。通常在文件系统或者分区表严重损坏或者覆盖的时候使用。

常用工具

数据恢复工具R-Studio中已经内置了很多主流的文件格式的签名,利用这些签名可以恢复出相当一部分丢失的数据,除此之外,也可以使用EnCase的File Carving功能,Winhex的快照功能实现扫描文件签名。经过一些测试,发现一直在积极更新的R-Studio工具更加可靠易用。

R-Studio已知文件类型

自定义文件格式

R-Studio中内置了主流的文件类型,但遇到一些罕见的文件格式,例如不同厂商的摄像机的产生的媒体文件,这时就需要自己定义文件格式,包括文件签名,偏移地址等信息,但其实整个过程很简单,不需要太多基础知识就能实现。

我用三个媒体格式mxf的文件来记录添加的过程。

分析文件头

将这三个文件用Winhex或者用R-Studio自带的十六进制编辑器打开,查看文件开始部分。




发现前三行都是一样的,这三行很有可能都是文件头,但是我想要搜出来的结果多一点(翻车伏笔),我们少选一点,只把最前面的四个字节06 0E 2B 34作为文件头。

然后我们需要按照参考从Encase Forensic中找到的GREP Symbols来改变格式。


我们提取的是四个HEX06 0E 2B 34,按照上图只需要在每个HEX字节前面加\x就行了,转换好以后就是\x06\x0E\x2B\x34

还有一种更简单的方式,直接在Winhex中选中文件头,右键-编辑-复制选块-GREP HEX也可以,复制出来的也是\x06\x0E\x2B\x34


R-Studio的十六进制编辑器同样也可以

分析文件尾

和文件头一样的操作,发现文件尾签名是\x00\x30



创建自定义格式

打开R-Studio-工具-设置-已知文件类型-编辑用户的文件类型


点击创建文件类型,ID默认,组位置随意,默认互联网相关文件下,描述位置我们就写测试用的媒体文件mxf,扩展写mxf,基本信息就填好了。


点击开始-添加签名-粘贴文件头签名-点击结束-添加签名-粘贴文件尾签名-文件尾签名是两个字节填入From。


点击保存并重新加载-关闭,重新看一下已知类型中就有了刚创建的文件类型。

开始扫描

我们把这三个文件放到目标磁盘,右键目标磁盘,点击扫描,在文件系统中取消勾选所有分区选项,在已知文件类型中只保留我们自己创建的格式。


点击扫描,就开始了。

翻车解析

通过文件签名扫描出来的文件都在RawFiles原始文件中,右边会显示详细扫描进度和结果,我们发现扫出来文件一万几,这得看到什么时候,重新用Winhex看了下,发现mxf文件开始部分会有大量重复部分,重复部分刚好是我设置的文件头….


于是我将前三行相同部分全部作为文件头,最后全部相同的部分5个字节作为文件尾签名。


重新进行扫描,这次是我们想要的结果了。


这个情况比较特殊,从中得到的教训是,签名不要太长或者太短。

导出文件

点进RawFiles原始文件中,就能看到扫描出的文件,字节数有出入,但是都能被512整除,猜测是写入了扇区剩下的空数据。


右键选择文件导出后用PotPlayer打开看一下,正常播放。

缺点

这种方法也有其自身的缺点,比如它只能恢复未碎片化的连续文件,像NTFS中簇流分好几段就不好弄了,经常还会扫描到上文出现的一万几的无关文件等,对于许多情况来说,这是基本是最后的补救措施。