复合文档二进制存储结构通俗讲义及文件头的修复_第1页
复合文档二进制存储结构通俗讲义及文件头的修复_第2页
复合文档二进制存储结构通俗讲义及文件头的修复_第3页
复合文档二进制存储结构通俗讲义及文件头的修复_第4页
复合文档二进制存储结构通俗讲义及文件头的修复_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、复合文档二进制存储结构通俗讲义 作者 dengyanhui 首先,大家可以将复合文档与FAT文件系统对比起来学习,复合文档和FAT文件系统有许多相似之处。1. 复合文档类似于FAT文件系统,大家在理解的时候可以把复合文档和文件系统放到同一个层次;2. FAT文件系统有DBR ,FAT表目录。那么对应的复合文档就是文件头,主扇区配置表(MSAT),扇区配置表(SAT),短扇区配置表(SSAT)和复合文档的目录;3. 在FAT文件系统中,文件采用扇区为单位存储数据,多个扇区组成簇,文件占用多少个簇,占用了哪些簇,簇链是怎样的这个就是由FAT表记录的。相对应的复合文档中,数据也采用扇区来存储数据,只

2、是复合文档中的扇区有基本扇区和短扇区之分。在文件系统中一个扇区占用512个字节,在复合文档中,扇区的大小在文件头中有规定,不过基本都是512个字节。短扇区的大小也在文件头中作出了规定。一般是64个字节。4. 在复合文档中,数据信息被叫做流,按照流的大小有基本流和短流之分,按照功能来分,有控制流和数据流之分;流相当于文件系统中的文件,文件系统中的文件夹在复合文档中就对应仓库。那么流存在哪里呢?文件系统中数据以扇区来存储,在复合文档中,基本流以扇区来存储,短流由短扇区来存储。而多个短流就组成短路存放流,而且短流存放流是以扇区来存储的;这里给大家总结一下:l 流以扇区来存储;l 短流以短扇区来存储;

3、l 短流组成短流存放流,短流存放流也是以扇区来存储的;l 在文件系统中文件以簇来管理,多少个扇区组成一个簇,在DBR中有记录,相应的在复合文档中,基本流的大小也是在文件头中记录的,一般是8个扇区,也就是说基本流的大小相当于簇的大小一样;5. 在文件系统中,FAT表管理文件的簇链,而在复合文档中,这个工作交给了主扇区配置表,扇区配置表,短扇区配置表这三个配置表。l 上述三个配置表记录的和FAT表记录的都是表明扇区或者簇的占用情况的;只是在复合文档中区分的更细致;l MAST记录的是SAT的占用扇区情况,也就是说,MAST的功能就是记录SAT占用了哪些扇区,哪些扇区的编号是多少,只是我们这里叫做S

4、ID;l SAT记录的就是一个流占用扇区的情况,一个流占用哪些扇区,哪些扇区的SID是多少;l SSAT记录的就是短流占用扇区的情况;l 这些配置表的大小,起始扇区在文件头中都有记录的就像文件系统的DBR记录FAT表的大小一样。l6. 目录(directory)就是一种控制流,由一些列的目录入口(directory entry)组成,每一个目录入口就指向一个流或者仓库。7. 下面给出复合文档的大概存储结构的实例分析:这个就是复合文档的文件头,我们逐一分析1. DO CF 11 E0 A1 B1 1A E1 复合文档的文件标示;2. 接下来的16个字节表示此文件的唯一标识(不重要,可以全为0;3

5、. 接着的两个字节表示文件格式修订号 3E 00;4. 接着的是文件格式版本号 03 00;5. 接着是字节顺序规则标识 FE FF 表示字节按小头排序,FF FE表示按大头排序;6. 接着的四个字节表示复合文档扇区的字节数 以2的冥形式表示 这里是09 00 那么扇区的字节数就是 2的9次方也就是512个字节;7. 接下来的四个字节表示短扇区的字节数,同上,这里是06 00 也就是2的6次方个字节,这里就是64个字节;8. 接下来的10个字节没有使用,全是0;9. 接着的4个字节表示SAT配置表占用的扇区数,这里是 01 00 00 00 也就是说扇区配置表占用1个扇区;10. 接着的4个字

6、节表示存放目录流的第一个扇区的扇区ID 也就是SID;11. 接着的4个字节没有使用;12. 接着的4个字节表示标准流的最小大小,小于这个值的就是短流;13. 接着的4个字节表示存放短扇区表(SSAT)的起始扇区号。如果不存在短扇区配置表则此处值为 FE FF FF FF;14. 接着的4个字节表示存放短扇区配置表的扇区总数;15. 在往下的4个字节表示存放主扇区配置表(MSAT)的起始扇区号,如果没有则为FE FF FF FF;这里说明一下,这里说的存放主扇区配置表的扇区,因为主扇区配置表的前109个SID是存储在文件头中的,如果主扇区配置表内容太多,文件头中存放不下,那么系统会为主扇区配置

7、表分配其他扇区来存放它。这里的4个字节所指的扇区就是额外扇区。这里的实例是 FE FF FF FF 说明主扇区配置表的内容在文件头中就能存储下了,不需要分配额外的扇区来存储了,所以这里就是 FE FF FF FF ;16. 接下来的4个字节表示存放主扇区配置表的扇区数,这里所指的扇区也是上述的额外扇区;17. 在往下就是主扇区配置表存储在文件头中的SID了。一个SID占用4个字节,这个和FAT表中一个FAT项占用4个字节一样;这个实例中,因为前面已经得出SAT只占用1个扇区,所以这里就只有一个SID了。这里是 29 00 00 00 也就是说SAT从41+1号扇区开始,占用1个扇区。我们的42

8、号扇区存放的就是SAT的内容。为什么是41+1呢?因为29 00 00 00 用十进制表示就是41,而我们的文件头要占用一个扇区,所以我们的SAT就从41+1号扇区开始了;好的,当我们的复合文档文件头受损时,我们就只需要复制一个正常复合文档的文件头,然后修改上述参数就行了。下面我们来逐个分析上述参数。1. 主扇区配置表,这里已经分析过来,这里的主扇区配置表就只有一个SID,就没必要其他的扇区来存放它的内容了,MSAT的前109个项存放在文件头中,如果MSAT有大于109个项的内容,系统才会分配其他扇区来存放多出来的项。2. 扇区配置表(SAT),我们从文件头中看到SAT占用一个扇区,起始扇区记

9、录在MAST中,这里就是MAST的第一个项,29 00 00 00 也就是41+1 ,为什么要加1,我前面已经说过了。我们就转到42号扇区看看扇区配置表(SAT)长什么样。3. 看到了吗,这个就是42号扇区的内容,是不是和FAT表很像啊!SAT表项和FAT表项一样,从0号开始编号,我们以这里为例子说明;在FAT文件系统中,我们可以根据FAT表构造文件存储的簇链,复合文档中我们同样可以构造出流存储的扇区链。 0号表项1号2号3号4号5号6号7号0100000002000000030000000400000005000000060000000700000008000000是不是很熟悉,这个和FAT

10、表一样,表项中存储的是下一个扇区的扇区号。和FAT表链一样的,如果扇区链结束了,也就是说那个流占用的扇区结束了,那么就在以FE FF FF FF最为结束标志。跟FAT文件系统完全一样。如果那个扇区没有使用那么就用FF FF FF FF标示出来,说明这个是个空闲扇区;4. 下面我们接着分析短扇区配置表(SSAT),这里我们从文件头中分析出我们的短扇区配置表开始于2C 00 00 00 也就是44+1号扇区,占用一个扇区。我们转到45号扇区看看短扇区配置表长什么样;这个就是我们的短扇区配置表的内容了,短扇区配置表就相当于短流的FAT表,我们前面说过,短流存储在短扇区中,那么短流的存储情况就在短扇区

11、配置表中记录。这里我们构造出我们实例中的短扇区扇区链;0号表项1号表项01000000FEFFFFFF 剩下的表项内容都是 FFFFFFFF 也就是处于空闲状态;5. 接着分析复合文档的目录结构,看看和我们的FAT文件系统有哪些相似之处:我们从文件头中分析出,我们的目录流的起始扇区是 2A 00 00 00 也就是 42+1号扇区。先说明一下,一个目录入口严格的占用128个字节。好的我们先转到43号扇区看看:看到了吗 43号扇区就是一个目录结构,我们说过了,一个目录入口占用128个字节,这里我用银光笔画出来的部分就是一个目录流入口,这里看到右边的ROOT Entry就是说这个是个根目录入口,用

12、红笔勾画出来的部分是目录流的名字占用64个字节。其他的64个字节的分析就不在这里说明了,有兴趣的朋友可以加我。因为如果复合文件的文件头被破坏了,我们在修复文件头时,需要目录流的起始扇区号,这里我们就可以通过搜索52 00 6F 00 6F 00 74 00 等等ROOT ENTRY的16进制表示来找到目录流的起始扇区。好了,就写到这里了,其他的就大家自己分析吧。我的QQ 415090719 复合文档文件文件头修复首先我们先给出复合文档的数据分配结构:文件头数据区MSATSAT目录SSAT文档标示最后那个文档标示,占用最后一个扇区。不重要;其中的那个MSAT指的是主扇区配置表过大,用来存储过大的

13、那部分MSAT内容的扇区;对于复合文档的修复,主要都是基于修复文件头的,就像是修复FAT文件系统的DBR一样。那么我们就可以根据修复FAT文件系统一样的方法来修复复合文档的文件头。思路就是先拷贝一个正常的复合文档的文件头覆盖掉被破坏的文件头,然后逐一修改相应的参数。这里我们需要修改的参数有以下几个:l SAT占用的扇区数;l 目录流的起始扇区号,也就是目录流第一个扇区的SID;l 短扇区配置表(SSAT)的起始扇区,也就是SSAT的第一个扇区的SID;l 短扇区配置表(SSAT)占用的扇区总数;l 存放主扇区配置表的其他扇区的第一个扇区的SID,如果没有则此处为 FE FF FF FF;l 存

14、放主扇区配置表的其他扇区的扇区总数,如果没有则此处为00 00 00 00;至于扇区大小数,一般都是09 00 00 00也就是512个字节。短扇区大小数一般都是06000000也就是64个字节。还有标准流的大小一般情况下也是00 10 00 00也就是4096个字节;好的,下面我们就根据上述分析来逐一找到那些参数,从而修复复合文档的文件头。0号扇区已经被清零了,文件头完全被破坏了。下面我们来修复这个文件头。l 先复制一个正常的复合文档的文件头覆盖掉受损的文件头,然后逐一修改相应参数;l 我们首先要找的是目录流起始扇区,因为前面分析过,目录流的签名标志是ROOT entry .搜索52006F

15、006F007400找到目录流的起始扇区。我们在1556号扇区找到了目录流的起始扇区,那么我们就确定了目录流的起始扇区这个参数了,为 1556-1=1555 用十六进制表示就是06 13 。接着我们顺着目录流往下找,因为前面说过紧接着目录流的是SSAT。目录流记录的都是一些名称之类的,而SSAT记录的确是SID。这个就跟FAT表记录的内容一样,4个字节占用一个表项。我们很容易就能区分出目录流和SSAT。果然我们就在1558号扇区找到了SSAT。看到SSAT的内容了吗,记录的就是SID和目录流记录的内容完全不一样,我就是通过这个判断出目录流到哪里就结束了。SSAT找到了,起始扇区是1558-1=

16、1557号扇区,大小只有一个扇区,因为SSAT的后面只有一个扇区了,就是前面提过的表示扇区。所以我们的SSAT占用1个扇区。我们又找到了两个参数了。l 接着我们找SAT , 目录流是紧接着SAT的,我们就可以通过找SSAT的方法判断出哪里是SAT。因为SAT记录的也是SID。和目录流记录的内容很不一样。我们顺着目录流往上找,因为1556-1=1555号扇区是目录流的起始扇区,那么1555-1=1554肯定是SAT的结束扇区,因为SAT和目录流是紧接着的。这就是1555-1=1554号扇区的内容,大家可以看到这个记录的就是SID后面的表项内容都是FF FF FF FF也就是说是空闲扇区。现在我们

17、就要来确定SAT占用多少个扇区,如果SAT是连续存储的,那么我们顺着它的结束扇区慢慢往上找根据它内容的特殊性,就能确定SAT占用多少个扇区了。而且,SAT的起始扇区前面一个扇区一般都是以0结束的扇区。前提就是SAT是连续的,不连续的情况,我没遇到过,这里就不做讨论了。好的,我慢慢往上找,终于在1543-1=1542号扇区找到了SAT的起始扇区。现在我们的SAT起始扇区就确定了,因为这里的SAT是连续的,那么SAT占用多少个扇区也就知道了。现在我们需要的参数都确定了下来了,就可以重建复合文档的文件头了。下面我们来总结一下找到的参数:1 SAT占用扇区数 1555-1543+1=13个扇区,起始扇

18、区是1543-1=1542号扇区;2 目录流的起始扇区是1556 1 =1555号扇区;3 SSAT起始扇区是1558 1 =1557号扇区,大小是 1 个扇区;4 因为SAT只占用13个扇区,也就是说MSAT中只需要用13个表项来记录就行了,文件头中能记录MAST的前109个表项,所以文件头中就能放下MSAT的内容了,就不需要额外的扇区来存放MSAT了。所以MSAT的起始扇区就是 FE FF FF FF大小就是00 00 00 005 以上参数确定了之后,最后一步就是修复MSAT的内容了。我们先把上述确定好的参数重写进文件头中。通过以上计算,我们先把确定的参数写入文件头中,现在就只剩下重写MSAT的内容了。我们已经知道SAT的大小是 13 个扇区,起始扇区是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论