如何解码/解密 Mozilla Firefox 专有的 .jsonlz4 格式?(sessionstore-backups/recovery.jsonlz4)

cns*_*nst 31 firefox backup json session-restore

我正在尝试处理 Mozilla Firefox 的专有文件格式.jsonlz4,例如用于sessionstore-backups/recovery.jsonlz4,但无济于事。

我如何取回我的数据,特别是我在崩溃会话的某些文本区域中输入的一些长文本?这是我的数据!

cns*_*nst 23

谷歌的结果很少能真正产生可行的解决方案,但是,根据https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/,以下似乎最可靠:

  • in about:config,将devtools.chrome.enabled设置从默认false值切换为值true

  • 从 Firefox 中打开Scratchpad

    • 要么fn+ Shift+F4在MacBook上,
    • Shift+ F4,
    • 或通过菜单栏工具Web DeveloperScratchpad
  • 在Firefox Scratchpad的菜单栏中,将EnvironmentContent更改为Browser(省略此步骤将导致Exception: ReferenceError: OS is not defined与下一步类似的错误)

  • 在Firefox的Scratchpad中使用如下代码:

    var file = "/Users/…/sessionstore-backups/recovery.baklz4";
    //OS.File.read(file, { compression: "lz4" }).then(bytes => 
    //  OS.File.writeAtomic(file + ".uncompressed", bytes));
    
    OS.File.read(file, { compression: "lz4" }).then(bytes => {
      OS.File.writeAtomic(file + ".uncompressed.stringify",
        JSON.stringify(JSON.parse(new TextDecoder().decode(bytes)),null,1))
    });
    
    Run Code Online (Sandbox Code Playgroud)

    JSON.stringify处理每行将使用多少空格的最后一个参数;放置 0 会导致整个内容打印在一行上,放置 1 会正确拆分行(放置 2 会创建太多无用的空白并增加文件的大小而没有什么好处)

  • 点击Run按钮

  • fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringify终端应用程序中运行

  • 您好,这仍然有效,但您需要使用 Web 开发人员浏览器控制台而不是 Scratchpad:菜单 --> Web 开发人员 --> 浏览器控制台 然后按“Ctrl + B”或单击图标以启用多行编辑器然后上面的脚本仍然有效。在 Ubuntu 21.04 上使用 Firefox 87 进行验证。另请参阅 https://developer.mozilla.org/en-US/docs/Tools/Deprecated_tools (3认同)
  • 这似乎在 Linux 上的 FF 72 中不起作用。暂存器已被删除,但控制台现在支持多行模式。但是,`OS.File.read(...` 行给出:“ReferenceError:操作系统未定义”。 (2认同)
  • 我在 FF 72.0.1 中没有找到这个“环境”设置或任何类似的东西。 (2认同)

Bob*_*Bob 17

不幸的是,由于非标准标题,标准工具将无法工作。有一个公开的提议来改变这一点。显然,Mozilla 标头是在标准 lz4 帧格式存在之前设计的;它确实包装了一个标准的 lz4 块。

也就是说,同一个错误报告包括一些替代方法。我将简要列出它们:

  • 使用dejsonlz4工具,它包括Windows 的二进制构建,应该很容易在 *nix 上构建
    • lz4json是一个类似的工具,但依赖于外部 liblz4 并且在 *nix 上更容易构建,但在 Windows 上更难(WSL 之外)
  • 使用这个相当简单的 Python 脚本:https : //gist.github.com/Tblue/62ff47bef7f894e92ed5(需要通过 pip 或您的包管理器的 lz4 包)——该脚本似乎是 python3,但对 python2 的适应性很小
  • 有一个可用的webextension应该能够打开这些。注意:虽然可用,但我没有验证它,它请求的权限有点令人担忧尤其是对问题的回应
  • 从理论上讲,您应该能够dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1去除前 8 个字节(例如使用),这应该为您留下一个有效的 lz4 块。请注意,这与 lz4框架不同。虽然大多数编程语言都有可以轻松解码块的库,但要找到一个预先构建的工具来做到这一点更加困难,例如liblz4-tool包只接受帧格式。

  • 为什么首先需要 LZ4?LZ4 是一个绝对愚蠢的想法。 (3认同)

小智 13

我发现以下方法在 Ubuntu 20.04 上测试有效:

方法 1:使用 GitHub 上的 mozlz4 二进制文件:

从https://github.com/jusw85/mozlz4下载 mozlz4 的 linux 二进制文件。然后运行以下命令:

chmod u+x mozlz4-linux

./mozlz4-linux -x filename.jsonlz4
Run Code Online (Sandbox Code Playgroud)

方法 2:使用 Ubuntu 存储库中的 lz4json 包:

Ubuntu 20.04 存储库有一个名为 lz4json 的包。我还没有检查过它是否存在于以前的 Ubuntu 版本中。

要安装和使用它,请运行

sudo apt install lz4 lz4json

lz4jsoncat ~/.mozilla/firefox/*default*/sessionstore-backups/recovery.jsonlz4
Run Code Online (Sandbox Code Playgroud)

上面的输出将显示一个缩小的 json。为了使其可读,您可以使用“jq”json 解析器:

sudo apt install jq

# then pipe the output of the previous command through jq to make it readable:
lz4jsoncat ~/.mozilla/firefox/*default*/sessionstore-backups/recovery.jsonlz4 | jq
Run Code Online (Sandbox Code Playgroud)

如果您只想查看 URL 列表和页面标题,可以使用以下命令:

lz4jsoncat ~/.mozilla/firefox/*default*/sessionstore-backups/recovery.jsonlz4 \
  | jq '.["windows"] | .[0] | .["tabs"] | .[] | .["entries"] | .[0] | .url,.title' \
  | grep -v 'New Tab' | grep -v 'about:newtab' | sed 's/"http/\n"http/g'
Run Code Online (Sandbox Code Playgroud)


小智 8

在 Firefox 版本 106 上,接受的答案不再适用于我。

\n

Scratchpad 被浏览器控制台取代,OS.File 被 IOUtils 取代:https://firefox-source-docs.mozilla.org/dom/ioutils_migration.html

\n

以下是更新的步骤:

\n
    \n
  • 在 about:config 中,将 devtools.chrome.enabled 设置从默认值 false 切换为 true 值

    \n
  • \n
  • 在 Firefox 中打开浏览器控制台:

    \n
      \n
    • 在 Windows 上:Ctrl++ShiftJ
    • \n
    • 或者通过工具栏通过Tools \xe2\x86\x92 Browser Tools \xe2\x86\x92 Browser Console
    • \n
    \n
  • \n
  • 在控制台中您可以按Ctrl+B进入多行模式

    \n
  • \n
  • 在控制台中使用这样的代码:

    \n
  • \n
\n
let file = \'/Users/\xe2\x80\xa6/sessionstore-backups/recovery.jsonlz4\';\nlet data = await IOUtils.readJSON(file, { decompress: true });\nIOUtils.writeJSON(file + \'.uncompressed\', data);\n// alternately for pretty printing\nIOUtils.writeUTF8(file + \'.uncompressed.pretty\', JSON.stringify(data, null, 1));\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • 单击运行按钮

    \n
  • \n
  • 从终端应用程序fgrep :textarea /Users/\xe2\x80\xa6/sessionstore-backups/recovery.baklz4.uncompressed.stringify中运行

    \n
  • \n
\n


小智 5

我能够使用以下专门为此目的设计的免费在线工具从{profile-dir}/sessionstore-backups/recovery.jsonlz4文件中提取 URL :

https://www.jeffersonscher.com/ffu/scrounger.html

同一个站点提供了一个类似的工具来解密{profile-dir}/bookmarkbackups目录中的jsonlz4文件。

  • 也刚刚发现这个,工作完美。 (2认同)