Office文件一旦被设置了打开密码,如果忘记了,一般情况下是很难找回的。
前2年研究过一下,以前写过的复合文档解析的文章,也和这个相关。
当时看的是微软官方文档:[MS-OFFCRYPTO] - v20171212,英文的!
我英语相当不咋地,很多时候都是边在线翻译边看,好难看懂。
经过边看边猜的漫长过程,也蒙出来点东西,由于用VBA代码太难实现了,所以一直也没有写,最近想着用go语言做个工具:
根据[MS-OFFCRYPTO] - v20171212文档,连蒙带猜应该是有以下几种加密的方式:
测试使用的是笔记本电脑,CPU是i5、4核
现在的Office365不知道在哪设置加密的方式了!第2种没找到,就没做测试。
从文档的加密方式来看,因为使用了hash函数,所以直接破解出密码理论上应该是不可能的。
从hash 的次数来看:
这还是可以接受的。
同时因为hash函数里还加了点“盐”(salt随机数),所以想事先将密码的hash值计算好存储起来,以此来节省hash的时间也是不可能的!
因为VBA里提供了Workbooks.Open方法,是允许带密码参数的,所以使用这个也可以做个简单的密码测试工具:
Set wk = Workbooks.Open(Filename:=file_name, UpdateLinks:=False, PassWord:=str)
If Not wk Is Nothing Then
UnProtectExcel = str
Exit Do
End If
主要的代码就是使用错误捕获的方式来判断是否成功打开了文件。
用这个方法测试的速度:
速度明显慢了很多。
因为文档是英文的,很多地方是连蒙带猜的,应该会有一些错误的地方。
工具左边是个树形目录,展示的是复合文档的结构,Office文件加密后都是保存为复合文档的,后续看情况把复合文档的一些解析功能也加进来,比如VBAProject里介绍的VBA模块代码的提取、模块的隐藏等。
工具获取密码的方式目前提供了2种:
工具使用的是go语言编写,UI使用的是fyne,理论上应该是可以跨平台,但我没有其他平台电脑,没做相关测试,如果有其他平台需要的可以联系,顺便帮忙测试。
使用过程中发现bug也欢迎随时联系我。
获取方式:
在微信公众号回复oct获取