Câu trả lời:
Tôi đã có thể giải nén jsonlz4 bằng cách sử dụng lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
.json.mozlz4
các tệp, ví dụ như được hiển thị tại github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (lưu ý đến bản thân: nhớ, nhớ, gmake
trên FreeBSD,).
liblz4-dev
trước khi xây dựng nó). công cụ của avih, OTOH, đã làm việc hoàn hảo với tôi.
Lưu tập lệnh này trong một tệp, ví dụ 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
để import lz4.block as lz4
, nhưng nó vẫn không làm việc. Một số lỗi liên quan đến byte và chuỗi. OTOH tập lệnh này đã hoạt động với thay đổi nhập: gist.github.com/Tblue/62ff47bef7f894e92ed5
$ pip install lz4
.
Trên thực tế hầu như tất cả các tệp lz4 hồ sơ Firefox đều là các tệp mozlz4 . Nó có nghĩa là họ có cùng "tiêu đề định dạng tệp". Ngoại trừ một tập tin. Tôi nói về tập tin webext.sc.lz4 . Nó có mozJSSCLz40v001\0
tiêu đề tệp và có thể một số sc
bao bì để đóng gói nhóm tệp vào luồng byte.
Có một addon Firefox để đọc hoặc nén .mozlz4 tập tin văn bản mozlz4-edit
Googling đủ bền bỉ cho việc này tạo ra rất nhiều giải pháp, nhưng hầu hết trong số chúng dường như bị phá vỡ bởi những thay đổi tiếp theo đối với các thư viện cơ bản, hoặc (b) phức tạp không cần thiết (ít nhất là theo sở thích cá nhân của tôi), khiến chúng trở nên lộn xộn thả vào mã hiện có.
Phần sau có vẻ hoạt động ít nhất trên Python 2.7 và 3.6 bằng phiên bản gần đây của các ràng buộc 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
Tất nhiên, điều này không cố gắng xác nhận đầu vào (hoặc đầu ra), không nhằm mục đích bảo mật, v.v., nhưng nếu người ta chỉ muốn phân tích dữ liệu FF của chính mình, thì nó đã hoàn thành công việc cơ bản.
Phiên bản dòng lệnh ở đây , có thể được lưu trong thư mục có liên quan và được gọi từ dòng lệnh là:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>