Jak odkodować / odszyfrować zastrzeżony format .jsonlz4 Mozilla Firefox? (sessionstore-backups / recovery.jsonlz4)

19

Próbuję opanować zastrzeżony format pliku Mozilla Firefox .jsonlz4, używany na przykład do sessionstore-backups/recovery.jsonlz4, ale bezskutecznie.

Jak mogę odzyskać moje dane, a konkretnie jakiś długi tekst, który wpisałem w obszarach tekstowych zawieszonej sesji? To moje dane!

cnst
źródło
10
Nie nazwałbym tego formatem prawnie zastrzeżonym . To prawda, że ​​jest niestandardowy, nie jest używany nigdzie poza projektami Mozilli, ale ponieważ cały Firefox - w tym odpowiedni (de) kod kompresji - jest darmowy i open source, ten format nie powinien być nazywany zastrzeżonym. (PS Nie mówię o brandingu, który ma inną licencję).
Ruslan
2
@ Ruslan, ale w rzeczywistości jest zastrzeżony - tylko dlatego, że OSS nie czyni go niezastrzeżonym, ponieważ nie ma żadnych standardowych narzędzi do przeglądania zawartości tych plików, podczas gdy wszystkie inne pliki, nawet format JAR Java, mogą z łatwością zarządzać za pomocą w 100% standardowych niezastrzeżonych narzędzi, które są dostępne w portach / pakietach każdego przyzwoitego systemu UNIX. OTOH, odzyskanie własnych danych z tych .jsonlz4plików jest całkowicie nietrywialne .
cnst
2
JsonLZ4 był złym pomysłem.
neverMind9,

Odpowiedzi:

19

Istnieje kilka wyników Google, które faktycznie dają możliwe do rozwiązania rozwiązania, ale zgodnie z https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ , następujące działania wydają się działać niezawodnie:

  • w about:config, przełącz devtools.chrome.enabledustawienie z domyślnego falsena wartośćtrue

  • otwórz Brudnopis z przeglądarki Firefox:

    • albo z fn+ Shift+ F4na MacBooku,
    • lub Shift+ F4,
    • lub poprzez pasek menu za pomocą NarzędziaWeb DeveloperBrudnopis
  • na pasku menu w aplikacji Scratchpad Firefoksa zmień środowisko z zawartości na przeglądarkę (pominięcie tego kroku spowoduje później błędy, jak Exception: ReferenceError: OS is not definedw następnym kroku)

  • użyj kodu w Scratchpad 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))
    });
    

    Ostatni parametr do JSON.stringifyobsługi liczby spacji używanych w każdej linii; wstawienie 0 powoduje, że całość zostanie wydrukowana w jednym wierszu, a wstawienie 1 odpowiednio podzieli linie (wstawienie 2 stworzy zbyt wiele bezużytecznych białych znaków i zwiększy rozmiar pliku bez większych korzyści)

  • kliknij Runprzycisk

  • uruchomić fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifyz poziomu aplikacji Terminal

cnst
źródło
Wydaje się, że to nie działa w FF 72 w systemie Linux. Brudnopis został usunięty, ale konsola obsługuje teraz tryb wieloliniowy. Jednak OS.File.read(...wiersz podaje: „ReferenceError: OS nie jest zdefiniowany”.
mivk
@mivk ten błąd jest wspomniany powyżej - dzieje się to z powodu złego środowiska; czy nie ma szans na przypadkowe środowisko?
cnst
Nie znalazłem tego ustawienia „Środowisko” ani niczego podobnego w FF 72.0.1.
mivk
12

Niestety ze względu na niestandardowy nagłówek standardowe narzędzia nie będą działać. Istnieje otwarta propozycja zmiany tego. Najwyraźniej nagłówek Mozilli został opracowany przed istnieniem standardowego formatu ramki LZ4; otacza standardowy blok LZ4.

To powiedziawszy, ten sam raport o błędach zawiera kilka alternatywnych metod. Wymienię je krótko:

  • Użyj narzędzia dejsonlz4 , które zawiera kompilacje binarne dla systemu Windows i powinno być łatwe do zbudowania na * nix
    • lz4json jest podobnym narzędziem, ale opiera się na zewnętrznym liblz4 i jest nieco łatwiejszy do zbudowania na * nix, ale trudniejszy w Windows (poza WSL)
  • Użyj tego dość prostego skryptu Python: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (wymaga pakietu lz4 za pośrednictwem pipa lub menedżera pakietów) - skrypt wydaje się być python3, ale można go w prosty sposób dostosować do python2
  • Dostępne jest rozszerzenie strony internetowej, które powinno być w stanie je otworzyć. Uwaga: chociaż źródło jest dostępne, nie zweryfikowałem go, a uprawnienia, o które prosi, są nieco zaniepokojone ( szczególnie odpowiedź na wątpliwości )
  • Teoretycznie powinieneś być w stanie usunąć pierwsze 8 bajtów (np. Za pomocą dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1), co powinno dać ci prawidłowy blok lz4. Zauważ, że różni się to od ramki LZ4 . Podczas gdy większość języków programowania ma biblioteki, które mogą łatwo dekodować blok, znalezienie wcześniej przygotowanego narzędzia jest trudniejsze, np. liblz4-toolPakiet akceptuje tylko format ramki.
Kok
źródło
1
Dlaczego LZ4 był konieczny? LZ4 to absolutnie kretyński pomysł.
neverMind9
BTW, oto lz4json, który kompiluje się czysto w systemach UNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD i NetBSD - github.com/cnst/lz4json .
cnst
5

Udało mi się wyodrębnić adresy URL z pliku {profile-dir} /sessionstore-backups/recovery.jsonlz4 przy użyciu następującego bezpłatnego narzędzia online zaprojektowanego specjalnie do tego celu:

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

Ta sama strona oferuje podobne narzędzie do odszyfrowywania plików jsonlz4 z katalogu {profile-dir} / bookmarkbackups .

MikeOnline
źródło
2
Właśnie to znalazłem, działa bez zarzutu.
lowtechsun
1

W systemach UNIX® i podobnych do UNIX , takich jak Mac OS X z MacPorts, FreeBSD, OpenBSD lub NetBSD z pkgsrc, następujący https://github.com/cnst/lz4json widelec lz4json może być również użyty do skompilowania w czysty sposób box, np. w Mac OS X z 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
źródło