Come decodificare / decodificare il formato .jsonlz4 proprietario di Mozilla Firefox? (Sessionstore-backup / recovery.jsonlz4)


19

Sto cercando di ottenere un controllo sul formato di file proprietario di Mozilla Firefox .jsonlz4, utilizzato, ad esempio, per sessionstore-backups/recovery.jsonlz4, ma senza risultati.

Come posso recuperare i miei dati, in particolare alcuni testi lunghi che ho digitato in alcune aree di una sessione bloccata? Sono i miei dati!


10
Non definirei il formato proprietario . Certo, è personalizzato, non utilizzato da nessuna parte al di fuori dei progetti Mozilla, ma poiché l'intero Firefox, incluso il relativo codice di (de) compressione) è gratuito e open source, questo formato non dovrebbe essere chiamato proprietario. (PS Non sto parlando del marchio, che è concesso in licenza in modo diverso.)
Ruslan

2
@Ruslan, ma in realtà è proprietario - solo perché è OSS non lo rende non proprietario, poiché ci sono zero strumenti standard per esaminare il contenuto di questi file, mentre tutti gli altri file, anche il formato JAR di Java, possono facilmente essere gestito con strumenti non proprietari standard al 100% disponibili in porte / pacchetti di ogni sistema UNIX decente. OTOH, è completamente non banale recuperare effettivamente i tuoi dati da questi .jsonlz4file.
primo

2
JsonLZ4 è stata una cattiva idea.
neverMind9

Risposte:


19

Esistono pochi risultati di Google che effettivamente portano a soluzioni fattibili, ma, come da https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ , i seguenti sembrano funzionare in modo più affidabile:

  • in about:config, devtools.chrome.enabledattiva o disattiva l' impostazione dal valore predefinito di falsea un valore ditrue

  • apri Scratchpad da Firefox:

    • con fn+ Shift+ F4su un MacBook,
    • o Shift+ F4,
    • o tramite la barra dei menu tramite StrumentiSviluppatore WebBlocco note
  • nella barra dei menu di Scratchpad di Firefox, modifica l' ambiente da contenuto a browser (omettere questo passaggio comporterebbe successivamente errori come Exception: ReferenceError: OS is not definednel passaggio successivo)

  • usa il codice come il seguente nello Scratchpad di 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))
    });
    

    Il parametro finale per JSON.stringifymaniglie quanti spazi sarebbero stati utilizzati in ogni riga; mettere 0 fa sì che tutto venga stampato su una sola riga, mettendo 1 divide le linee correttamente (mettere 2 creerebbe troppo spazio bianco inutile e aumenterebbe le dimensioni del file per un piccolo vantaggio)

  • fai clic sul Runpulsante

  • eseguire fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifyall'interno del Terminal app


Questo non sembra funzionare in FF 72 su Linux. Scratchpad è stato rimosso, ma la console ora supporta la modalità multilinea. Tuttavia, la OS.File.read(...riga indica: "ReferenceError: il sistema operativo non è definito".
mivk

@mivk quell'errore è menzionato sopra - accade a causa di un ambiente sbagliato; non c'è modo di imbrogliare l'ambiente?
primo

Non ho trovato questa impostazione "Ambiente" o qualcosa di simile in FF 72.0.1.
mivk

12

Sfortunatamente, a causa di un'intestazione non standard, gli strumenti standard non funzioneranno. C'è una proposta aperta per cambiarlo. Apparentemente l'intestazione di Mozilla è stata ideata prima che esistesse un formato di frame lz4 standard; avvolge un blocco standard lz4.

Detto questo, la stessa segnalazione di bug include alcuni metodi alternativi. Li elencherò brevemente:

  • Usa lo strumento dejsonlz4 , che include build binarie per Windows e dovrebbe essere facile da compilare su * nix
    • lz4json è uno strumento simile, ma si basa su un liblz4 esterno ed è un po 'più facile da costruire su * nix ma più difficile su Windows (fuori da WSL)
  • Usa questo script Python abbastanza semplice: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (richiede il pacchetto lz4 tramite pip o il tuo gestore pacchetti) - lo script sembra essere python3 ma è banalmente adattabile a python2
  • È disponibile una estensione web che dovrebbe essere in grado di aprirli. NB: mentre la fonte è disponibile, non l'ho verificata e le autorizzazioni richieste sono un po 'preoccupanti ( specialmente la risposta alle preoccupazioni )
  • In teoria, dovresti essere in grado di eliminare i primi 8 byte (ad es. Con dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1) e questo dovrebbe lasciarti con un blocco lz4 valido. Si noti che questo è distinto da un frame lz4 . Mentre la maggior parte dei linguaggi di programmazione ha librerie che possono facilmente decodificare un blocco, trovare uno strumento predefinito per farlo è più difficile, ad esempio il liblz4-toolpacchetto accetta solo il formato frame.

1
Perché in primo luogo era necessario LZ4? LZ4 è un'idea assolutamente idiota.
neverMind9

A proposito, ecco lz4json che si compila in modo pulito su UNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD e NetBSD - github.com/cnst/lz4json .
1919

5

Sono stato in grado di estrarre gli URL dal file {profile-dir} /sessionstore-backups/recovery.jsonlz4 utilizzando il seguente strumento online gratuito progettato espressamente per questo scopo:

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

Lo stesso sito offre uno strumento simile per decrittografare i file jsonlz4 dalla directory {profile-dir} / bookmarkbackups .


2
Anche appena trovato questo, funziona perfettamente.
lowtechsun,

1

Su sistemi UNIX® e simili a UNIX , come Mac OS X con MacPorts, FreeBSD, OpenBSD o NetBSD con pkgsrc, il seguente https://github.com/cnst/lz4json fork di lz4json può anche essere usato per compilare in modo pulito dal scatola, ad es. su Mac OS X con 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.