Wie kann ich das proprietäre .jsonlz4-Format von Mozilla Firefox entschlüsseln / entschlüsseln? (sessionstore-backups / recovery.jsonlz4)

1389
cnst

Ich versuche, das proprietäre Dateiformat von Mozilla Firefox in den Griff zu bekommen .jsonlz4, das beispielsweise für verwendet wird sessionstore-backups/recovery.jsonlz4, jedoch ohne Erfolg.

Wie erhalte ich meine Daten zurück, insbesondere langen Text, den ich in einige Textbereiche einer abgestürzten Sitzung eingegeben habe? Es sind meine Daten!

10
Ich würde das Format nicht _proprietary_ nennen. Zugegeben, es ist üblich und wird nirgendwo außerhalb von Mozilla-Projekten verwendet. Da jedoch der gesamte Firefox - einschließlich des entsprechenden (De-) Kompressionscodes - kostenlos und Open Source ist, sollte dieses Format nicht als proprietär bezeichnet werden. (PS: Ich spreche nicht vom Branding, das anders lizenziert ist.) Ruslan vor 5 Jahren 8
@ Ruslan, aber es ist in der Tat proprietär - nur weil es OSS ist, ist es nicht proprietär, da es null Standardwerkzeuge gibt, um den Inhalt dieser Dateien zu untersuchen, wohingegen alle anderen Dateien, selbst das JAR-Format von Java, problemlos funktionieren Sie werden mit 100% -igen, nicht proprietären Standard-Tools verwaltet, die in Ports / Paketen jedes anständigen UNIX-Systems verfügbar sind. OTOH, es ist absolut nicht trivial, Ihre eigenen Daten aus diesen `.jsonlz4'-Dateien zurückzuholen. cnst vor 5 Jahren 0

2 Antworten auf die Frage

10
cnst

Es gibt wenige Google-Ergebnisse, die tatsächlich zu machbaren Lösungen führen, aber gemäß https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ scheint das Folgende am zuverlässigsten zu funktionieren:

  • In about:config, um die devtools.chrome.enabledEinstellung von der Standardeinstellung falseauf einen Wert von umzustellentrue

  • Öffnen Sie das Scratchpad in Firefox:

    • entweder mit fn+ Shift+ F4auf einem MacBook,
    • oder Shift+ F4,
    • oder über die Menüleiste über ExtrasWeb DeveloperScratchpad
  • Ändern Sie in der Menüleiste in Scratchpad von Firefox die Umgebung von Inhalt zu Browser (wenn Sie diesen Schritt nicht angeben, führt dies zu Fehlern wie Exception: ReferenceError: OS is not definedim nächsten Schritt.)

  • Verwenden Sie im Scratchpad von Firefox folgenden Code :

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

    Der letzte Parameter, der JSON.stringifyangibt, wie viele Leerzeichen in jeder Zeile verwendet werden sollen. Wenn Sie 0 setzen, wird das Ganze in einer einzigen Zeile gedruckt, wobei 1 die Zeilen richtig aufteilt. (Setzen von 2 würde zu viel nutzlosen Leerraum erzeugen und vergrößert die Größe der Datei mit wenig Nutzen).

  • Klicken Sie auf die RunSchaltfläche

  • fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifyinnerhalb der Terminal- App ausführen

6
Bob

Leider funktionieren Standard-Tools aufgrund eines nicht standardmäßigen Headers nicht. Es gibt einen offenen Vorschlag, dies zu ändern. Anscheinend wurde der Mozilla-Header entworfen, bevor ein Standard-lz4-Frame-Format existierte. es umschließt einen Standard-LZ4-Block.

Allerdings enthält der gleiche Fehlerbericht einige alternative Methoden. Ich werde sie kurz auflisten:

  • Verwenden Sie das Tool dejsonlz4, das binäre Builds für Windows enthält und auf * nix leicht zu erstellen sein sollte
    • lz4json ist ein ähnliches Tool, setzt jedoch auf eine externe liblz4 und ist etwas einfacher auf * nix zu bauen, aber schwieriger auf Windows (außerhalb von WSL)
  • Verwenden Sie dieses relativ einfache Python-Skript: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (erfordert das lz4-Paket über pip oder Ihren Paketmanager) - das Skript scheint Python3 zu sein, ist aber für Python2 trivial anpassbar
  • Es gibt eine Weberweiterung, mit der diese geöffnet werden können. NB: Obwohl die Quelle verfügbar ist, habe ich sie nicht verifiziert und die angeforderten Berechtigungen betreffen ( insbesondere die Antwort auf Bedenken ).
  • Theoretisch sollten Sie in der Lage sein, die ersten 8 Bytes zu dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1entfernen (z. B. mit ), und das sollte Ihnen einen gültigen LZ4-Block hinterlassen. Beachten Sie, dass sich dies von einem lz4- Frame unterscheidet . Während die meisten Programmiersprachen über Bibliotheken verfügen, die einen Block leicht decodieren können, ist es schwieriger, ein vorgefertigtes Werkzeug zu finden, z. B. liblz4-toolakzeptiert das Paket nur das Rahmenformat.