- 积分
- 4
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2008-3-24
- 精华
|
马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
好长时间没写东西了,今天写一下怎样手工修复xls文档。大家都有文档打不开,或者是乱码的情况吧,看了下面的文章或许对你有帮助。
这里仅限于文档头的研究与恢复。看图。
文档头和DBR有点类似,各字节含义的内容如图。要修复的有7个,
1、存放扇区配置表(SAT)的扇区总数
2、存放目录流的第一个扇区的SID
3、存放短扇区配置表(SSAT)的第一个扇区的SID
4、存放短扇区配置表(SSAT)的扇区总数
5、存放主扇区配置表的第一个扇区的SID(如果为-2表示没有附加扇区)
6、存放主扇区配置表的扇区总数
7、存放主扇区配置表(MSAT)的第一部分
如果文件比较小(存放主扇区配置表的第一部分在第0扇区没有装满),第5、6两部分不用修改。
上图是网友们传过来的,在这里感谢网友们的支持。
下面我一个个说明一下,怎么倒推计算。
(1) 存放扇区配置表sat的扇区个数计算
扇区配置表是一个sid数组,包括所有用户流(短流除外)和内部控制流,sat(sid个数)大小等于文档扇区数。和fat32格式的fat表一样。4字节表示一个。开始标志FD FF FF FF 也就是-3.计算公式为:f(sat,n)=[n/128]+1 (n>=27)公式中的128是指一个扇区的大小可以表示128个扇区。此函数不连续,是孤立的点。对于小于128扇区的xls文档,该值就是01 00 00 00。因此对于物理0扇区的偏移0x00 ,0x10,0x20这48字节值,可以从一个完整的xls文本复制过来。f(sat,n)也是主扇区配置表的大小。见(7)
(2)存放目录流的第一扇区的SID。Xls文档分为6部分,分别是头(Header),workBook区,Summary Information区,Documment Summary Information区,Bigblock Pointer区,和RootEntry区。除workBook区是变量外,其余的都是定值。也就是固定大小的。类似与fat格式的FDT,固定大小占32扇区一样。对于存放目录流的第一扇区的SID的计算,首先找RootEntry区,RootEntry区开始的扇区-1就是存放目录流的第一扇区的SID。
表达式为f(R,sid)=g(R)-1。以上的值都是10进制下的。填写的时候需转为16进制。
(3)标准流的最小大小。这个值一般为4096字节。
(4)短扇区配置表(SSAT)的第一个扇区SID
该值位于故目录入口偏移0X74处,占4个字节,在物理0扇区填写时,应减去1.
(5)SSAT的扇区数。
该值位于故目录入口偏移0X78处,占4个字节。
公式为F(x)=x/64 若F(x)<128则占用1个扇区。
(6)主扇区配置表的第一个扇区SID和MSAT的扇区数。
若SID为-2,则没有附加扇区用于存放MSAT,所以大小也为0.
(7)存放SSAT的第一部分。这部分恢复比较麻烦。数据根据(1)来。也就是f(sat,n)是几,这就有几个。总字节数= f(sat,n)*4.找标志 01 00 00 00 02 00 00 00。这个扇区是从01 00 00 00 02 00 00 00 ……80 00 00 00此为第一个扇区,接着往下是81 00 00 00 ……FE FF FF FF(-2)结束。在往下找01 01 00 00 02 01 00 00,这个扇区是从01 01 00 00 02 01 00 00……80 01 00 00,此为一个扇区,接着往下是 81 01 00 00 ……到FE FF FF FF(-2)结束。
该物理扇区-1,就是该部分需填写的值。表达式为g(x,sid)=w(x)-1.
以上写的只是通过归纳法得出的。可能有不对的地方,请各位高手指正。在这里感谢网友们提供的图片。 |
|