最近连续遇到恢复未知类型文件的需求(文件小众,尝试各个数据恢复工具均不支持恢复)。部分情况下,可以尝试文件系统恢复。然而多数情况下,这类需求还伴随着文件系统严重损坏的问题,所以只能手工操作进行恢复。本文记录了一个利用Xways恢复这类未知签名文件的方法。
需要工具有:Notepad、Xways或Winhex(其实掌握基本原理后,用任何十六进制编辑、搜索的工具都可以完成这项工作)
注:具有理论基础的可以直接跳到第二章。
一、基本原理
在当前数据恢复领域中,主流的恢复技术包括文件签名恢复及文件系统恢复。其中,文件系统恢复技术主要依赖于文件系统的元数据(如目录结构、文件分配表等)来定位和恢复丢失或损坏的文件。常见方法包括扫描文件系统结构、分析未分配的存储空间、利用日志或备份恢复元数据等。该技术对文件系统类型(如NTFS、FAT32、EXT4)有较强依赖性,通常能恢复完整文件名、路径及存储位置。然而,若文件系统元数据损坏严重(如格式化、分区表损坏),恢复成功率将显著降低;而文件签名恢复通过识别文件头部/尾部的特定标识(如文件的
JPEG),不受文件系统结构限制。下面列出了文件签名恢复的基本原理。
FF D8 FF
文件签名恢复的技术原理
文件签名恢复依赖文件的二进制特征,典型流程包括:
特征提取:预定义文件类型的头部/尾部标记(如PDF的、ZIP的
%PDF-)。块扫描:逐扇区搜索特征标记,识别潜在文件起始位置。验证与重组:根据文件结构规则(如PNG的IHDR块)验证数据完整性,拼接连续或碎片化数据块。
50 4B 03 04
该技术对格式化、分区丢失等场景效果显著,但碎片化文件可能恢复不完整。工具如PhotoRec、Foremost均基于此原理实现。
二、Xways未知签名文件搜索与恢复功能介绍
XWays是通过读取File Type Categories User.txt、File Type Categories.txt、File Type Signatures Check Only.txt、File Type Signatures Search.txt这四个配置文件进行文件筛选、文件签名识别、文件签名恢复的。这些文件都在XWays程序的安装目录下。经测试,File Type Categories.txt用于文件类型筛选、File Type Signatures Check Only.txt用于文件签名识别、File Type Signatures Search.txt用于文件签名恢复。
需要了解XWays运行细节的可以参考程序手册,链接:X-Ways Forensics & WinHex Manual
对于File Type Categories.txt,手册上有明确的释义。这是关键内容的翻译结果:“类别名称以三个星号和一个空格 (***) 开头。接下来是属于该类别的文件类型列表,每行一个。每行必须以“+”或“-”开头,其中“+”表示该类型已在文件类型过滤器中选中。之后是该文件类型的典型扩展名,加上一个空格,再后跟文件类型的描述。扩展名只能使用小写字母。相同的文件扩展名/类型可以出现在多个类别中”
对于File Type Signatures Check Only.txt,共有“Description” “Extensions” “Header” “Offset” “Footer” “Default size” “Flags”七个字段。各字段释义如下:
| 字段 | 含义 | 示例解析 |
|---|---|---|
| Description | 文件类型描述 | “JPEG”, “PNG”, “GIF”等 |
| Extensions | 文件扩展名列表 | 分号分隔,如”JPG;jpeg;jpe” |
| Header | 文件头签名模式 | 十六进制或正则表达式 |
| Offset | 签名偏移量 | “0”表示从文件开始 |
| Footer | 文件尾签名 | 可选,用于确定文件结束 |
| Default size | 文件大小范围 | “最小/最大”字节数 |
| Flags | 标志位 | 特殊处理标志 |
在XWays的预定义文件类型中,File Type Signatures Check Only.txt中大多只定义了前四个(对于文件签名识别来说确实也不需要后面的字段)。
最后就是File Type Signatures Search.txt,这个配置文件是能否成功恢复的关键。字段与上述File Type Signatures Check Only.txt的完全一致,但是这里除最后“Flags”字段可以不填以外,其他最好都要明确填写。这里就“Footer”有些疑惑,XWays的预定义文件类型中,这个字段都是“~”+数字,问了AI说是定位文件结束前XX字节的意思,但是这么解释的话很多预定义文件类型都只定义了位置却没有定义文件结束标识。好在有部分预定义文件类型在这填的是明确的文件结束标识或正则表达式,说明这二者都是可用的,那就足够了。
三、示例演示
这里我用一个.ABCD后缀、文件头签名为“AA BB CC DD 01 02 03 04”、文件尾签名为“01 02 03 04 AA BB CC DD”的自定义文件做示例。在U盘中创建这个文件后删除。
首先在File Type Categories.txt结尾处追加文件后缀及描述,如图。

然后在File Type Signatures Check Only.txt结尾处添加文件头签名和偏移量,如图。注意“ABCDtest”是描述,“ABCD”是你要添加的文件对应后缀,“xAA…”代表文件头签名(对于小白来说,可以把你找到的特殊文件拉到XWays或任意十六进制查看器,一般文件开头都会是一串固定的数据,这个数据就是文件头签名,如果文件签名不完全固定可以使用正则表达式,正则表达式就是另一片问题了,此处不赘述),“0”代表文件偏移0字节是文件头签名(这主要用于文件头签名不在文件开头的,如果在后续固定偏移位置,写上相应偏移量即可)。

最后就是File Type Signatures Search.txt文件,如图。前四个字段与上述完全一致即可,接下来就是“Footer”字段,用来标识文件尾签名,我这里用的是固定值,也可以用正则表达式(要依据你想找的文件情况来定,文件系统读文件也需要尾签名或大小等信息,分析人员在这里要打开思路,找一下规律),最后再加一下默认大小,格式是“最小字节数/最大字节数”,示例中的意思就是最小1024字节,最大1073741824字节。

全部保存后,打开Xways,此时看文件类型筛选已经出现了我们定义的文件类型。使用“磁盘快照”的文件签名恢复,也可以看到对应文件类型了。如下图。


执行文件签名恢复后,可以看到我们自定义的文件已经被识别并恢复出来了。


