office文档元数据分析与获取实践

1、关于office元数据,百度了一圈,资料比较散,最后找到了《MSOffice系列办公文档取证分析研究》这篇文章,和我找的资料相符,这里就引用一下这篇文章里涉及的内容。

2、xlsx文件的元数据比较简单,右键选择用压缩软件打开xlsx文件,在docProcs目录下可以找到core.xml文件

 使用python的xml库解析core.xml文件,就能获取到最后一次保存的日期

import zipfile
import xml.dom.minidom as xdom
import datetime
 
p = r'D:\python\test.xlsx'
azip = zipfile.ZipFile(p)
a = azip.read('docProps/core.xml').decode('utf-8')
xp = xdom.parseString(a)
root=xp.documentElement
ele=root.getElementsByTagName('dcterms:modified')
md_time_str = ele[0].firstChild.data
md_time = datetime.datetime.strptime(md_time_str, '%Y-%m-%dT%H:%M:%SZ')
md_time_local = md_time + datetime.timedelta(hours=8)
print(f'最后一次保存的日期:{md_time_local}')
ele=root.getElementsByTagName('dcterms:created')
cr_time_str = ele[0].firstChild.data
cr_time = datetime.datetime.strptime(cr_time_str, '%Y-%m-%dT%H:%M:%SZ')
cr_time_local = cr_time + datetime.timedelta(hours=8)
print(f'创建内容的时间:{cr_time_local}')
azip.close()

3、xls文件的实现就相对麻烦一些

同样用压缩软件打开xls文件,可以看到_SummartInformation文件

 导出后使用WinHex打开该文件,如图

01CH开始的20个字节记录了属性组信息,其中的后4个字节记录了属性组相对于该数据流起始位置的偏移,此处采用了16进制小端方式,所以偏移量为30,所以从30H开始为属性组数据,我们需要的元数据就记录在这里。

每个属性占据8个字节,前4个字节记录属性的种类,此处0x02记录的是文档标题,0x04记录的是作者,0x08记录的是最后一次保存者,0x0B记录的是最后打印时间,0x0C记录的是创建时间,0x0D记录的是最后保存时间,后4个字节记录的是该属性相对属性组的偏移,这里以最后保存者和最后保存时间为例说明。

最后保存者的相对属性组的偏移为010C,即013CH开始到014FH结束,前4个字节记录的估计是属性内容的类型(未找到资料),分析0x1F为字符串型,使用python进行解码,即可获得最后保存者内容。

hex_byte = b'\x06\x00\x00\x00\x46\x8c\x46\x8c\x11\x54\x4d\x52\xb2\x51\x00\x00'
result_byte = hex_byte.decode('utf-16')
print(f'16进制解码之后的数据为:{result_byte}')

 同理最后保存时间属性从0168H开始到0173H结束,前4字节04分析代表时间类型,因为是小端,所以实际时间为01d85d0f3014ed00,用python进行解码,即可获得最后保存时间。

from datetime import datetime,timedelta
dt = '01d85d0f3014ed00'
us = int(dt,16) / 10.
local = datetime(1601,1,1) + timedelta(microseconds=us) + timedelta(hours=8)
print(local)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值