パスワードで保護されたMicrosoft Excelワークシートがたくさんあり、それを編集できるようにする必要があります。パスワードを忘れてしまいました。ファイルを編集してパスワードチェックを行うことができることはわかっていますが、これを行うために必要なワークシートがかなりあります。それらはすべて同じパスワードを持っているので、パスワードを解読したいと思います。私はすでにsheetProtection要素を取得しています:
<sheetProtection algorithmName="SHA-512" hashValue="exBYsHJhLjU2iumFwDs7uFdq6WBWwAyJj3DqKQg85bmTocK4dNrqCpPePQC23Rikd5QSY5WyREknFGhRxKcB2w==" saltValue="DdJzMvZ9KqpGuTrabHJ1eg==" spinCount="100000" sheet="1" objects="1" scenarios="1"/>
リッパージョンを使用してこのパスワードを解読しようとしましたが、no password hash loaded
エラー、そしてoffice2john(Microsoft OfficeファイルのハッシュをJohnが使用できるものに変換するツール https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/run/office2john)を使用すると.py )ですが、同じエラーが発生します。
このパスワードを破るにはどうすればよいですか(この例では、ここに投稿されたパスワードは「john」です)?
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要素にあるのではないかと思います。パスワードを削除するだけでなく、解読したい場合は、次の2つのことを行う必要があります。