1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > doc.xls ppt docx xlsx pptx文件加密判断

doc.xls ppt docx xlsx pptx文件加密判断

时间:2020-11-22 09:28:59

相关推荐

doc.xls ppt docx xlsx pptx文件加密判断

office和wps采用的都是复合文档格式,至于什么是复合文档可以参考:/thread-227502-1-1.html。

虽然两者都是复合文档格式,而且流名称相同,但是流的位置稍有偏差(位置计算方式相同)。具体的文档结构可以通过工具查看。工具地址:/download/qq_39268442/11839084

本文只大致讲解一下加密位的判断,不上代码,做好准备工作以下就开讲啦。

一.对于doc文件加密判断:

加密判断方式:\Root Entry\WordDocument流下的fEncryptedfObfuscated的值,这两个字符各占一位,如果fEncryptedfObfuscation均为1,对文件进行模糊处理。如果fEncrypted为1且fObfuscation为0,则文件加密。

知道了加密判断位,那么判断位的偏移量怎么计算呢?首先要找到WordDocument流的位置,然后获取流data便宜量,最后按字节加就可以了。data偏移量的公式如下:iSectorSize >= 4096 ? 512 + iSector * 512 : 2048 + iSector * 64(其中iSectorSize 为WordDocument流data所在扇区,iSector 为扇区号),公式算法就不讲了,可以看复合文档。

下图为WordDocument流信息startSect是扇区编号,Sizelow是扇区大小。

对于office的doc一般偏移位置是固定的,为512+10,但是对于wps下的doc文件fEncrypted偏移量却不是固定的,因为它的流信息一般在末尾。所以该位置需要计算,不能写死。fEncryptedfObfuscated位于同一个字节,可以通过&运算判断0x1,0x80.以下是官方文档,对格式的说明。

F-fEncrypted(1位):指定是按照加密和模糊处理中的指定对文档进行加密还是模糊处理。

ģ - fWhichTblStm(1个比特):指定表流至该FIB指。将该值设置为1时,使用1Table;否则,使用1Table。当此值设置为0时,请使用0Table。

H-fReadOnlyRecommended(1位):指定文档作者是否建议以只读模式打开文档。

I-fWriteReservation(1位):指定文档是否具有写保留密码。

J-fExtChar(1位):该值必须为1。

K-fLoadOverride(1位):指定是否使用适合于应用程序安装语言的默认值覆盖在istd0(普通样式)的段落样式中指定的语言信息和字体。

L-fFarEast(1位):指定创建文档的应用程序的安装语言是否为东亚语言。

M-fObfuscated(1位):如果fEncrypted为1,则此位指定是否通过XOR模糊处理来模糊文档(第2.2.6.1节);否则,该位必须忽略。

二.xls文件加密判断

xls加密判断与doc类似,但不同的是加密位不相同。加密位判断是在Workbook流下,流data的起始位置算法和doc一致。

加密位PASSWORD,如果该值为0则未加密。需要注意是password相对该扇区(data起始位置)的偏移量并不是定值,需要计算。

三.ppt文件加密判断

如果ppt文件加密,那么她的atom record必然存在cryptoSessionPersistIdRef(四字节)结构。所以判断方式,便是查找记录头对下面记录大小的描述是否符合,即通过检测0x00,0x00,0xF5,0x0F四字节后一位判断,如果后一位是0x1C 则未加密,为 0x20 则为加密文件。以下为结构说明:

rh(8个字节):一个RecordHeader结构(第2.3.1节),指定该记录的标题。下表中进一步指定了子字段。

lastSlideIdRef(4个字节):一个SlideIdRef(第2.2.25节),如果该幻灯片是PowerPoint文档流(第2.1.2节)中的最后一个UserEditAtom记录,则它指定查看的最后一张幻灯片。在所有其他情况下,此字段的值是不确定的,必须忽略。

版本(16位):一个无符号整数,指定写入文件的可执行文件的生成版本。这应该<9>为0x0000,必须忽略。

minorVersion(8位):一个无符号整数,指定存储格式的次版本。必须为0x00。

majorVersion(8位):一个无符号整数,指定存储格式的主要版本。必须为0x03。

offsetLastEdit(4个字节):一个无符号整数,指定从PowerPoint文档流的开头到上一个用户编辑的UserEditAtom记录的偏移量(以字节为单位)。它必须小于此UserEditAtom记录的偏移量(以字节为单位)。值0x00000000指定不存在先前的用户编辑。

offsetPersistDirectory(4个字节):一个无符号整数,以字节为单位,指定从PowerPoint文档流开头到此用户编辑的PersistDirectoryAtom记录的偏移量。它必须大于offsetLastEdit且小于此UserEditAtom记录的偏移量(以字节为单位)。

docPersistIdRef(4个字节):一个PersistIdRef,它指定要在持久对象目录中查找以找到DocumentContainer记录的偏移量的值。它必须是0x00000001。

persistIdSeed(4个字节):一个无符号整数,指定用于创建新的持久对象标识符的种子。它必须大于或等于PersistDirectoryAtom记录所指定的文件中的所有持久对象标识符。

lastView(2个字节):一个ViewTypeEnum枚举,该枚举指定用于显示文件的最后一个视图。

未使用(2个字节):未定义,必须忽略。

cryptoSessionPersistIdRef(4个字节):可选的PersistIdRef,它指定要在持久对象目录中查找的值,以查找CryptSession10Container记录的偏移量。有可能被省略。如果文档是加密文档,则必须存在。

四.docx.xlsx.pptx文件加密判断

该类文件修改文件后缀可以直接变为zip压缩文件,所以该类文件加密判断只需要判断文件前四个字节是否为0x50, 0x4b, 0x03, 0x04就可,如果是,未加密。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。