之前说好的更新,因为私人原因,有点事所以耽搁了,没能去及时的更新,今天先更新一下,下周可能要回趟学校,又无法更新了。今天我想说的是Office复合文件格式,之前一直在学习PE方面的知识(有关PE的那些博客,我之后也会抽空更新,今天想说说非PE)所以研究的文件格式主要集中在PE文件方面,最近有幸接触到非PE文件格式,想和大家一起分享学习一下这个格式,之所以进行这个文件的学习,因为其也是病毒的载体文件中的一种,非PE文件格式太多太大杂,我们就先从最常见的Office文件类型开始。因为对非PE感兴趣的人可能不是很多,所以国内相关的文档不是很多,所以我也去国外的网站看过一些文章,以及非PE病毒攻击方式。我自己也翻阅了微软有关该文件格式的文档,今天是第一篇,就随便说点,说到哪儿算哪儿。
我对于概念的理解:Office复合文档结构,说直白一点其内部就相识一个文件系统一样,文件系统中,我们有各层目录,然后最终到达我们存储数据的文件。对于Office文档来说,也是一样的,它会把其中的娄数据分别存放到很多个数据流中(streamQ),而这些数据流又保存
在不同的storage(翻译过来是仓库,也太挫了,就中英混杂了,装个b 里面。其大致可以用下图来表示:
和PE文件相似,复合文档也有自己的文件头部,今天我说的都是wo ord97-03的文档,其word文档后缀是doc,而这个文档类型又称为OLE文件。我们先从OLE文件的头部说起。
我们可以从图中的我所打开的文件左侧十六进制编码,开头的\x00\xCF\x11\xE0\xA1\xB1\x1AlxE1这8个字节是固定的,一般也被用来校验OLE文件的第一道防线,这就是OLE文件的标志。
我自己代码中的结构体和一点简单注释有关这个512字节大的结机构头部。
typedef struct _OLEHeader_ { BYTE Signature[8]; //OLE文件标识符 "\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1"; GUID clsidNULL; //Unique Id,May be All 0 USHORT VerMinor; //Minor Version Most used is 003E USHORT VerDll; //DLL Version Most used is 0003 USHORT ByteOrder; //字节序 小端0xFEFF 大端0xFFFF USHORT SectorShift; //符合文档中sector的大小,最小是7 也就是2^7 (128字节)最多的是9也就是512字节 USHORT MiniSecShift; //minisector size Short-stream in the short-stream container stream ,Most used 2^6(64字节) USHORT Reserved; //保留值 0 ULONG Reserved2; //0 ULONG NumDirSects; //0 ULONG NumFatSects; //主扇区配置表使用总数 ULONG DirSect1; //Section Id of first section of directory stream ULONG TransactSig; //一般为0 ULONG MniStrMax; //max value of mini stream一般为0x1000 ULONG MiniFatSect1; //Section id of first sector of the Short-sector ULONG NumMiniFatSects; //Number of sections used by Short-sector ULONG DifatSect1; //附加的主扇区配置表 ULONG NumDifatSects; //大小 ULONG DiFat[109]; //主扇区配置表 偏移0x4C }OLEHeader, *POLEHeader;
关于这些结构中的各个重要字段,我之后会结合一个doc文档,细细的来说,纸上得来终觉浅,绝知此事要躬行,对于文件结构学习之后,字节也写了一个ole文件解析的代码,后面会结合文档来细细了角解这个文件结构。今天就先到这里,下次更新时间,待定…
按照惯例本来是一句诗句结尾的,今日不吟诗。我好兄弟昨日当兵去了,我人在北京,也没办法去送送他,所以今天在这里为他送上祝福:披上军装的你,必然有着飒爽英姿,必然会所向披靡,愿你为国国效力,平安归来。两年后当兵归来,兄弟们定为你接风洗尘!还有就是,我真的特别为你感到自豪,军人最帅!!!To:HDX