Office文件打开密码测试工具

2022-12-01 11:37:34 浏览数 (1)

Office文件一旦被设置了打开密码,如果忘记了,一般情况下是很难找回的。

前2年研究过一下,以前写过的复合文档解析的文章,也和这个相关。

当时看的是微软官方文档:[MS-OFFCRYPTO] - v20171212,英文的!

我英语相当不咋地,很多时候都是边在线翻译边看,好难看懂。

经过边看边猜的漫长过程,也蒙出来点东西,由于用VBA代码太难实现了,所以一直也没有写,最近想着用go语言做个工具:

1 Office文件加密方式

根据[MS-OFFCRYPTO] - v20171212文档,连蒙带猜应该是有以下几种加密的方式:

测试使用的是笔记本电脑,CPU是i5、4核

现在的Office365不知道在哪设置加密的方式了!第2种没找到,就没做测试。

从文档的加密方式来看,因为使用了hash函数,所以直接破解出密码理论上应该是不可能的。

从hash 的次数来看:

  • 03版本的(xls、doc、ppt等后缀的),每秒38万的测试速度,如果是纯数字的密码,那么10位数字内的密码,总数100亿,大概要7小时。
  • ECMA-376格式的(应该就是07版本以上,xlsx、docx、pptx等后缀的),理论上如果设了一个较为复杂的密码,是不可能破解的;如果设置的密码简单,比如纯数字的6位数,总数是100万,按第3种每秒66个的话,大概要4小时。

这还是可以接受的。

同时因为hash函数里还加了点“盐”(salt随机数),所以想事先将密码的hash值计算好存储起来,以此来节省hash的时间也是不可能的!

2 使用VBA测试密码

因为VBA里提供了Workbooks.Open方法,是允许带密码参数的,所以使用这个也可以做个简单的密码测试工具:

代码语言:javascript复制
Set wk = Workbooks.Open(Filename:=file_name, UpdateLinks:=False, PassWord:=str)
        If Not wk Is Nothing Then
            UnProtectExcel = str
            Exit Do
        End If

主要的代码就是使用错误捕获的方式来判断是否成功打开了文件。

用这个方法测试的速度:

速度明显慢了很多。

3 关于工具

因为文档是英文的,很多地方是连蒙带猜的,应该会有一些错误的地方。

工具左边是个树形目录,展示的是复合文档的结构,Office文件加密后都是保存为复合文档的,后续看情况把复合文档的一些解析功能也加进来,比如VBAProject里介绍的VBA模块代码的提取、模块的隐藏等。

工具获取密码的方式目前提供了2种:

  • 一种是输入元素进行排列组合获取:元素按空格隔开,可以是多个字符的元素,比如[0 1 aa xiong 2],这表示5个元素;排列组合选择的数量可以输入多个,比如可能是元素中的3个或者4个的排列组合,输入[3 4]
  • 一种是直接选择保存了密码的文本文件按行读取

工具使用的是go语言编写,UI使用的是fyne,理论上应该是可以跨平台,但我没有其他平台电脑,没做相关测试,如果有其他平台需要的可以联系,顺便帮忙测试。

使用过程中发现bug也欢迎随时联系我。

获取方式:

在微信公众号回复oct获取

0 人点赞