用WinHex实现NTFS文件系统的数据恢复
2009-06-08齐钦
齐 钦
摘要 概括介绍NTFS文件系统结构、主文件表、文件记录,文件记录的相关属性,以及数据文件在磁盘文件数据区的定位。对NTFS文件系统的数据恢复做了分析研究,介绍使用磁盘编辑工具WinHex还原被彻底删除的文件数据。
关键词 WinHex;NTFS;数据恢复
中图分类号:TP319 文献标识码:B 文章编号:1671-489X(2009)24-0098-03
WinHex to Achieve with NTFS File System Data Recovery//Qi Qin
Abstract An overview of the structure of NTFS file system, master file table, file records, file records related to property, as well as data files in the disk file data of the targeted area. On NTFS file system data recovery analysis done, the use of WinHex disk editor to restore the deleted files were complete data.
Key words WinHex; NTFS; data recovery
Authors address Institute of Education Science and Technology, Xuzhou Institute of Technology, Xuzhou, Jiangsu, 221008, China
随着科技的进步,计算机教学已成为现代教育技术的主要技术手段,在教育教学中发挥着越来越重要的作用。在平时教学过程中,计算机可实现电子教案与板书演示、CAI辅助教学、联机测试等多种教学手段,在提高学生学习效率、扩充信息知识量、培养学习和动手能力等方面发挥着重要作用。而这些教学信息均以文件数据的形式存储在计算机中,一旦遇到系统故障、病毒攻击、误删除或格式化造成数据丢失,将影响教学活动的正常开展。
NTFS文件系统基于可恢复文件结构设计,在安全性和稳定性方面有显著优势,提供容错结构日志,为多用户设置限制的磁盘配额文件特性,对文件和文件夹有安全验证和数字加密,保护系统的安全,不易产生文件碎片,减少用户数据文件丢失或毁坏的危险。由于系统的优越性,NTFS已取代FAT成为当前主流文件系统。
1 NTFS文件系统结构分析
NTFS文件系统的结构以卷为基础,卷由逻辑分区组成。卷以簇为最小存储管理单元,对磁盘空间和文件对象进行有机操作。簇的大小称卷因子,每簇可按需要分配1、2、4或8扇区,为簇2的幂且是整数倍,每扇区512字节,由操作系统建立分区时格式化生成。当分区空间超过2 G时,NTFS默认簇是8扇区。NTFS文件系统使用逻辑簇号和虚拟簇号对卷进行管理。逻辑簇号是对卷上所有簇进行顺序编号,虚拟簇号是对文件占用簇的编号,以便于引用文件中的数据。NTFS将卷定义为4个区域:分区引导扇区、主文件表、系统文件和文件数据区[1]。
分区引导扇区位于卷的首扇区,包括分区的引导程序和BIOS参数块(BPB),BPB表中的参数是在建立文件系统时由操作系统生成的,系统根据BPB中参数得到卷的重要信息,对分区引导扇区、主文件表、文件数据等进行卷逻辑地址定位。如果BPB参数丢失,NTFS无法完成数据的定位,文件系统将不能正常使用。
主文件表(MFT)是由一系列文件记录组成,与文件数据区中的文件相对应的关系数组,是NTFS的控制中心。NTFS通过文件记录来描述数据文件的各种属性并确定其在磁盘上的存储位置。MFT的前16个文件记录属于系统文件,称为元文件,用于存放系统的元数据。元文件在主文件表中地址固定不变,而对其他文件和文件夹的文件记录在主文件表中的地址则无具体要求。
文件记录由记录头、属性列表和结束标志组成。以“46 49 4C 45”为开始标志,“FF FF FF FF”为结束标志,大小为1 KB。NTFS将数据文件作为属性/属性值的集合来处理,属性的内容是属性值(流),由简单字符队列组成。NTFS并不对文件数据进行操作,而通过对属性流读写来对文件进行创建、读写、删除等操作。
当文件和文件夹的数据较小时,其所有属性和属性值都可直接存放在文件记录中,称为常驻属性。当文件或文件夹的属性太大而不能直接存放在文件记录中时,称为非常驻属性。NTFS将从主文件表之外的磁盘空间中为非常驻属性值分配存储区域,称为运行。运行主要说明文件在文件数据区簇的分配情况,由多个运行项组成,一个运行项包含一个虚拟簇号,是属性数据内部簇的顺序编号;一个逻辑簇号,是数据储存在磁盘上的位置;以及数据在磁盘上所占用空间的连续簇的数量[2]。利用文件的逻辑簇号和卷因子相乘得到文件在卷中的物理磁盘地址,NTFS通过这种方法对文件的数据区地址进行定位。
2 实现NTFS文件系统的数据恢复主要思路
在NTFS文件系统中,磁盘上的所有数据都是文件,每个文件在主文件表中都有一个文件记录。在文件创建时,在主文件表中为文件生成一个文件记录;在文件删除或者系统格式化时,并没有破坏磁盘上文件的数据信息,而且文件记录也没有被删除,只是更改标志(偏移0x16H)的属性值,并回收文件所占用的空间。
实现NTFS文件系统的数据恢复,首先通过分区引导扇区的BPB表参数定位主文件表、文件的文件记录;分析文件记录以及记录中的属性,获取数据恢复时所需要的文件信息;确定文件的数据区地址;对删除文件进行恢复。
2.1 对主文件表和文件记录的定位由于文件是通过主文件表的文件记录来确定其在文件数据区的存储位置,因此首先要找到主文件表。主文件表卷起始逻辑地址=卷因子*当前卷的主文件表逻辑簇号。通过卷的引导扇区的BPB参数,可获取主文件表和卷因子信息。分区引导扇区开始偏移0xDH为卷因子,即每簇扇区数;偏移0x30H为主文件表在当前卷的逻辑地址。
2.2 文件记录属性分析文件记录属性有标准属性、文件名属性、数据流属性、位图属性等类型[3]。记录头偏移0x16H处为文件使用标志,文件系统通过标志判断文件的当前使用状态。当文件删除时,NTFS并不删除文件记录,仅更改文件记录的使用标志值。00表示文件已删除,01表示文件正常使用,02表示文件夹已删除,03表示文件夹正常使用。
文件名属性的类型为30H,是常驻属性,用于存储文件名。需要注意的是,NTFS的文件名采用Unincode字符集,可支持中文和长文件名,当文件名含有超过传统DOS“8.3”的长文件名时,文件记录会有2个30H的文件名属性,第1个是与DOS兼容的短文件名,第2个是完整的长文件名。通过30H属性判断是否为所需要恢复的文件。
数据流属性的类型为80H,其中包含有非常驻标识、起始虚拟簇号、结束虚拟簇号、运行的偏移、数据的运行项等内容。通过分析数据流属性中运行的逻辑簇号和虚拟簇号,来对文件在文件数据区定位。
2.3 文件数据区的定位数据流属性的开头为“80 00 00 00”,从属性头开始第5个字节起的4个字节表示属性的长度。第8个字节是非常驻标识,如果该值是0,为常驻属性,表示数据流存储在文件记录中,可在文件记录中对数据直接进行提取操作;如果该值为1,说明数据存储在运行中。第17到24字节共8个字节表示起始虚拟簇号,第25到32字节共8个字节表示结束虚拟簇号。第33字节表示运行的偏移地址,一般为40H,即从属性头偏移64字节。从运行的偏移处读出数据运行项。在运行中说明各运行项的起始逻辑簇号和该运行项占用的簇数,从而可以定位每一个数据运行,对文件的数据进行提取操作。
2.4 保存恢复文件通过分析运行项,获取文件在文件数据区起始和结束逻辑扇区地址,直接提取磁盘扇区上的二进制代码,并将数据保存到其他卷上。
3 用WinHex数据恢复实例
WinHex是一款优秀的16进制磁盘编辑软件,有完善的分区和文件管理功能,能编辑物理磁盘或逻辑磁盘的任意扇区,可以编辑文件的二进制代码(用16进制显示),是数据恢复的一个重要工具。
在卷E中存入一个名为xyzzyx.rar的压缩文件。按Shift+Delete组合键,彻底删除xyzzyx.rar文件。删除文件后,注意不要对E盘进行写入操作,也不要对磁盘进行碎片整理、磁盘错误扫描等操作。下面介绍实现方法。
1)启动WinHex软件。点击“Tool”菜单,选择“Open Disk”菜单项,打开卷E。首先定位主文件表,单击“Go To Sector”按钮,输入“0”,跳转至分区引导扇区。从BPB表开始偏移0x30H~0x38H处的值为00000C00H,偏移0xDH处的值为08H。则主文件表的起始逻辑地址为C0000*08=600000H
单击工具栏上“Go To Offset”按钮,在“New position”对话框中输入主文件表的偏移地址“600000”,位置类型选择“Sectors”,在“relative to”复选框中选择“beginning”,单击确定跳转至主文件表。
单击工具栏上“Find text”,在文本框中输入要搜索的文件名“xyzzyx.rar”,NTFS里面文件名是用Unincode字符集来表示的,编码类型选择“Unincode”,搜索方向选择“Down”。
2)经过搜索后,光标停在记录的文件名属性位置上。通过分析30H的文件名属性,可以看到文件名是“xyzzyx.rar”,确认是要恢复的文件。从记录头偏移0x16处使用标志值为00,表示文件已被删除。
接着分析80H的数据流属性,偏移0xC029DD38处表示此文件为非常驻属性。0xC029DD50为运行的偏移值40H,即从第64个字节开始,偏移0xC029DD70~0xC029DD75为数据运行,只有一个运行项32 D1 04 E0 AE 69。0x32H表示该运行项为3字节的偏移,2字节的文件长度。文件长度为04D1H,即虚拟簇号。文件的起始逻辑簇号为69AEE0H。通过计算可知“xyzzyx.rar”文件的起始逻辑扇区地址为69AEE0H*8=34D7700H,结束逻辑扇区地址为(69AEE0H+04D1H)*8=69B3B1H*8=34D9D88H。
3)单击工具栏上“Go To Offset”按钮,在“New position”对话框中输入文件的起始逻辑扇区地址“34D7700”,位置类型选择“Sectors”,在“relative to”复选框中选择“beginning”,单击确定跳转。光标在二进制代码“52 61 72 21 1A 07 00 CF”处停下,看右面字符集可知是Rar的ASCII码,确定是压缩文件的开头标志。单击鼠标右键选择“Beginning of block”,定义文件的数据区开始。
再单击工具栏上“Go To Offset”按钮,输入文件的结束逻辑扇区地址“34D9D88”,确定转到后的新位置即为该文件数据的结束,单击鼠标右键选择“End of block”。
4)依次选择“EDITCopy BlockInto New File”,输入文件名“xyzzyx.rar”,保存在桌面,点击确定完成操作,在桌面上即可看见所恢复的文件。
4 结束语
本文对NTFS文件系统的结构、主文件表、文件记录等进行概括性介绍,并对文件记录的文件名属性和数据流属性进行分析,提出NTFS文件系统下数据恢复的实现思路,介绍使用WinHex实现NTFS文件系统的数据恢复的具体方法。应用此方法,可以在数据没有被覆盖的情况下,快速查找被删除数据文件的文件记录,并进行卷逻辑地址的精确定位,使数据恢复更为方便、高效。本方法也适用于NTFS文件系统误高级格式化的数据恢复。
参考文献
[1]戴士剑,陈永红.数据恢复技术[M].北京:电子工业出版社,2003
[2]居锦武,王兰英.NTFS文件系统剖析[J].计算机工程设计,2007(11)
[3]File Attributes Defined by NTFS[EB/OL].http://www.ntfs.com/ntfs-files-types.htm