Comment décoder / déchiffrer le format .jsonlz4 propriétaire de Mozilla Firefox? (sessionstore-backups / recovery.jsonlz4)

19

J'essaie de comprendre le format de fichier propriétaire de Mozilla Firefox .jsonlz4, utilisé, par exemple, pour sessionstore-backups/recovery.jsonlz4, mais en vain.

Comment puis-je récupérer mes données, en particulier un long texte que j'ai tapé dans certaines zones de texte d'une session en panne? Ce sont mes données!

cnst
la source
10
Je n'appellerais pas le format propriétaire . Certes, il est personnalisé, n'est utilisé nulle part en dehors des projets Mozilla, mais comme l'ensemble de Firefox, y compris le code de (dé) compression pertinent, est gratuit et open source, ce format ne devrait pas être qualifié de propriétaire. (PS, je ne parle pas de la marque, qui est concédée sous licence différemment.)
Ruslan
2
@Ruslan, mais il est en fait propriétaire - simplement parce que c'est OSS ne le rend pas non propriétaire, car il n'y a aucun outil standard pour examiner le contenu de ces fichiers, tandis que tous les autres fichiers, même le format JAR de Java, peuvent facilement être géré avec des outils non propriétaires 100% standard disponibles dans les ports / packages de chaque système UNIX décent. OTOH, il est tout à fait non trivial de récupérer réellement vos propres données à partir de ces .jsonlz4fichiers.
cnst
2
JsonLZ4 était une mauvaise idée.
neverMind9

Réponses:

19

Il y a peu de résultats Google qui aboutissent à des solutions réalisables, mais, selon https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ , les éléments suivants semblent fonctionner de la manière la plus fiable:

  • dans about:config, basculez le devtools.chrome.enabledparamètre de la valeur par défaut de falseà une valeur detrue

  • ouvrez Scratchpad depuis Firefox:

    • soit avec fn+ Shift+ F4sur un MacBook,
    • ou Shift+ F4,
    • ou via la barre de menus via OutilsDéveloppeur WebBloc-notes
  • dans la barre de menus de Scratchpad de Firefox, changez l' environnement du contenu en navigateur (l'omission de cette étape entraînerait par la suite des erreurs comme Exception: ReferenceError: OS is not definedà l'étape suivante)

  • utilisez du code comme celui-ci dans le Scratchpad de 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))
    });
    

    Le dernier paramètre pour JSON.stringifygérer le nombre d'espaces utilisés à chaque ligne; mettre 0 fait imprimer le tout sur une seule ligne, mettre 1 divise les lignes correctement (mettre 2 créerait trop d'espace blanc inutile et augmenterait la taille du fichier pour peu d'avantages)

  • cliquez sur le Runbouton

  • exécuter à fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifypartir de l' application Terminal

cnst
la source
Cela ne semble pas fonctionner dans FF 72 sous Linux. Scratchpad a été supprimé, mais la console prend désormais en charge le mode multiligne. Cependant, la OS.File.read(...ligne donne: "ReferenceError: OS n'est pas défini".
mivk
@mivk que l'erreur est mentionnée ci-dessus - se produit en raison d'un mauvais environnement; n'y a-t-il aucun moyen de hasarder l'environnement?
FCÉN
Je n'ai pas trouvé ce paramètre "Environnement" ou quelque chose de similaire dans FF 72.0.1.
mivk
12

Malheureusement, en raison d'un en-tête non standard, les outils standard ne fonctionneront pas. Il y a une proposition ouverte pour changer cela. Apparemment, l'en-tête Mozilla a été conçu avant l'existence d'un format de trame lz4 standard; il encapsule un bloc lz4 standard.

Cela dit, le même rapport de bogue inclut quelques méthodes alternatives. Je vais les énumérer brièvement:

  • Utilisez l' outil dejsonlz4 , qui inclut des versions binaires pour Windows et devrait être facile à construire sur * nix
    • lz4json est un outil similaire, mais repose sur un liblz4 externe et est un peu plus facile à construire sur * nix mais plus difficile sur Windows (en dehors de WSL)
  • Utilisez ce script Python assez simple: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (nécessite le package lz4 via pip ou votre gestionnaire de packages) - le script semble être python3 mais est trivialement adaptable à python2
  • Il existe une extension Web qui devrait pouvoir les ouvrir. NB: bien que la source soit disponible, je ne l'ai pas vérifiée, et les permissions demandées sont un peu inquiétantes ( surtout la réponse aux soucis )
  • En théorie, vous devriez pouvoir supprimer les 8 premiers octets (par exemple avec dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1) et cela devrait vous laisser un bloc lz4 valide. Notez que ceci est distinct d'une trame lz4 . Alors que la plupart des langages de programmation ont des bibliothèques qui peuvent facilement décoder un bloc, il est plus difficile de trouver un outil prédéfini pour le faire, par exemple le liblz4-toolpackage accepte uniquement le format de trame.
Bob
la source
1
Pourquoi LZ4 était-il nécessaire en premier lieu? LZ4 est une idée absolument idiote.
neverMind9
BTW, voici le lz4json qui se compile proprement sous UNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD et NetBSD - github.com/cnst/lz4json .
FCÉN
5

J'ai pu extraire les URL du fichier {dir_profil} /sessionstore-backups/recovery.jsonlz4 à l'aide de l'outil en ligne gratuit spécialement conçu à cet effet:

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

Le même site propose un outil similaire pour décrypter les fichiers jsonlz4 du répertoire {profile-dir} / bookmarkbackups .

MikeOnline
la source
2
Aussi vient de trouver cela, fonctionne parfaitement.
lowtechsun
1

Sur les systèmes UNIX® et UNIX , comme Mac OS X avec MacPorts, FreeBSD, OpenBSD ou NetBSD avec pkgsrc, le https://github.com/cnst/lz4json suivant fork de lz4json pourrait également être utilisé pour compiler proprement à partir du par exemple, sur Mac OS X avec 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
cnst
la source