前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Office文件打开密码测试工具

Office文件打开密码测试工具

作者头像
xyj
发布2022-12-01 11:37:34
7730
发布2022-12-01 11:37:34
举报
文章被收录于专栏:VBA 学习

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获取

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Office文件加密方式
  • 2 使用VBA测试密码
  • 3 关于工具
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档