首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >破解windows excel密码

破解windows excel密码
EN

Security用户
提问于 2020-05-15 00:19:39
回答 1查看 2.5K关注 0票数 2

我有许多密码保护微软excel工作表,我需要能够编辑它。我忘记了密码,我知道我可以编辑文件并取出密码检查,但我有相当多的工作表,我将不得不这样做。他们都有相同的密码,所以我想破解密码。我已经得到了sheetProtection元素:

代码语言:javascript
复制
<sheetProtection algorithmName="SHA-512" hashValue="exBYsHJhLjU2iumFwDs7uFdq6WBWwAyJj3DqKQg85bmTocK4dNrqCpPePQC23Rikd5QSY5WyREknFGhRxKcB2w==" saltValue="DdJzMvZ9KqpGuTrabHJ1eg==" spinCount="100000" sheet="1" objects="1" scenarios="1"/>

我试着使用这个密码破解这个密码,但是它只给出了一个no password hash loaded错误,当我使用office2john (一个将microsoft文件的哈希转换为john可以使用https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/run/office2john.py的工具)时,我仍然会得到相同的错误。

我该如何破解这个密码(为了这个例子,这里张贴的密码是"john“)?

EN

回答 1

Security用户

发布于 2020-05-15 04:17:01

office2john是为加密文件而设计的,而不是只有一个易于移动的蛇油保护字段的文件.总之,下面是他们使用的算法的快速实现:

代码语言:javascript
复制
#!/usr/bin/env python3

from base64 import b64encode, b64decode
from hashlib import sha512
import struct

def hash_password(password, salt, spincount, hash):
    result = hash(b64decode(salt) + password.encode('utf_16_le')).digest()
    for i in range(spincount):
        result = hash(result + struct.pack('<I', i)).digest()
    return b64encode(result)

print(hash_password('pwd', '876MLoKTq42+/DLp415iZQ==', 100000, sha512))
# 5l3mgNHXpWiFaBPv5Yso1Xd/UifWvQWmlDnl/hsCYbFT2sJCzorjRmBCQ/3qeDu6Q/4+GIE8a1DsdaTwYh1q2g==

我拿了那个测试用例来自LibreOffice

不过,这并不能给出正确的答案:

代码语言:javascript
复制
print(hash_password('john', 'DdJzMvZ9KqpGuTrabHJ1eg==', 100000, sha512))
# L69ms0LAD5mz5M8RdRtcn1UTSXWSfX9YI9hK9mPW1n4eW6I8ilTLi6el6LafMj2RVsxjg2aumqSeIfFk25drVw==
print(hash_password('**john**', 'DdJzMvZ9KqpGuTrabHJ1eg==', 100000, sha512))
# 7YpVVKy6la5CEYWmfbUbF6BFgeopeT/Uh52as+I+NVYqFRqVFvSUWfdCP1J5dUGeWBy3cJHan+i/IZieabrGGw==

hashValue的OOXML规范指出:“使用前面的属性和父XML元素指定的算法对用户提供的密码进行散列后,这个值将与最终的哈希值进行比较”和“9oN7nWkCAyEZib1RomSJTjmPpCY=的hashValue属性值指定必须使用父元素(如果有的话)定义的预处理前处理来对用户提供的密码进行散列处理,然后是SHA-1算法(通过sha-1的algorithmName属性值指定),并且得到的哈希值必须是9oN7nWkCAyEZib1RomSJTjmPpCY=才能禁用保护”。

我怀疑这种差异来自于指定算法的父XML元素,您并没有向我们展示这个算法。如果您想破解密码而不只是删除密码,那么您需要做两件事:

  1. 说明额外的预处理算法(如果有)
  2. 或者向“开膛手约翰”添加功能以支持工作表保护密码(您需要将其与现有的Office加密功能分开),或者根据该算法编写您自己的破解程序。
票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/231691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档