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

10

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

Como faço para recuperar meus dados, especificamente, algum texto longo que eu digitei em algumas textareas de uma sessão com falha? São meus dados!

    
por cnst 04.10.2018 / 02:35

2 respostas

10

Existem poucos resultados do Google que resultam em soluções factíveis, mas, de acordo com o link , o seguinte parece funcionar de forma mais fiável:

  • em about:config , ative a configuração devtools.chrome.enabled do padrão de false para um valor de true

  • abra o Scratchpad no Firefox:

    • ou com fn + Deslocamento + F4 em um MacBook,
    • ou Shift + F4 ,
    • ou através da barra de menus através de Ferramentas Desenvolvedor da Web Scratchpad
  • na barra de menus do Bloco de anotações do Firefox, altere Ambiente de Conteúdo para Navegador (omitir esta etapa resultaria em erros como Exception: ReferenceError: OS is not defined no próximo passo)

  • use código como o seguinte no Bloco de anotações 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.stringify manipula quantos espaços seriam usados em cada linha; colocar 0 faz com que a coisa toda seja impressa em uma única linha, colocando 1 para dividir as linhas corretamente (colocar 2 criaria espaços em branco muito inúteis e aumentaria o tamanho do arquivo para pouco benefício)

  • clique no botão Run

  • execute fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringify no aplicativo Terminal

por 04.10.2018 / 02:35
6

Infelizmente, devido a um cabeçalho fora do padrão, as ferramentas padrão não funcionam. Existe uma proposta aberta para mudar isso. Aparentemente, o cabeçalho do Mozilla foi criado antes de existir um formato padrão de quadro lz4; ele envolve um bloco lz4 padrão.

Dito isto, o mesmo relatório de erros 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 em * nix
    • lz4json é uma ferramenta similar, mas depende de uma liblz4 externa e é um pouco mais fácil de construir em * nix, mas mais difícil no Windows (fora da WSL )
  • Use este script Python bastante simples: link (requer o pacote lz4 via pip ou o gerenciador de pacotes) - o script parece ser python3, mas é adaptável a python2
  • Existe um webextension disponível para poder abri-los. Nota: embora a fonte esteja disponível, eu não a verifiquei e as permissões solicitadas são um pouco preocupantes (< a href="https://addons.mozilla.org/pt-BR/firefox/addon/mozlz4-edit/reviews/1081483/"> especialmente a resposta às preocupações )
  • Em teoria, você deve ser capaz de remover os primeiros 8 bytes (por exemplo, com dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1 ) e isso deve deixar você com um bloco lz4 válido. Note que isto é distinto de um lz4 frame . Enquanto a maioria das linguagens de programação tem bibliotecas que podem facilmente decodificar um bloco, é mais difícil encontrar uma ferramenta pré-configurada para isso. o pacote liblz4-tool aceita apenas o formato de quadro.
por 04.10.2018 / 03:16