基于文件名搜索的NTFS文件恢复方法研究

2023-03-21 02:22吴淑惠
计算机时代 2023年3期
关键词:文件名回收站磁盘

吴淑惠

(北京市工贸技师学院数媒系,北京 100097)

0 引言

NTFS(New Technology File System)是Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式,它提供长文件名、数据保护和恢复,能通过目录和文件许可实现安全性,并支持分区跨越[1],是当前应用最为广泛的文件系统。

任何文件系统都可能出现无意删除文件的情况,NTFS文件系统由于使用的广泛性,出现该问题的频率自然较高,因此,恢复被删除的NTFS 文件是人们的正常需求。尽管当前已有众多软件致力于解决此问题,但由于NTFS 文件系统存储结构的复杂性,用户的电脑又千差万别,因此,对于专业数据恢复人员而言,需要理解NTFS 文件存储的内部逻辑,掌握使用Winhex进行底层恢复的技能。

文件被删除,包括从回收站中删除和使用shift+delete 组合键直接删除两种情况。它们对NTFS 文件系统的改变略有不同,恢复方法也稍有差异。本文针对这两种情况分别研究了其恢复方法。

在文件恢复过程中,往往需要计算其存储位置及数据块大小,这些计算步骤较为繁琐,其中数据流(data run)的计算较为复杂且不可或缺,本文研究了在Excel 中进行自动计算的公式,并将其先于数据恢复方法呈现。

1 文件存储位置与数据块大小的计算

NTFS 文件恢复中,文件存储位置与数据块大小的获得需要下述三种计算。

1.1 磁盘基本情况

在数据恢复中,$MFT所在扇区至关重要。Winhex可以自动识别$MFT 所在扇区,单击目录浏览区$MFT项可进入该扇区,也可通过查看该分区0 扇区的DBR模板获得$MFT 开始簇号再乘以每簇扇区数得到$MFT所在扇区号。

1.2 文件记录所在扇区

数据恢复中,经常需要通过记录参考号找到文件记录所在扇区,实际计算时可通过将记录参考号转换为十进制数乘以2,再加上$MFT所在扇区号获得。

1.3 data run的计算

在NTFS 文件系统中,data run是一个有着特定含义的数据系列,它指向数据的存储位置和大小[2],在文件恢复过程中对其进行计算是必不可少的。

一个data run 可以有1~n 个data list。NTFS 文件系统中,一个文件可能是连续存储,也可能是非连续存储,如果是连续存储,则只有一个data list,反之,则有多个data list。Data list 的结构较为复杂:第1 个data list 的第1 个字节,高位为该data list 所表示的数据块的起始簇号所占用字节数(N),低位为数据块所占用簇数的字节数(L);第2~L+1 个字节表示数据块所占用簇数;第L+2~L+N+1 个字节为数据块起始簇号。第2 个data list 的1~L+1 个字节含义与第1 个data list 含义相同;第L+2~L+N+1 个字节为起始簇的相对簇号(此簇号为有符号数,换算成十进制值有可能是负数),在实际计算时将该起始簇号加上第1 个data list 的起始簇号,得到第2 个data list 的实际起始簇号。第3~n 个data list 字节的含义与第2 个相同。为了实现data run 的自动计算,本文结合data run 的意义与excel函数,研究出了下述表格(图1所示)。

图1 文件存储位置与数据块大小的计算

1.3.1 数据块大小的计算

表格C~F 列计算数据块的大小,C7、D7、E7、F7 中的公式分别为“=MID(B7,2,1)”、“=IF(C7-3<0,"",MID(B7,7,2))&IF(C7-2<0,"",MID(B7,5,2))&MID(B7,3,2)”、“=HEX2DEC(D7)”和“=E7*512*$C$4”。后续行填充复制上述公式即可。

1.3.2 文件存储位置的计算

表格中G~K列计算数据块的存储位置。

⑴第一项data list的计算

G7 计算起始LCN 的位数,公式为:=LEFT(B7,1);H7表示起始LCN加减标志,对于第1个data list,直接填入“0”;I7 计算data list 起始LCN 的十六进制值,公式为=MID(B7,LEN(B7)-1,2)&IF(LEN(B7)-C7*2-5<0,"",MID(B7,LEN(B7)-3,2))&IF(LEN(B7)-C7*2-7<0,"",MID(B7,LEN(B7)-5,2))&IF(LEN(B7)-C7*2-9<0,"",MID(B7,LEN(B7)-7,2))&IF(LEN(B7)-C7*2-11<0,"",MID(B7,LEN(B7)-9,2)),公式的思路是逐字节取出data list 原始值中表示起始LCN 的十六进制值,并按正常十六进制数的顺序排列(将小头位序表示的十六进制颠倒顺序);J7 是data list 起始LCN 的十进制值,公式为:=HEX2DEC(I7);K7 计算data list 的实际LCN值,对于第1项data list而言,该值与前列完全相同。

⑵第二项data list的计算

G8,I8 单元格的计算,填充复制第1 项data list 的公式即可;H8 表示起始LCN 加减标志,公式为:=LEFT(HEX2BIN(RIGHT(B8,2),8),1),公式取出data list 最右边的十六进制数,将其转换为八位二进制数,并取出其最高位;J8 计算起始LCN 的值,公式为:=IF(H8="0",HEX2DEC(I8),IF(G8="1",255-HEX2DEC(I8),IF(G8="2",65535-HEX2DEC(I8),IF(G8="3",16777215-HEX2DEC(I8),4294967295-HEX2DEC(I8))))+1),思路是如果加减标志为0,此数为前列十六进制转换为十进制数的值;如果是1,计算前列十六进制数补码加1后得到的十六进制数对应的十进制值;K8计算数据块的实际LCN 值,公式为:=IF(H8="0",J8,-J8)+K7,意思是若加减标志为0,则data list 的LCN 值为上行data list 的LCN值加上前列的LCN值;否则两者相减。

⑶后续data list的计算

后续data list的计算,填充复制第二项data list的公式即可。

2 NTFS文件恢复过程中常见问题的解决或说明

2.1 获得文件名的Unicode编码值

对于需要被恢复的文件,其文件名或文件名的一部分往往能被文件创建者记忆。因此,利用文件名恢复被删除文件是数据恢复的重要方法。在NTFS 文件系统中,文件名以Unicode 编码存储。对于英文和数字的文件名,Unicode 编码值与ASCII 码相同;但对于汉字,则需要使用专门的字符转换软件将其转换为对应的Unicode 编码,如缺少相应的字符转换软件,可将文件名输入记事本文件,再将该文件另存为编码为“UTF-16LE”的文件,在Winhex 中打开该文件,并将字符集调整为“UTF-16”,即可查看对应汉字在NTFS文件系统中存储的十六进制值。选中这些十六进制值,右击鼠标,选择“编辑”→“复制选块”→“十六进制值”可以复制文件名的十六进制值,以备后续搜索之用。

2.2 定义选块

文件恢复中,经常需要定义选块。在文件选块的定义环节,需要填入数据块存储开始位置和结束位置。一种做法是:根据计算的实际LCN 值跳至该簇号所在扇区,然后将“选块起始位置”设置为“当前位置”,在“文件大小”项中填入数据块大小值,此时需注意使Winhex 的偏移值与“文件大小”项中填入的数字采用相同进制。当进制不同时,单击偏移列可改变进制。

2.3 文件合并

被删除的文件尤其是大文件,在磁盘中往往存储在多个位置,也就是有多个簇流(data list)。当分别对簇流定义了选块并复制它们至新文件中后,还需要将其“组装起来”。可使用“工具”→“文件工具”→“文件合并”命令进行操作,此时,需特别注意合并文件的顺序。

3 文件从回收站中删除后的恢复

随着硬件技术的发展,现在的硬盘一般容量巨大,在搜索文件名的过程中,如果进行全磁盘搜索,将浪费大量的时间。在实际工作中,时间成本是选用工作方法的决定因素之一,通过文件名搜索恢复NTFS文件概莫能外。$MFT 是NTFS 文件系统的核心文件[3],$LogFile是日志文件,两个文件占用的空间不大,包含的信息准确可靠。因此,通过搜索文件名恢复从回收站中删除的文件,应首先搜索$MFT,再搜索$LogFile,如果从这两个文件均未能找到有用信息,再进行全磁盘搜索。

3.1 搜索$MFT

$MFT 是NTFS 文件系统的主文件表,它由多个MFT 项(也称为文件记录)组成,每个MFT 项占用1024 个字节的空间[4]。系统通过$MFT 来确定文件在磁盘中的位置以及文件的其他属性。搜索$MFT,可得到文件的一些关键信息。根据实践,使用搜索$MFT 的方法来恢复数据是恢复从回收站中删除文件最节省时间且最有效的方法,使用该方法实现数据恢复步骤如下。

⑴参照前文提供的方法获得文件名或部分文件名Unicode编码的十六进制值。

⑵在Winhex 中打开被删除文件所在的磁盘,在目录浏览区选中$MFT,并将其复制至除被删除文件所在磁盘外的其他磁盘。

⑶打开$MFT,使用“专业工具”→“将镜像文件转换为磁盘”命令将其转换为磁盘(目的是使文件外观与磁盘一致,便于查看数据)。

⑷搜索文件名的十六进制值,单击文件名称为“$Bitmap”、“$Corrupt”、“icudtl.dat”和“卷残留空间”的搜索结果项所在扇区,查找80H 属性值中data run 部分。实践证明,主要是但不限于这些结果项所在扇区记录了被删除文件的关键信息。

3.2 搜索$LogFile

NTFS 使用$LogFile 来进行事务管理,用于保证NTFS的可恢复性,当文件被写入/修改时,系统要做两件事,一是写入/修改文件本身的数据,二是更新和文件系统有关的数据(如文件状态、文件修改时间)等。因此,可搜索$LogFile 文件来寻找被删除文件的蛛丝马迹,步骤如下。

⑴打开$LogFile,搜索文件名的十六进制值。

⑵单击搜索结果项,进入对应扇区。在这些扇区中寻找有用信息。这些有用信息包括但不限于:紧跟文件名后的80H 属性中的的data run 信息;文件名第一个字符往上数五行(NTFS 文件30H 属性的结构决定)的文件记录参考号信息。

⑶如找到的是data run 信息,计算其起始簇号和数据块大小,跳至相应簇,定义数据块,复制数据块至新文件,恢复该文件(如有多个data list,需复制出多个新文件后合并文件);如找到的是记录参考号,则参照前文提供的方法计算文件记录所在扇区,跳至该扇区,寻找文件的data run 信息,重复前面的步骤,恢复文件。

需要说明的是:$LogFile 中,一般能搜索到关于该文件的多条信息,这些信息有的有用,有的无用,有的甚至错误,但一般至少有一条有用信息。可逐个试验这些信息,识别出有用信息,淘汰无用信息,逐渐积累经验,成为数据恢复高手。

3.3 搜索整个磁盘

搜索全磁盘的结果项中,最容易找到有用信息的项是文件名称为“$MFT”的行,其次是“已删除的分区”,再其次是$LogFile中提供的信息。

⑴当搜索结果中有多个文件名称为“$MFT”的项时,这些项指向的扇区至少有两种可能性,一种是指向文件记录,可直接从其中找到data run 信息,恢复文件。另一种是目录信息,此时,单击文件名的第一个字符,往上数五行,一般可找到文件记录参考号,若无法找到data run 和记录参考号,可查看有无A0H 属性,根据A0H属性中的data run信息,找到该文件父目录所在扇区,再寻找被删除文件的“痕迹”,也有解决问题的可能性。

⑵搜索结果项为“已删除的分区”中,有一个陌生的文件名,这个文件名是“$R+6 个随机字符”,随机字符由系统自动产生。Windows 操作系统中,回收站是一种特殊的文件夹,它位于逻辑盘的根目录下,名称为RECYCLER或$RECYCLE.BIN(不同的操作系统版本有不同的名称),正常情况下其属性被设置为隐藏状态,可通过设置显示菜单中的显示项目将其显示出来。当用户删除某文件后,存储该文件的磁盘空间并没有真正被释放,而是生成了以“S-1-5-21”开头的文件夹,还在其下建立了两个文件。比如windows7、10 操作系统会在其下建立以“$I+6 个随机字符”和“$R+6个随机字符”为文件名,扩展名与原文件相同的两个文件(两个文件的6 个随机字符完全相同)。“$I+6个随机字符”文件存储被删除文件的原始信息(如路径、文件名、删除日期和时间等),“$R+6 个随机字符”文件存储被删除文件的内容,该文件与被删除文件的记录号相同[5]。正因为回收站的这一机理,可根据上述搜索结果寻找被删除文件的信息,方法是搜索“$I+6个随机字符”获得文件的记录参考号信息,再根据该信息,找到80H或A0H属性中的数据流,恢复文件。

⑶当搜索结果中文件名称为“$LogFile”的项时,查找被删除文件有用信息的方法与前述内容完全一致。

4 按shift+delete组合键删除文件后的恢复

4.1 直接复制文件

在Winhex 中打开被删除文件所在的磁盘,在“磁盘快照选项”对话框中,勾选“使用包含删除的文件”选项,此时在目录浏览器中,当文件有可能被快速恢复时,文件前有标志,右击该文件,从弹出的菜单中选择“恢复/复制”可将其迅速恢复。需要说明的是,通过这种方法恢复的文件有一定概率无法正确打开,原因可能是存储该文档的部分扇区已用作它途。

4.2 其他方法

这些方法包括搜索$MFT、$LogFile 以及整个磁盘,其操作与恢复回收站中删除的文件大同小异(区别是全磁盘搜索不会找到文件名为“$R+6 个随机字符”的文件),相关内容参考前文,此处不再赘述。

5 远程NTFS文件恢复

现实生活中,部分NTFS 文件能够进行远程恢复,满足下述条件的计算机成功实现远程文件恢复的可能性大:

●文件所在电脑有至少两个分区。

●文件所有者愿意且有能力按要求安装远程控制软件。

远程数据恢复必须解决“远程”问题。目前,有多款远程控制软件,如向日葵、TeamViewer 等。以向日葵远程控制软件为例,需要数据所有者下载向日葵客户端软件,存储到除被删除文件所在分区以外的其他分区,并打开该软件,向数据恢复人员提供机器识别码,数据恢复人员根据该码连接数据所有者计算机,在其机器上安装Winhex或其他数据恢复软件,进行远程数据恢复。

6 结论

使用文件名搜索对被删除文件进行底层恢复有多种不同的方法,这些方法耗时不同复杂度各异,在实践中应首先选择时间成本低,操作方便的方法。恢复从回收站中的文件优先选用搜索$MFT 的方法,而恢复按shift+delete组合键删除的文件宜采用直接复制法。

猜你喜欢
文件名回收站磁盘
文件名批量管理方法浅析
能量回收站
解决Windows磁盘签名冲突
右键调用多重更名更方便
Excel轻松提取文件名
神奇裁缝最省布
修改磁盘属性
Windows 10回收站问题巧解决
磁盘组群组及iSCSI Target设置
创建VSAN群集