实验地点:主楼A2-412
一、实验室名称:主楼实验室A2-412
二、实验项目名称:磁盘存储结构与文件恢复实验
三、实验学时:6学时
四、实验原理:
在Debug环境下利用基本汇编程序对引导扇区、文件分配表、目录表等结构进行显示,并进行分析;
使用工具软件WINHEX对指定的文件(被删除文件)进行恢复。
五、实验目的:
1)了解文件系统在磁盘上的存储映像和它在系统安全中的地位和作用;
2)了解文件目录结构及其访问方式;
3)掌握使用系统基本汇编程序进行磁盘和文件结构访问的技术和编程方法,为数据恢复奠定基础。
六、实验内容:
1)在DEGUB下,使用汇编指令读取MBS引导扇区,记录并分析说明结构。
2)在DEGUB下,使用汇编指令读取DBS引导扇区,记录并分析说明结构。
3)在DEGUB下,使用汇编指令读取FAT、FDT,记录并分析说明结构。
4)生成一个简单文本文件(*.txt文件),结合FAT,FDT信息,使用汇编指令,在硬盘上查找并读出该文件,记录并说明查找过程。
5)删除生成的文本文件,查看该文件在FAT、FDT所对应的文件存储状态以及该文件在数据区对应扇区的内容,说明文件删除操作的原理。
6)使用WINHEX软件进行文件恢复操作练习。
七、实验器材(设备、元器件):
PC微机一台(至少具有一个FAT格式磁盘分区),VMware Workstation6.0虚拟机软件,DOS7.0,WINHEX软件。
八、实验步骤:
任务一、读取MBS引导扇区
1.在DEGUB下,使用汇编指令读取MBS引导扇区。
2.根据显示的信息,分析说明MBS结构及字节含义和具体数值。
任务二、读取DBS引导扇区和磁盘参数块BPB
1.在DEGUB下,使用汇编指令读取DBS引导扇区。
2.根据显示信息,分析说明引导扇区结构。
3.根据显示信息说明磁盘参数块BPB结构及各段含义和具体数值。
任务三、读取FAT表
1.生成一个简单文本文件(*.txt文件),取“长文件名”。
2.在DEGUB下,使用汇编指令读取FAT表。
3.根据显示信息,说明FAT的作用与格式。
任务四、查找文件
1.以“任务三”所生成的文本文件(*.txt文件)为目标,根据FDT查找该文件。
2.根据BPB中的信息,计算FDT位置。
3.编写代码显示FDT。
4.根据FDT信息,确定文件首簇号,根据公式计算目标文件起始扇区位置。
5.编写代码读取该文件对应的扇区,查看扇区存储的文件内容。
任务五、文件删除原理
1.删除生成的文本文件
2.查看FDT,检查已删除文件在FDT中所对应的状态信息的变化。
3.查看FAT,检查已删除文件在FAT中所对应的状态信息的变化。
4.查看已删除文件在数据区扇区中的内容,理解文件删除原理。
任务六、文件恢复
1.在FAT16(32)格式的磁盘中,使用WINHEX进行文件恢复操作练习。
九、实验数据及结果分析:
任务一:读取MBS引导扇区
1.给出编写的完整DEBUG指令,记录(拷贝屏幕输出)读出的MBS引导扇区内容,并对其进行结构分析和说明。
以上就是代码以及mbs全部内容,1000-11b7为引导程序,11b8-11bb为磁盘签名,11bc-11bd默认为0,11be-11fd为分区表,四个表项,每个16字节。这个例子里只有一个分区,开头一字节为80,表示主活动分区。最后两字节为结束标志。
2.计算当前磁盘空间大小。
当前磁盘空间为保留扇区(包括MBR)加上所有分区大小,这里保留扇区为3f,分区大小看最后4字节(11ca-11cd),即03bf85,总共为03bfc4*0200字节。
任务二:读取DBS引导扇区
1.给出编写完整DEBUG指令,记录(拷贝屏幕输出)读出的DBS引导扇区内容,并对其进行结构分析和说明。
以上为代码及dbr所有内容,1000-1001为跳转指令,1002为nop,1003-100a为OEM代号,100b-103d为bpb,103e-11fd为引导程序,最后两字节为结束标志。
2.说明和计算磁盘参数块BPB的结构及各段含义和具体数值。
每扇区字节数0200(100b-100c),每簇扇区数4(100d),DBR保留扇区数1(100e-100f),FAT个数2(1010),根目录最大目录项数0200(1011-1012),扇区总数0(1013-1014),介质描述符f8(1015),每FAT扇区数0f0(1016-1018),每磁道扇区数3f(1018-1019),磁头数4(101a-101b),隐藏扇区数3f(101c-101f),扇区总数3bf85(1020-1023),BIOS驱动器号80(1024),1025未用,扩展引导标记29(1026),卷序列号2f2f1ceb(1027-102a),卷标202020303137534f44534d(102b-1035),文件系统类型fat16(1036-103d)。
任务三:读取FAT表
给出编写完整DEBUG指令,记录(拷贝屏幕输出)读出的FAT表内容,并说明FAT的作用与格式。
以上为代码和fat1。每个fat项占2字节:0号描述介质类型,f8表示为硬盘;1号为肮脏标志;2号起没两个字节为1fat项:fff7表示坏簇,ffff表示某文件最后一个簇,00表示可用簇,其他表示某文件的下一个簇的簇号。
任务四:查找文件
记录并说明对文本文件进行查找的过程,以及每步产生的结果与分析。
1.根据BPB中的信息,计算FDT位置。
2.编写代码显示FDT,观察长文件名的显示格式,并记录目标文件的首簇号。
3.根据公式计算目标文件起始扇区位置。
4.读取文件在数据区扇区中的内容并记录。
这里分别实验了fat16和fat32:
Fat16:
根据bpb,每fat表占0f0字节,保留扇区为1,则fdt的起始扇区为1+0f0*2=1e1.
以上为fdt内容,个人觉得用l命令简单得多,上面的a代码还要涉及每磁道扇区数等等,下面用l实现相同的功能:
我用的fat16不支持长文件名,所以后面又用fat32重新做了一遍,这里也可以读取文件内容。如1e1(fdt)+20h+4=205h,即fdt起始扇区+fdt大小+(3-2)*每簇扇区数。文件首簇可以从目录项倒数第6字节和第5字节看到。
下面说fat32:
原理基本跟fat16类似:
这里需要说的是bpb肯定不一样,fat表项为4字节,我们现在主要目的是看长文件名,就不赘余了。
上面的是部分根目录项,其他的被我省了。这里看文件LIHUAN~1.TXT,创建长文件名时,也会创建个短文件名,前6字节+~1构成短文件名,另一个长文件名需要多个目录项时,其倒序排列在短文件名目录项之前。现在查找其内容:由于fat32把根目录放在数据区,故而文件位置在:20(保留扇区数)+2*0ff7(fat大小,在1024-1027)+(08b5-2)*8=65a6:
任务五:文件删除原理
1.显示FDT,记录已删除文件在FDT中所对应的状态信息的变化。
2.显示FAT,记录已删除文件在FAT中所对应的状态信息的变化。
3.查看已删除文件在数据区扇区中的内容。
4.根据以上结果,说明文件删除原理。
由以上几个图片可以看出:fat表里对应fat项清0,fdt对应目录项近把第一字节修改为e5,文件内容并不修改。所谓删除,即把fat表项删除,fdt标示e5表示曾被占用,现已删除。
任务六:文件恢复
1.记录并说明使用WINHEX进行恢复操作的过程中所使用的主要磁盘参数。
主要用到的磁盘参数和前面dos里一样,根据bpb找fat,bpb里可以找到根目录首簇号,结合fat大小数量,找到根目录,查找文件首簇,定位,截取内容,粘贴到新文件里,搞定。
2.简要叙述使用WINHEX进行恢复操作的主要步骤。
下面用winhex处理下xp下一个磁盘fat32分区内容:
创建一个文件:
在winhex里看:
先彻底删除文件:
同前面dos原理,用winhex找到根目录:
再根据首簇3号找到内容(这里说一下,这里文件其实地址已修改,只是首簇号高位本就是0,清0看不到效果,低位不修改)。把文件内容截取出来保存在d盘一个新建文件下:
然后打开,和源文件内容一样,恢复成功。
十、实验结论:
充分了解了mbr,dbr,bpb,fat,fdt等结构,由于同时操作了fat16和fat32,可以看出各结构的异同,熟悉了长文件名的存储,并亲自恢复了一个文件,收获很多。
十一、总结及心得体会:
通过本实验,了解了文件是怎样存储在磁盘上的,通过什么途径和方法能够在磁盘上找到它们,对文件和数据的读写和删除在磁盘上会产生什么样的改变和结果,为下一步理解文件和数据的恢复奠定基础。掌握使用系统基本汇编程序(Debug汇编)进行磁盘和文件结构访问的技术和编程方法。