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

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

不久前,我.ods用 Libreoffice Calc 创建了一个文件,并设置了密码保护。现在我忘记了密码,因此无法访问该文件。有没有办法绕过或恢复密码,例如使用终端以 root 身份?

答案1

以 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"/>

由此我们可以了解到 LibreOffice 使用 SHA256 哈希算法来检查数据完整性,AES256CBC 模式。32 字节密码是使用 PBKDF2 通过 1024 次迭代从您的密码中派生出来的。

有一篇关于解密 ODF 文件的论文这里,这些包含了制作您自己的暴力破解器的好信息,但可能不适合普通用户。

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

  • 如果文件仅包含一周的簿记,则只需重新开始,不要浪费时间解密文件。
  • 如果您想解密文件,请尝试回忆起密码。
  • 如果你要使用暴力破解程序,不要使用在互联网上找到的随机程序。尝试找到一个开源程序。如果你只找到闭源程序,请从可靠的来源下载它,并确保它有良好的评价(来自多个来源),然后让它通过https://www.virustotal.com并再次检查您尝试的程序是否合法。

答案2

答案基于我在评论中与原帖者的对话

没有办法绕过密码,因为如果可以的话,这将完全违背拥有受密码保护的文档的目的(唯一不想使用密码绕过器的人是拥有密码的人)。唯一的选择是实际使用密码破解器。这种方法是合法的如果, 和除非您是文档的所有者,或者向您发送文档的人允许您破解密码。但是,当然,现在没人关心是否遵守法律 :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 的 ODFJlib 接口(与 Lekensteyn 发布的文档的制作者相同)。请注意,此工具是用 Java 编写的,速度相当慢(在我的计算机上每秒 243 个键)。不过,我会尝试针对多核对其进行优化。

使用示例:

java -jar ./ooopassrecover.jar file.ods

答案3

我发现了一种解锁工作表的非常简单的方法(打开办公室 1.0),但在其他版本上应该类似。

  • 将扩展名 .ods 更改为 .zip
  • 将文件解压到文件夹中。
  • 找到它包含的 document.xml 或 content.xml 文件。
  • 编辑此 xml 文件以找到类似这样的内容:

    table:name="*****" table:style-name="ta1" table:protected="true" table:protection-key="wUuUTMMJGNiaa2+yng4cFP6WeFg="

删除两个元素:

 table:protected="true" table:protection-key="wUuUTMMJGNiaa2+yng4cFP6WeFg="

将修改后的文件复制document.xml到原始 zip 文件中并返回.ods该文件的扩展名已完成:您的工作表不再受保护!

答案4

我找到了一种更简单的方法来解锁电子表格,修改@user380090 给出的建议:

  • 将扩展名 .ods 更改为 .zip
  • 使用存档管理器将 .zip 文件解压到文件夹中
  • 打开:内容.xml使用 Writer 归档
  • 寻找:表:protected="true"
  • 改变 ”真的“ 到 ”错误的
  • 保存内容.xml文件并关闭Writer
  • 从“文件”中,拖放之前修改的内容.xml文件放入 .zip 文件中
  • 将扩展名从 .zip 更改为 .ods

该文档现在不受保护,您可以对其进行编辑。

相关内容