Jawaban:
Saya dapat membongkar jsonlz4 dengan menggunakan lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
.json.mozlz4
file misalnya seperti yang ditunjukkan di github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (catatan untuk diri sendiri: ingat, ingat, gmake
di FreeBSD ...).
liblz4-dev
sebelum membangunnya). Alat avih, OTOH, bekerja dengan sempurna untuk saya.
Simpan skrip ini dalam file, misalnya mozlz4
:
#!/usr/bin/env python
from sys import stdin, stdout, argv, stderr
import os
try:
import lz4.block as lz4
except ImportError:
import lz4
stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')
if argv[1:] == ['-c']:
stdout.write(b'mozLz40\0' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
assert stdin.read(8) == b'mozLz40\0'
stdout.write(lz4.decompress(stdin.read()))
else:
stderr.write('Usage: %s -c|-d < infile > outfile\n' % argv[0])
stderr.write('Compress or decompress Mozilla-flavor LZ4 files.\n\n')
stderr.write('Examples:\n')
stderr.write('\t%s -d < infile.json.mozlz4 > outfile.json\n' % argv[0])
stderr.write('\t%s -c < infile.json > outfile.json.mozlz4\n' % argv[0])
exit(1)
import lz4
ke import lz4.block as lz4
, tetapi masih tidak berhasil. Beberapa byte terkait kesalahan terkait string. OTOH skrip ini berfungsi dengan perubahan impor: gist.github.com/Tblue/62ff47bef7f894e92ed5
$ pip install lz4
.
Sebenarnya hampir semua file profil lz4 Firefox adalah file mozlz4 . Itu berarti mereka memiliki "header format file" yang sama. Kecuali satu file. Saya berbicara tentang file webext.sc.lz4 . Memiliki mozJSSCLz40v001\0
header file dan mungkin beberapa sc
kemasan untuk mengemas grup file ke pada byte stream.
Ada addon Firefox untuk membaca atau kompres .mozlz4 file teks mozlz4-edit
Googling yang cukup gigih untuk ini menghasilkan banyak solusi, tetapi sebagian besar dari mereka tampaknya (a) rusak oleh perubahan berikutnya pada pustaka yang mendasarinya, atau (b) tidak perlu rumit (setidaknya sesuai dengan selera pribadi saya), membuat mereka kikuk untuk masukkan ke dalam kode yang ada.
Berikut ini tampaknya berfungsi setidaknya pada Python 2.7 dan 3.6 menggunakan versi terbaru dari binding Python LZ4 :
def mozlz4_to_text(filepath):
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file,
# return the uncompressed text.
import lz4.block
bytestream = open(filepath, "rb")
bytestream.read(8) # skip past the b"mozLz40\0" header
valid_bytes = bytestream.read()
text = lz4.block.decompress(valid_bytes)
return text
Tentu saja ini tidak mencoba untuk memvalidasi input (atau output), tidak dimaksudkan untuk aman, dll., Tetapi jika seseorang hanya ingin dapat mengurai data FF sendiri, itu akan menyelesaikan pekerjaan dasar.
Versi baris perintah di sini , yang dapat disimpan di direktori yang relevan dan dipanggil dari baris perintah sebagai:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>