Bagaimana cara mendekode / menguraikan format .jsonlz4 milik Mozilla Firefox? (sessionstore-backups / recovery.jsonlz4)

19

Saya mencoba untuk mendapatkan pegangan pada format file milik Mozilla Firefox .jsonlz4, digunakan, misalnya, untuk sessionstore-backups/recovery.jsonlz4, tetapi tidak berhasil.

Bagaimana saya mendapatkan kembali data saya, khususnya, beberapa teks panjang yang saya ketikkan dalam beberapa textareas dari sesi macet? Ini data saya!

cnst
sumber
10
Saya tidak akan menyebut format milik . Memang, ini adalah kebiasaan, tidak digunakan di mana pun di luar proyek Mozilla, tetapi karena keseluruhan Firefox — termasuk kode kompresi yang relevan (gratis) —adalah gratis dan open source, format ini tidak boleh disebut sebagai hak milik. (PS Saya tidak berbicara tentang branding, yang dilisensikan secara berbeda.)
Ruslan
2
@Ruslan, tetapi sebenarnya milik - hanya karena OSS tidak membuatnya non-eksklusif, karena ada nol alat standar untuk melihat ke dalam isi file-file ini, sedangkan semua file lainnya, bahkan format JAR Java, dapat dengan mudah dikelola dengan 100% alat non-eksklusif standar yang tersedia di port / paket dari setiap sistem UNIX yang layak. OTOH, sepenuhnya non-sepele untuk benar-benar mendapatkan kembali data Anda sendiri dari .jsonlz4file - file ini .
cnst
2
JsonLZ4 adalah ide yang buruk.
neverMind9

Jawaban:

19

Ada beberapa hasil Google yang benar-benar menghasilkan solusi yang bisa dilakukan, tetapi, sesuai https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ , yang berikut ini tampaknya bekerja paling andal:

  • di about:config, alihkan devtools.chrome.enabledpengaturan dari nilai default falseke nilaitrue

  • buka Scratchpad dari dalam Firefox:

    • baik dengan fn+ Shift+ F4di MacBook,
    • atau Shift+ F4,
    • atau melalui bilah menu melalui AlatPengembang WebScratchpad
  • di bilah menu di dalam Scratchpad Firefox, ubah Lingkungan dari Konten ke Browser (mengabaikan langkah ini selanjutnya akan menghasilkan kesalahan seperti Exception: ReferenceError: OS is not definedpada langkah berikutnya)

  • gunakan kode seperti berikut di dalam 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))
    });
    

    Parameter terakhir untuk JSON.stringifymenangani berapa banyak ruang yang akan digunakan di setiap baris; Menempatkan 0 menyebabkan semuanya dicetak pada satu baris, menempatkan 1 membagi garis dengan benar (menempatkan 2 akan membuat spasi kosong terlalu banyak dan meningkatkan ukuran file untuk keuntungan kecil)

  • klik Runtombolnya

  • lari fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifydari dalam aplikasi Terminal

cnst
sumber
Ini sepertinya tidak berfungsi di FF 72 di Linux. Scratchpad telah dihapus, tetapi Konsol sekarang mendukung mode multi-line. Namun, OS.File.read(...baris memberi: "ReferenceError: OS tidak didefinisikan".
mivk
@mivk kesalahan itu disebutkan di atas - terjadi karena lingkungan yang salah; Apakah tidak ada cara untuk peluang lingkungan?
cnst
Saya belum menemukan pengaturan "Lingkungan" ini atau yang serupa di FF 72.0.1.
mivk
12

Sayangnya, karena tajuk yang tidak standar, alat standar tidak akan berfungsi. Ada proposal terbuka untuk mengubahnya. Rupanya header Mozilla dirancang sebelum format bingkai lz4 standar ada; itu membungkus blok lz4 standar.

Yang mengatakan, laporan bug yang sama mencakup beberapa metode alternatif. Saya akan mendaftar mereka secara singkat:

  • Gunakan alat dejsonlz4 , yang mencakup binary build untuk Windows dan harus mudah dibangun di * nix
    • lz4json adalah alat yang serupa, tetapi bergantung pada liblz4 eksternal dan agak lebih mudah untuk dibangun di atas * nix tetapi lebih sulit pada Windows (di luar WSL)
  • Gunakan skrip Python yang cukup sederhana ini: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (memerlukan paket lz4 melalui pip atau manajer paket Anda) - skrip tersebut nampaknya python3 tetapi mudah untuk diadaptasi ke python2
  • Ada ekstensi web yang tersedia yang harus dapat membukanya. NB: sementara sumber tersedia, saya belum memverifikasinya, dan izin yang dimintanya sedikit mengkhawatirkan ( terutama tanggapan terhadap masalah )
  • Secara teori, Anda harus dapat menghapus 8 byte pertama (misalnya dengan dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1) dan itu akan memberi Anda blok lz4 yang valid. Perhatikan bahwa ini berbeda dari bingkai lz4 . Sementara sebagian besar bahasa pemrograman memiliki pustaka yang dapat dengan mudah memecahkan kode blok, menemukan alat prebuilt untuk melakukannya lebih sulit, misalnya liblz4-toolpaket hanya menerima format frame.
Bob
sumber
1
Mengapa LZ4 diperlukan di tempat pertama? LZ4 adalah ide yang benar-benar gila.
neverMind9
BTW, inilah lz4json yang mengkompilasi dengan bersih pada UNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD dan NetBSD - github.com/cnst/lz4json .
cnst
5

Saya dapat mengekstrak URL dari file {profile-dir} /sessionstore-backups/recovery.jsonlz4 menggunakan alat online gratis berikut yang dirancang khusus untuk tujuan ini:

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

Situs yang sama menawarkan alat serupa untuk mendekripsi file jsonlz4 dari direktori {profile-dir} / bookmarkbackups .

MikeOnline
sumber
2
Juga baru saja menemukan ini, bekerja tanpa cacat.
lowtechsun
1

Pada sistem seperti UNIX® dan UNIX , seperti Mac OS X dengan MacPorts, FreeBSD, OpenBSD atau NetBSD dengan pkgsrc, https://github.com/cnst/lz4json fork dari lz4json juga dapat digunakan untuk mengkompilasi dengan bersih dari kotak, misalnya, di Mac OS X w / 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
sumber