我有许多密码保护微软excel工作表,我需要能够编辑它。我忘记了密码,我知道我可以编辑文件并取出密码检查,但我有相当多的工作表,我将不得不这样做。他们都有相同的密码,所以我想破解密码。我已经得到了sheetProtection元素:
<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“)?
发布于 2020-05-15 04:17:01
office2john是为加密文件而设计的,而不是只有一个易于移动的蛇油保护字段的文件.总之,下面是他们使用的算法的快速实现:
#!/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。
不过,这并不能给出正确的答案:
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元素,您并没有向我们展示这个算法。如果您想破解密码而不只是删除密码,那么您需要做两件事:
https://security.stackexchange.com/questions/231691
复制相似问题