Como decodificar / decifrar o formato .jsonlz4 proprietário do Mozilla Firefox? (sessionstore-backups / recovery.jsonlz4)


19

Estou tentando entender o formato de arquivo proprietário do Mozilla Firefox .jsonlz4, usado, por exemplo sessionstore-backups/recovery.jsonlz4, mas sem sucesso.

Como recupero meus dados, especificamente, algum texto longo digitado em algumas áreas de texto de uma sessão travada? São meus dados!


10
Eu não chamaria o formato de proprietário . Concedido, é personalizado, não usado em nenhum lugar fora dos projetos Mozilla, mas como todo o Firefox - incluindo o código de (des) compactação relevante - é gratuito e de código aberto, esse formato não deve ser chamado de proprietário. (PS Eu não estou falando da marca, que é licenciado de forma diferente.)
Ruslan

2
@Ruslan, mas na verdade é proprietário - apenas porque o OSS não o torna não proprietário, pois existem zero ferramentas padrão para analisar o conteúdo desses arquivos, enquanto todos os outros arquivos, mesmo o formato JAR do Java, podem facilmente ser gerenciado com ferramentas não proprietárias 100% padrão disponíveis em portas / pacotes de todos os sistemas UNIX decentes. OTOH, é completamente não trivial recuperar seus próprios dados desses .jsonlz4arquivos.
CNST

2
JsonLZ4 foi uma má ideia.
neverMind9

Respostas:


19

Existem poucos resultados do Google que realmente resultam em soluções viáveis, mas, conforme https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ , o seguinte parece funcionar da maneira mais confiável:

  • in about:config, alterne a devtools.chrome.enabledconfiguração do padrão de falsepara um valor detrue

  • abra o Scratchpad no Firefox:

    • com fn+ Shift+ F4em um MacBook,
    • ou Shift+ F4,
    • ou através da barra de menus, em FerramentasDesenvolvedor WebScratchpad
  • na barra de menus do Scratchpad do Firefox, altere o Ambiente de Conteúdo para o Navegador (a omissão desta etapa resultaria posteriormente em erros como Exception: ReferenceError: OS is not definedna próxima etapa)

  • use um código como o seguinte no Scratchpad do Firefox:

    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))
    });
    

    O parâmetro final para JSON.stringifymanipular quantos espaços seriam usados ​​em cada linha; colocar 0 faz com que tudo seja impresso em uma única linha, colocar 1 divide as linhas corretamente (colocar 2 criaria muito espaço em branco inútil e aumentaria o tamanho do arquivo para pouco benefício)

  • clique no Runbotão

  • executar fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifyde dentro do aplicativo Terminal


Isso não parece funcionar no FF 72 no Linux. O Scratchpad foi removido, mas o console agora suporta o modo multilinhas. No entanto, a OS.File.read(...linha fornece: "ReferenceError: OS não está definido".
mivk 17/01

@mivk esse erro é mencionado acima - acontece devido ao ambiente errado; não há como arriscar o meio ambiente?
cnst 17/01

Não encontrei essa configuração de "Ambiente" ou algo semelhante no FF 72.0.1.
mivk 17/01

12

Infelizmente, devido a um cabeçalho não padrão, as ferramentas padrão não funcionam. Há uma proposta aberta para mudar isso. Aparentemente, o cabeçalho Mozilla foi criado antes da existência de um formato de quadro lz4 padrão; envolve um bloco lz4 padrão.

Dito isto, o mesmo relatório de bug inclui alguns métodos alternativos. Vou listá-los brevemente:

  • Use a ferramenta dejsonlz4 , que inclui compilações binárias para Windows e deve ser fácil de construir no * nix
    • O lz4json é uma ferramenta semelhante, mas conta com um liblz4 externo e é um pouco mais fácil de construir no * nix, mas mais difícil no Windows (fora da WSL)
  • Use este script Python bastante simples: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (requer o pacote lz4 via pip ou seu gerenciador de pacotes) - o script parece ser python3, mas é trivialmente adaptável ao python2
  • Existe uma extensão da web disponível que deve ser capaz de abri-las. Nota: enquanto a fonte está disponível, eu não a verifiquei e as permissões solicitadas são um pouco preocupantes ( principalmente a resposta a preocupações )
  • Em teoria, você deve poder remover os primeiros 8 bytes (por exemplo, com dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1) e isso deve deixar um bloco lz4 válido. Observe que isso é diferente de um quadro lz4 . Enquanto a maioria das linguagens de programação possui bibliotecas que podem decodificar facilmente um bloco, é mais difícil encontrar uma ferramenta pré-criada para fazê-lo, por exemplo, o liblz4-toolpacote aceita apenas o formato de quadro.

1
Por que o LZ4 foi necessário em primeiro lugar? LZ4 é uma ideia absolutamente idiota.
neverMind9

Aliás, aqui está o lz4json que é compilado de maneira limpa no UNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD e NetBSD - github.com/cnst/lz4json .
CNST

5

Consegui extrair os URLs do arquivo {profile-dir} /sessionstore-backups/recovery.jsonlz4 usando a seguinte ferramenta online gratuita projetada expressamente para esse fim:

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

O mesmo site oferece uma ferramenta semelhante para descriptografar arquivos jsonlz4 do diretório {profile-dir} / bookmarkbackups .


2
Também acabei de encontrar isso, funciona perfeitamente.
lowtechsun

1

Nos sistemas UNIX® e UNIX , como o Mac OS X com MacPorts, FreeBSD, OpenBSD ou NetBSD com pkgsrc, o seguinte https://github.com/cnst/lz4json fork do lz4json também pode ser usado para compilar corretamente o caixa, por exemplo, no Mac OS X com MacPorts:

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.