八喜 发表于 2013-3-28 10:21:53

读物理硬盘恢复一个run的文件数据取自NTFS文件系统扇区存储探秘

第10章读物理硬盘恢复一个run的文件数据 [软件下载地址见本章末]

      如果硬盘上的系统数据遭到破坏,整个硬盘或是硬盘上某一个逻辑驱动器不能引导,存储在上面的文件也就读不出来了。
当硬盘上没有重要文件的时候,可以重新格式化,甚至重新分区,然后再安装操作系统就可以继续使用了

    但在大多数情况下,硬盘上都存有一些不想丢弃的文件。挽救这些文件最好的方法,是争取修复被破坏的系统引导数据,使硬盘能够重新引导成功。不过当系统数据被破坏得很厉害时,试图修复系统数据的努力也就只好放弃了。在这种情况下,用什么方法能够将重要文件恢复出来呢?这就是本章要讨论的内容。

    当硬盘不能引导时,使用者在硬盘上存储的文件,大多数都是完好无损的。只是由于系统数据被破坏,失去了对文件进行查找和定位的能力。只要硬盘没有发生物理故障,就可以使用读取硬盘物理扇区数据的方法,将一些重要的文件恢复出来。

    在使用读硬盘物理扇区数据恢复文件的方法时,要根据存储文件的逻辑驱动器使用的文件系统,采取相应的查找和计算方法,本章探索的对象,是NTFS文件系统。当前使用最广泛的文件系统是FAT16、FAT32和NTFS,对前两种文件系统的探索,在笔者所写的另一本书中,曾进行过较为详细地介绍,该书名为《硬盘扇区读写技术━━修复硬盘与恢复文件》,有兴趣的读者可以参考。

    使用读取硬盘物理扇区数据的方法,从使用NTFS文件系统的逻辑盘上恢复文件数据时,必须取得与被恢复文件有关的系统记录数据,需要取得的数据与操作过程如下:
    1.每簇中含有的扇区数,在第7章中已经介绍了如何得到此项数据。
    2.找到被恢复文件的MFT文件表扇区地址。
    3.在被恢复文件的MFT文件表扇区中,找到标记数据存储首扇区地址的字段记录。
    4.根据首扇区地址的字段记录计算簇号。
    5.根据簇号计算相对扇区号。
    6.根据相对扇区号计算绝对扇区号。
    7.在被恢复文件的MFT文件表扇区中,找到标记文件长度的字段记录。
    8.运行《读扇区拷贝文件. exe》程序,从计算出的绝对扇区开始读取数据,根据文件长度决定连续读取多少个扇区。(实际读取时是以簇为单位进行的)
    9.运行剪切文件程序,将恢复出来的文件剪切到原文件的实际长度。
    要演示上面的操作过程,实现从物理硬盘上恢复文件,目前还不能进行。因为现在还不了解关键的几个字段记录,存储在扇区中的哪一个位置上。本章前一部分的演示操作过程,就是要采用逆向分析的方法,通过预先设置的一些已知条件,反向推导字段记录的存储位置,发现一些NTFS的扇区存储规律。现在先将这个推导过程的主要步骤列举如下,以期使读者先有一个总体认识,有利于对具体操作过程的理解。
    1.运行连续扇区清零程序,将一个使用NTFS文件系统的逻辑盘全部请零,这种操作的目的是避免在查找扇区特征时,被一些残留数据的扇区所误导。
    2.向逻辑盘中存入一个内容已知的文本文件。
    3.运行“查找硬盘扇区特征. exe”程序,查找文本文件中的已知字符串,从而确定存储文件数据的首扇区地址。
    4.上面查到的是一个绝对扇区地址,根据其扇区号算出相对扇区号。
    5.根据相对扇区号算出逻辑簇号。
    6.根据逻辑簇号算出字段记录值。
    7.运行“查找硬盘扇区特征. exe”程序,查找MFT文件表扇区。
    8.在MFT文件表扇区中,查找标记簇号的字段记录。
    9.根据字段记录的存储位置,分析其存储规律。
    NTFS文件系统在存储文件时,总是试图将文件数据写入连续的簇。但有的文件经过多次修改与扩充,也可能存储在不连续的簇中。NTFS文件系统将一个连续的存储区域,称为一个run。本章先讨论文件存储只使用一个run的情况,因为对这种较为简单的存储形式,分析起来容易一些。对于存储文件数据使用多个run的情况,在后面的章节中再进行探索。

10.1实验演示前的准备工作

    现在开始探索NTFS逻辑驱动器中,文件在扇区中的存储规律,操作对象是1号硬盘上的F逻辑驱动器。
    首先对F逻辑驱动器进行清零。运行“连续扇区清零. exe”程序,程序界面如图10-1所示。

图10-1
    在图10-1的程序界面中,编辑框里输入硬盘的编号“1”,然后点击“硬盘确定”按钮,程序界面如图10-2所示。

图10-2
    在图10-2的程序界面中,编辑框里输入清零的扇区区段的起始扇区号。如果根据实际需要,只清零演示操作中存储文件的扇区区段就可以了。但是这个扇区区段的选取不容易掌握,因为NTFS文件系统向扇区写入数据时,要根据文件的大小和扇区的使用情况,选取最合适的扇区区段。这个过程是在内核中完成的,操作者无法进行追踪。所以最可靠的方法,就是将逻辑驱动器内所有的扇区全部清零。
    1号硬盘的F逻辑盘的起始和终止扇区号,可以从图6-5中查得。开始于12578895号扇区,终止于16771859号扇区。但是在输入起始扇区号的时候,一定要将12578895号扇区排除在外。因为该扇区中存储着F盘的分区链表,如果将其清零,则F盘及其以后的逻辑驱动器就无法识别了。可以将分区引导记录所在的扇区,即12578958号扇区,作为清零的起始扇区。因为分区引导记录是格式化时建立的,它不影响硬盘的分区链。
    在图10-2的编辑框中,输入起始扇区号12578958。然后点击“始扇确定”按钮,程序界面如图10-3所示。

图10-3
    在图10-3的程序界面中,编辑框里需要输入终止扇区号。输入时一定不要超越F盘的最后扇区,否则的话就将后面G盘的分区链表破坏了。因为逻辑驱动器中的扇区不可能全部被使用,所以在实际输入时可以提前若干个扇区号。F盘的最终扇区号是16771859,可以输入16771850。然后点击“终扇确定”按钮,程序界面如图10-4所示。

图10-4
    在图10-4的程序界面中,点击“清零开始”按钮,程序即开始执行扇区清零功能。F盘的容量是2GB,程序运行15分钟后发出了音响提示,通知操作者清零结束。按一下空格键停止声音提示,程序界面如图10-5所示。

图10-5
    在图10-5的程序界面中,点击“退出”按钮,结束程序运行。
    演示过程进行到这一步,不要再继续操作了。因为F盘的系统管理数据已经全部被清零了,这之后对F盘的任何操作,系统都会发出错误提示。
    重新启动计算机,打开WINDOWS资源管理器,用鼠标点击盘符F,系统弹出一个警告对话框,如图10-6所示。

图10-6
    在图10-6中点击“是”按钮,系统弹出格式化插件选择窗口,在窗口的编辑框中输入格式化参数,其界面如图10-7所示。

图10-7
    在图10-7的程序界面中,点击“开始”按钮,就可以将F盘重新格式化为NTFS文件系统,每个分配单元有1024字节,就是说每簇中含有2个扇区。

10.2查找MFT文件表

    准备工作已经完成了,接下来开始探索文件在扇区中的存储规律。将一个纯文本文件拷贝到F盘,该文件是赛门铁克公司出品的软件NC 5.0中的一个帮助文件。使用纯文本文件作为分析对象,主要是因为文件的内容都可以用字符表示,便于使用工具程序进行查找。等到分析出文件在扇区中的存储规律以后,再推广到所有格式的文件。
    拷贝到F盘的文件名是SYMANTEC-NC5.TXT,文件大小是17347字节。为了使读者能够看到查找扇区时的字符串特征,将文件开头的一段内容摘录如下:
SYMANTEC LOCALISATION GROUP IRELAND

README.TXT--
Copyright 1993 Symantec Corp. All Rights Reserved.

NORTON COMMANDER
Version 5.0

Welcome to Norton Commander Version 5.0 !
------------------------------------------
Please read this document carefully, it contains important
information not included in the documentation.

   Topics covered in this note include:

   * Files that come with Norton Commander 5.0
   * Memory Requirements
        <> Commander Memory Requirements
           <> Launching Commander with Small and Tiny memory
         configurations.
   * Compressed File Support
           <> Compressing Hidden Files
           <> Password protected Compressed files
        <> Limitations in Compressed Files
   * Viewer Support
        <> Internal Viewer
        <> Defining Viewers

第一步先查找文件的MFT文件表记录。运行“查找硬盘扇区特征. exe”程序,程序界面如图10-8所示。

图10-8
    在图10-8的程序界面中,点击编辑框里的“▼”按钮,打开下拉选择列表,程序界面如图10-9所示。

图10-9
    在图10-9的程序界面中,选择下拉列表里的“长文件名”选项,然后点击“确定”按钮,程序界面如图10-10所示。

图10-10
在图10-10的程序界面中,点击编辑框里的“▼”按钮,打开下拉选择列表,程序界面如图10-11所示。

图10-11
    在图10-11的程序界面中,选择下拉列表里的“扇区号增加”选项,然后点击“确定”按钮,程序界面如图10-12所示。

图10-12
    在图10-12的程序界面中,编辑框里输入“1”,然后点击“硬盘确定”按钮,程序界面如图10-13所示。

图10-13
    在图10-13的程序界面中,编辑框里输入扇区号12578895,这是F盘的分区链表扇区。然后点击“扇区确定”按钮,程序界面如图10-14所示。

图10-14
    在图10-14的程序界面中,编辑框里输入查找的文件名,可以输入文件的全名称,也可以只输入文件名的一部分。因为本演示实例中的文件名不是太长,所以就输入文件全名“SYMANTEC-NC5.TXT”,然后点击“特征确定”按钮,程序界面如图10-15所示。

图10-15
    在图10-15的程序界面中,编辑框里输入备份扇区数据的文件名。为了表示出文件的内容特征,将文件起名为NC-NAME,文件存储在G盘上。所以编辑框里应输入“G:\NC-NAME”,然后点击“开始查找”按钮,程序即执行查找功能。
    当找到需要的扇区以后,程序发出音响提示。按一下空格键使音响提示停止,程序界面如图10-16所示

图10-16
    在图10-16的程序界面中,编辑框里显示出找到的扇区号。同时程序在G盘的根目录下,建立了扇区数据的备份文件NC-NAME。现在点击“退出”按钮,结束程序运行。
---------------------------2013.03.28日最后更新------------------------------------------

现在证实一下找到的扇区号,是不是文件SYMANTEC-NC5.TXT的MFT记录。运行16位程序READSF. exe,将NC-NAME文件以字符显示的方式打开,程序界面如图10-17所示。

图10-17
    在图10-17中,可以看到在中间偏下的一行,记录的是文件名SYMANTEC-NC5.TXT。大约在中间的一行,记录的是由长文件名生成的,MS-DOS的8.3格式的文件名。

10.3查找并计算MFT表中的字段记录

    文件SYMANTEC-NC5.TXT的MFT文件表记录已经找到了,有关文件的长度、文件数据的存储地址等文件定位参数,肯定都记录在MFT文件表里。但是MFT文件表里的哪一个字段记录,与文件的哪一个定位参数相对应呢?目前还无法进行判断。
    下一步操作是要查找存储文件数据的扇区地址,然后与MFT表里的字段相比较,从而找出记录文件定位参数的字段位置。
    存储文件数据的扇区地址,要根据文件内容的某一个特征进行查找。在前面摘录的文件开始的一段内容中,可以选择开头的字符串作为查找的依据。实际上选择文件内容中任何一个特征字符串都可以,但是要注意不能超出512个字节的范围,否则查找到的扇区号,就不是存储数据的首扇区地址了。选取文件开始的一段字符串“SYMANTEC LOCALISATION”,作为查找的扇区特征。
    运行“查找硬盘扇区特征. exe”程序,打开下拉选择列表,选择“扇区字符串”选项,程序界面如图10-18所示。

图10-18
    在图10-18的程序界面中,点击“确定”按钮,在转换后的程序界面中打开下拉选择列表,选择“扇区号增加”选项,程序界面如图10-19所示。

图10-19
    在图10-19的程序界面中,点击“确定”按钮,程序转入下一个界面,如图10-20所示。

图10-20
    在图10-20的程序界面中,编辑框里输入硬盘编号“1”,然后点击“硬盘确定”按钮,程序界面如图10-21所示。

图10-21
    在图10-21的程序界面中,编辑框里输入扇区号12578895,这是F盘的分区链表扇区。然后点击“扇区确定”按钮,程序界面如图10-22所示。

图10-22
    在图10-22的程序界面中,编辑框里输入需要查找的扇区字符串“SYMANTEC LOCALISATION”。输入字符串时要区分大小写,字符间的空格要保留。然后点击“特征确定”按钮,程序界面如图10-23所示。

图10-23
    在图10-23的程序界面中,编辑框里输入备份扇区数据的文件名,为了表示出文件的内容特征,将文件起名为NC-DATA,存储在G盘上。所以编辑框里应输入“G:\NC-DATA”,然后点击“开始查找”按钮,程序即执行查找功能。
    当找到需要的扇区以后,程序发出音响提示。按一下空格键使音响提示停止,程序界面如图10-24所示

图10-24
    在图10-24的程序界面中,点击“退出”按钮,结束程序运行。从编辑框里显示的扇区号,知道文件SYMANTEC-NC5.TXT的数据存储地址是14700504,这是首扇区的地址,后面的若干个连续扇区中,存储着文件的全部内容。
    程序同时在G盘的根目录下,建立了存储14700504号扇区数据的文件NC-DATA。因为事先已经知道SYMANTEC-NC5.TXT文件的内容是纯文本形式的,所以可用文本编辑软件将文件NC-DATA打开,其内容如下:
SYMANTEC LOCALISATION GROUP IRELAND

README.TXT--
Copyright 1993 Symantec Corp. All Rights Reserved.

NORTON COMMANDER
Version 5.0

Welcome to Norton Commander Version 5.0 !
------------------------------------------
Please read this document carefully, it contains important
information not included in the documentation.

   Topics covered in this note include:

   * Files that come with Norton Commander 5.0
   * Memory Requirements
        <> Commander Memory Requirements
           <> Launch

    将扇区文件NC-DATA的内容,与前面摘录的SYMANTEC-NC5.TXT文件的内容对比一下,可以看出它们的内容完全相同。只不过扇区文件的内容限定在512个字节的范围内,超出512字节的内容,就存储在下一个扇区里了。
    现在根据查找到的扇区号14700504,计算出表示簇号的字段值,因为NTFS文件系统不是以扇区号记录地址,而是以簇号来记录地址的。
    查找到的扇区号是一个绝对扇区号,先要计算出其相对扇区号,也就是要用绝对扇区号减去F盘的分区引导记录扇区号。在第6章的图6-5中,可以查得F盘的分区引导记录扇区号是12578958,于是就有下面的算式:
14700504-12578958=2121546
    计算的第二步,要根据相对扇区号算出簇数。F盘最后一次格式化时,在“分配单元大小”选项中,选取的是1024字节,即每簇中含有2个扇区。簇数由以下算式计算:
2121546÷2=1060773
    这是一个十进制数,要将它换算成十六进制。使用“数制转换. exe”程序,完成十进制到十六进制的转换。前面曾经讲述过该程序的运行过程,此处只给出程序运行的最后结果,如图10-25所示。

图10-25
    在图10-25的程序界面中,显示出转换后的十六进制结果是102fa5H,其存储在扇区中的字段值应该是“A5 2F 10”,因为存储时要遵循低字节在前,高字节在后的原则。
    文件SYMANTEC-NC5.TXT的长度是17369字节,使用“数制转换. exe”程序,转换成十六进制的结果,如图10-26所示。

图10-26
    在图10-26的程序界面中,显示出转换后的十六进制结果是43d9H,其存储在扇区中的字段值应该是“D9 43”。
    现在将文件SYMANTEC-NC5.TXT的MFT文件表记录显示出来,查看一下上面计算出来的两个字段值的存储位置。SYMANTEC-NC5.TXT的MFT文件表记录,已经保存到G盘的名为NC-NAME的文件中。
    运行“查看扇区文件数据. exe”程序,程序界面如图10-27所示。

图10-27
    在图10-27的程序界面中,编辑框里输入被查看的文件名“G:\NC-NAME”,然后点击“显示数据”按钮,程序界面如图10-28所示。

图10-28
在图10-28的程序界面中,对话框里显示出扇区中512个字节的数据。每行显示16个字节,一共显示32行。在倒数第4行的后8个字节中,可以观察到“A5 2F 10”的字段记录值。
    在这8个字节中,前两个字节是“31 11”。字节31H是使用压缩BCD码的存储方式,在1个字节中存入了2个数。低4位的数是“1”,表示其后的1个字节构成字段,记录的是存储文件数据所使用的簇数。高4位的数是“3”,表示再往后的3个字节构成一个字段,记录的是文件数据存储的起始逻辑簇号,也就是在《基础篇》里所说的LCN。
    字节11H记录的是文件占用的簇数,转换成十进制数是17,说明文件数据占用17个簇。文件SYMANTEC-NC5.TXT的长度是17369个字节,按每扇区512个字节计算,应该占用34个扇区。而F盘每簇含有2个扇区,这也验证了17个簇的结论是正确的。
    在图10-28的对话框中,倒数第4行的前8个字节,倒数第5行的后8个字节,都可以观察到“D9 43”的字段记录,这两个字段值是标记文件长度的。

10.4读硬盘物理扇区恢复文件数据

    本章的演示过程进行到现在,已经清楚地显示出了一个恢复硬盘文件的方法。采用这种方法,既不受被操作硬盘上的操作系统的限制,也不受对硬盘或文件的访问权限的限制。因为所使用的扇区读写的方法,是针对物理硬盘进行操作的。
    当硬盘的引导数据或系统管理数据已被破坏,而又无法修复时,操作者可以尝试使用这种方法,恢复硬盘上的重要文件。
    下面就使用笔者提供的“读扇区拷贝文件. exe”程序,通过读取物理硬盘扇区数据的方法,将文件SYMANTEC-NC5.TXT的内容备份出来。
    运行“读扇区拷贝文件. exe”程序,程序界面如图10-29所示。

图10-29
    在图10-29的程序界面中,编辑框里输入硬盘编号“1”,然后点击“硬盘确定”按钮,程序界面如图10-30所示。

图10-30
    在图10-30的程序界面中,编辑框里输入起始扇区号。这个参数应该是文件SYMANTEC-NC5.TXT存储的首扇区地址,前面已经查找到该扇区号是14700504。输入起始扇区号以后,点击“扇区确定”按钮,程序界面如图10-31所示。

图10-31
    在图10-31的程序界面中,编辑框里输入连续扇区数,也就是每簇中含有的扇区数。前文曾讲过,NTFS文件系统存储文件时,是以簇为单位进行的。所以读取扇区中的文件数据时,也应该以簇为单位进行。F盘在格式化时选取的参数是每簇含有2个扇区,所以在编辑框中输入“2”,然后点击“扇数确定”按钮,程序界面如图10-32所示。

图10-32
    在图10-32的程序界面中,编辑框里输入连续数据块的个数,实际上就是文件占用的簇数,这里将一个簇看作是一个数据块。在编辑框里输入“17”,然后点击“数块确定”按钮,程序界面如图10-33所示。

图10-33
    在图10-33的程序界面中,编辑框里输入备份数据的文件名。将文件存储在G盘上,起名为NC.BAK,所以应在编辑框里输入“G:\NC.BAK”。然后点击“拷贝文件”按钮,程序界面如图10-34所示。

图10-34
    在图10-34的程序界面中,又回到了图34-30的状态,程序的这种设计是为了拷贝分为若干个run存储的文件,因为每个run都有一个起始扇区号。在本例中文件只存储在1个run里,所以就不用再继续运行了。点击“退出”按钮,结束程序运行。
    查看一下G盘的根目录,可以发现建立了NC.BAK文件。文件的字节数是17408,比原文件的实际字节数要大,这是因为它是按整簇拷贝出来的,而原文件在最后一个簇中,并没有占满全部存储空间。
    为了将备份出来的文件NC.BAK恢复到原始字节数,可以使用本书提供的“剪切文件. exe”程序,对文件NC.BAK进行剪切。
    运行“剪切文件. exe”程序,程序界面如图10-35所示。

图10-35
    在图10-35的程序界面中,编辑框里输入需要剪切的文件名,即输入“G:\NC.BAK”。然后点击“文件确定”按钮,程序界面如图10-36所示。

图10-36
    在图10-36的程序界面中,编辑框里输入文件被剪切以后的字节数,也就是原文件的字节数。在编辑框里输入“17369”,然后点击“字节确定”按钮,程序界面如图10-37所示。

图10-37
    在图10-37的程序界面中,点击“开始剪切”按钮,程序界面如图10-38所示。

图10-38
    在图10-38的程序界面中,点击“ 退出”按钮,结束程序运行。
    进入G盘的根目录,查看一下NC.BAK文件,其字节数已经被剪切为17369。同时又新建了一个文件NC.BAK.bak,这是被剪切文件改名以后的备份。
    通过读取硬盘物理扇区数据拷贝出来的文件,是否和原文件相同呢?可以使用“文件字节比较. exe”程序,对原文件和拷贝出来的文件进行比较判断。
    运行“文件字节比较. exe”程序,程序界面如图10-39所示。

图10-39
    在图10-39的程序界面中,两个编辑框里分别输入两个文件名,一个是原文件名“F:\SYMANTEC-NC5.TXT”,一个是新建立并经过剪切以后的文件名“G:\NC.BAK”。然后点击“比较”按钮,程序界面如图10-40所示。

图10-40
    在图10-40的程序界面中,对话框里显示出了两个文件的比较结果,可以看出它们完全相同。

---------------------------2013.03.29日最后更新 本章结束------------------------------------------

附录:文中软件下载: http://bbs.intohard.com/thread-118572-2-1.html

ygtaifeng 发表于 2013-3-28 11:26:43

好吧 我觉得这是忽悠老百姓呢自己写的软件

八喜 发表于 2013-3-28 13:29:21

ygtaifeng 发表于 2013-3-28 11:26 static/image/common/back.gif
好吧 我觉得这是忽悠老百姓呢自己写的软件

A呀,软件下载地址竟然忘记附注上啦,已经添加,元芳怎么看?

liufeng456 发表于 2013-3-28 14:38:31

呵,可以看书学习了

wujiashi 发表于 2013-3-29 21:11:07

没找到下载的附件在哪呢

wujiashi 发表于 2013-3-29 21:15:38

像你这样的大师级人物,应把好的工具提供下载,好让我们百姓级的人好好学习

REX 发表于 2013-3-30 13:57:00

还是没看到下载地址。。。。

八喜 发表于 2013-3-31 09:38:39

REX 发表于 2013-3-30 13:57 static/image/common/back.gif
还是没看到下载地址。。。。

文章没有仔细看?

REX 发表于 2013-3-31 10:19:37

现在在末尾看到了,可能因为网速不好的原因吧。昨天确实没看到有网址链接。。。

笨菜鸟 发表于 2013-4-12 11:19:10

c 盘系统坏了,可用winpe进入后再插入u盘就可以烤备其它分区数据。
页: [1] 2
查看完整版本: 读物理硬盘恢复一个run的文件数据取自NTFS文件系统扇区存储探秘