首页
学习
活动
专区
圈层
工具
发布
综合排序丨最热优先丨最新优先
时间不限
VBA解析复合文档02——复合文档结构
尽量用一些通俗的语言来讲一下复合文档的结构,如果要真正掌握每一个细节,还是要看官方的文档,所以这里讲的可能不会完全正确,只是大概了解一下复合文档的结构逻辑。 复合文档结构 一个文件在被创建的时候,文档的结构也同时生成,这里不讲生成的过程如何去创建这个结构,只拿生成后的文件来讲。 假如一个10KB文件,每个扇区大小是512Byte,举例如下: ? 01 扇区 复合文档把保存文件的磁盘空间划分了扇区(Sector),在扇区里存放数据信息。文件的开头一个扇区固定是Header结构,这个结构的信息非常重要,是解析整个文件的基础。 03 MiniFAT MiniFAT其实完全可以理解为它是一个单独的复合文档结构,只是没有目录结构。 只要理解了Header结构、目录结构、DIFAT数组、FAT数组、MiniFAT数组,解析复合文档就没什么难度了。 通过这些信息,构建出来扇区链表,就可以到分布的扇区中,读取或者改写数据。
xyj
2020-08-03
1.6K0
标签:
VBA解析复合文档00
1、什么是复合文档? 可能这个名字没有听说过,但是只要使用过Windows电脑的,其实都接触过这种结构的文件,只是没有注意到而已。 2007版本以上的Office文件,如果设置了打开密码,仍然是使用复合文档结构来存储的。 详细请看微软官方文档: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b 2、解析复合文档有什么用 01 深入了解Excel的文件结构 解析复合文档,能够更加深入理解Excel的文件结构,虽然2007版本以上的Excel已经 换成了xml标记语言存储,但是VBA代码相关的vbaProject.bin 文件还是使用了复合文档结构。
xyj
2020-08-04
1.8K0
标签:
VBA解析复合文档07——Parse参数IReadWrite
因为考虑到除了直接读取文件之外,还有可能直接传入一个已经读取好了的Byte数组,比如直接从2007版本以上的Excel中读取vbaProject.bin,所以定义了一个IReadWrite接口:
xyj
2020-08-13
8870
标签:
VBA解析复合文档03——解析扇区链表
通过前面对复合文档结构的分析,解析起来问题就不大了。 Long iret = cf.r.Read(cf.Header.Signature) If iret <> 8 Then parseCfHeader = "复合文档 For i = 0 To 8 - 1 If cf.Header.Signature(i) <> arr(i) Then parseCfHeader = "复合文档 Exit Function End If If cf.Header.MiniSectorShift <> 6 Then parseCfHeader = "复合文档 Exit Function End If Else parseCfHeader = "复合文档:Major Version must by 3
xyj
2020-08-05
1.2K0
标签:
VBA解析复合文档04——解析目录信息
01 解析目录 目录信息存放的才是复合文档中的真正数据的一些信息,也只有通过目录信息才能正确读取到数据流: Private Type CFDir EntryName(63) As Byte cf.MiniFAT) Then Exit For Next l_SID = cf.FAT(l_SID) Next End Function 到此复合文档的结构就解析完成了
xyj
2020-08-10
9470
标签:
VBA解析复合文档01——实现的功能
实现功能: 01 Parse '解析复合文档,获取复合文档文件信息'ir 一个实现了IReadWrite接口的类'Return 返回出错信息Function Parse(ir As 02 GetStream '读取某个数据流'dir_name 需要读取的文件名称,是复合文档中的文件名称'RetBytes 返回的数据Byte数组'Return 返回出错信息Function 保存文件的路径'Return 返回出错信息Function GetAllStream(SavePath As String) As String 这个功能就相当于使用7Z压缩软件解压一个复合文档 04 ReWriteStream '改写数据流'dir_name 需要被改写的文件名称,是复合文档中的文件名称'WriteBytes 需要改写为的数据Byte数组'Return 返回出错信息
xyj
2020-08-03
9370
标签:
VBA解析复合文档06——改写数据流
'改写数据流 'dir_name 需要被改写的文件名称,是复合文档中的文件名称 'WriteBytes 需要改写为的数据Byte数组 'Return 返回出错信息 Function ReWriteStream ReWriteStreamByDirIndex(VBA.CLng(cf.h.GetItem(dir_name)), WriteBytes) Else ReWriteStream = "复合文档 '1仓storage 2流 5根 If cf.ArrDir(dirIndex).ObjectType <> 2 Then ReWriteStreamByDirIndex = "复合文档 End If If cf.ArrDir(dirIndex).StartingSectorID = Free_SID Then ReWriteStreamByDirIndex = "复合文档 cf.lSectorSize > cf.ArrDir(dirIndex).StreamSize \ cf.lSectorSize Then ReWriteStreamFAT = "复合文档
xyj
2020-08-10
9540
标签:
VBA解析复合文档05——读取数据流
MiniFAT数组、目录信息,读取某个数据流就很简单了,只需要根据FAT数组或者MiniFAT数组构建的扇区链表,逐个扇区的去读取就可以: '读取某个数据流 'dir_name 需要读取的文件名称,是复合文档中的文件名称 GetStream = GetStreamByDirIndex(VBA.CLng(cf.h.GetItem(dir_name)), RetBytes) Else GetStream = "复合文档 '1仓storage 2流 5根 If cf.ArrDir(dirIndex).ObjectType <> 2 Then GetStreamByDirIndex = "复合文档 End If If cf.ArrDir(dirIndex).StartingSectorID = Free_SID Then GetStreamByDirIndex = "复合文档
xyj
2020-08-10
1.3K0
标签:
VBA解析复合文档08——应用-解析Thumbs.db
在前面提到过,Thumbs.db文件也是一个复合文档,里面存储的数据流就是图片的缩略图。
xyj
2020-08-13
1K0
标签:
加密模式CBC、ECB、CTR、OCF和CFB
在开发中如果有接触到加密,就一定遇到过MD5、DES、Triple DES、AES、RSA等加密方式(这些都叫加密算法);在深入了解加密领域的知识时,除了有加密算法外;还有加密模式(CBC、ECB、CTR、OCF、CFB 密码反馈模式(Cipher FeedBack,简称CFB):实际上是一种反馈模式,目的也是增强破解的难度。
BUG弄潮儿
2020-06-12
5.1K0
标签:
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档