解密受密码保护的 LibreOffice Calc .ods 文件(忘记密码)

Kyl*_*yle 5 encryption password libreoffice

前段时间我.ods用 Libreoffice Calc创建了一个文件,我用密码保护了它。我现在忘记了密码,因此无法访问该文件。有没有办法绕过或恢复密码,例如作为 root 使用终端?

Lek*_*eyn 9

以 root 用户身份打开 .ods 文件仍然不允许您检索文件内容,因为这些内容已被加密,这超出了 root 用户的权限。

MiJyn 建议对 OpenOffice.org 使用密码破解程序。这些程序通常使用蛮力或基于字典的攻击。我不会像建议的那样使用来自随机的、不受信任的来源的闭源程序。病毒扫描程序无法找到所有内容,因此您仍然无法信任可执行文件,因为 ClamAV 没有检测到任何内容。

由于 LibreOffice 是开源的,我首先要查找它使用的加密类型。Ubuntu 12.04 附带 LibreOffice 3.5。根据http://wiki.documentfoundation.org/ReleaseNotes/3.5#Different_Encryption_Algorithm,它使用 256 位 AES 密码。

此邮件列表帖子还明确指出,密码是使用PBKDF2派生的,这意味着在足够高的迭代次数下,暴力破解会慢得多。

由于 .ods 文件只是 Zip 文件,我尝试加密文件并提取内容。正如预期的那样,文档的内容是加密的,与随机字节无法区分。当然,存在一些未加密的元数据,其中之一是 META-INF/manifest.xml. 我的示例加密电子表格包含以下感兴趣的部分:

<manifest:encryption-data manifest:checksum-type="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0#sha256-1k" manifest:checksum="48KzqP1PL7Wu/YTtHzlN0buJeUmigGT247dZ6Wrj10s=">
<manifest:algorithm manifest:algorithm-name="http://www.w3.org/2001/04/xmlenc#aes256-cbc" manifest:initialisation-vector="82mrg52Yifh1iIye5W0xuw=="/>
<manifest:key-derivation manifest:key-derivation-name="PBKDF2" manifest:key-size="32" manifest:iteration-count="1024" manifest:salt="hUZrwD1BWkODYVklZiScqA=="/>
<manifest:start-key-generation manifest:start-key-generation-name="http://www.w3.org/2000/09/xmldsig#sha256" manifest:key-size="32"/>
Run Code Online (Sandbox Code Playgroud)

从我们可以学习的LibreOffice使用SHA256散列算法,用于检查数据的完整性,AES256CBC模式。32 字节密码是使用 PBKDF2 和 1024 次迭代从您的密码派生而来的。

此处提供有关解密 ODF 文件的论文,其中包含制作您自己的蛮力器的不错信息,但可能不适合普通用户。

与大多数加密产品一样,密码恢复几乎是不可能的。我建议:

  • 如果文件只包含一周的簿记,请重新开始,不要浪费时间解密文件。
  • 如果您想解密文件,请尝试回忆密码。
  • 如果您打算使用蛮力程序,请不要使用在 Internet 上找到的随机程序。尝试找到一个开源程序。如果您只找到闭源程序,请从可靠来源下载并确保它有好评(来自多个来源),通过https://www.virustotal.com将其放入并再次检查您正在尝试的程序是否为合法的。


MiJ*_*Jyn 5

答案基于我在评论中与 OP 的对话

没有办法绕过密码,因为如果可能的话,它会完全破坏拥有受密码保护的文档的目的(唯一不想使用密码绕过的人是拥有密码的人) . 唯一的选择是实际使用密码破解程序。仅当您是文档的所有者,或者向您发送文档的人授予您破解密码的权限时,此方法才是合法的。但是,当然,如今没有人关心是否站在法律的正确一边:P

因此,如果您仍然对此感兴趣,那么此技术的另一个缺点是(是的!):它需要很长时间,因为它必须找到每个可能的密码组合。这里只是一些非常基本的数学,如果尝试密码需要 1 毫秒,并且密码是 ASCII 编码的,长度为 5 个字符,那么找到它需要 56 周。如果您有一台速度非常快的计算机(甚至可能是超级计算机),则每个密码大约需要 5-10 微秒,因此计算它需要 1.5-3 天。如果您使用图形卡而不是 CPU,它将能够更快地计算密码,因为 GPU 通常具有大约 300-2000 个内核。

另一个特定于 OpenOffice 密码的问题是 OpenOffice 具有非常好的加密方法,这使得找到密码的时间更长也更难。这意味着只有蛮力攻击(最慢的攻击)才能奏效!

既然您对密码破解有了一个简短的介绍,我可以通过一些快速的谷歌搜索将我带到这个站点:http : //www.filebuzz.com/fileinfo/37067/OpenOffice_Writer_Password_Recovery.html。还没有尝试过,但如果你安装了 WINE,它应该可以工作。我用 ClamAV 做了一个小的病毒检查,看起来没问题。

编辑:似乎只支持 Writer 密码。这是相同的程序,显然是为 Calc 密码设计的。请注意,我也没有尝试过那个,但是我也用 ClamAV 检测了那个病毒:http : //www.sharewareconnection.com/download-openoffice-calc-password-recovery-from-sharecon.html

编辑 2:Lekensteyn 发布了一种比使用不受信任的 .exe 文件更好的方法。我强烈建议改用他的方式!

编辑 3:基于 Lekensteyn 发布的方法,我编写了一个实现它的小工具,位于:https : //github.com/MiJyn/ooo-pass-recover/downloads。当然,它是开源的(只需点击下载链接中的“代码”)。它只是 Ringlord(制作 Lekensteyn 发布的文档的同一个人)的 ODFJlib 接口。请注意,此工具是用 Java 编写的,速度相当慢(在我的计算机上为 243 个键/秒)。不过,我会尝试针对多核对其进行优化。

用法示例:

java -jar ./ooopassrecover.jar file.ods
Run Code Online (Sandbox Code Playgroud)