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


19

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

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


10
我不会称其为专有格式。当然,它是自定义的,不在Mozilla项目之外的任何地方使用,但是由于整个Firefox(包括相关的(解)压缩代码)都是免费和开源的,因此不应将此格式称为专有格式。(PS我不是在谈论品牌,这是不同的许可。)
Ruslan

2
@Ruslan,但实际上是专有的-只是因为它的OSS不会使其成为非专有的,因为零标准的工具可以查看这些文件的内容,而所有其他文件(甚至Java的JAR格式)都可以轻松地可以使用每个体面的UNIX系统的端口/软件包中提供的100%标准非专有工具进行管理。OTOH,从这些.jsonlz4文件中真正取回自己的数据是完全不简单的。
cnst

2
JsonLZ4是个坏主意。
neverMind9

Answers:


19

几乎没有Google结果可以真正实现可行的解决方案,但是根据https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/,以下内容似乎最可靠地起作用:

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

  • 从Firefox中打开Scratchpad

    • 在MacBook上使用fn+ Shift+F4
    • Shift+ F4
    • 或通过工具Web开发人员Scratchpad通过菜单栏
  • 在Firefox的Scratchpad的菜单栏中,将“ 环境”从“ 内容”更改为“ 浏览器”(省略此步骤将随后导致出现错误,如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))
    });
    

    最后一个参数用于JSON.stringify处理每行将使用多少个空格;放0会导致整个内容打印在一行上,放1会正确地分割行(放2会产生太多无用的空白,并增加了文件的大小,几乎没有好处)

  • 点击Run按钮

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


在Linux上的FF 72中,这似乎不起作用。Scratchpad已被删除,但控制台现在支持多行模式。但是,该OS.File.read(...行显示:“ ReferenceError:未定义OS”。
mivk

@mivk上面提到的错误是由于错误的环境而发生的;有没有机会去环境?
cnst

我在FF 72.0.1中找不到此“环境”设置或类似内容。
mivk

12

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

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

  • 使用dejsonlz4工具,该工具包括适用于Windows的二进制构建,并且应该易于在* nix上构建
    • lz4json是一个类似的工具,但是依赖于外部liblz4,在* nix上更容易构建,而在Windows上则更难(在WSL之外)
  • 使用这个相当简单的Python脚本:https : //gist.github.com/Tblue/62ff47bef7f894e92ed5(通过pip或您的包管理器需要lz4包)-该脚本似乎是python3,但对python2却微不足道。
  • 有一个可用的网络扩展程序可以打开这些文件。注意:虽然有可用的来源,但我尚未对其进行验证,并且它所请求的权限有点令人关注尤其是对关注的响应
  • 从理论上讲,您应该能够剥离前8个字节(例如,使用dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1),这将使您拥有有效的lz4块。请注意,这与lz4 帧不同。尽管大多数编程语言都具有可以轻松解码块的库,但是要找到一个预构建的工具来进行解码则比较困难,例如,liblz4-tool程序包仅接受帧格式。

1
为什么首先需要LZ4?LZ4是绝对太简单的想法。
neverMind9

顺便说一句,这是可以在UNIX®,Mac OS X,MacOS,FreeBSD,OpenBSD和NetBSD上干净编译的lz4json-github.com/cnst/lz4json
cnst,


1

UNIX®和类似UNIX的系统上,例如具有MacPorts的Mac OS X,FreeBSD,OpenBSD或具有pkgsrc的NetBSD ,lz4json 的以下https://github.com/cnst/lz4json分支也可以用于从框,例如,在带有MacPorts的Mac OS X上:

sudo port install lz4
git clone https://github.com/cnst/lz4json.git
cd lz4json
make
./lz4jsoncat ~/Library/Application\ Support/Firefox/Profiles/CHANGE\
THIS.default/sessionstore-backups/recovery.jsonlz4 \
| python -m json.tool | fgrep :textarea | more
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.