Decompress Mozilla Firefox jsonlz4 bookmark backup files (Python)
Sometimes you need to extract something from Firefox without actually running it (as an example, I sometimes need to access stuff in firefox on a remote machine, whilst I can run firefox over a SSH tunnel with --no-remote, there's currently no way to prevent Firefox from restoring whatever tabs were previously open, other than turning it off in about:config, which is crap for day to day usage).
Firefox currently uses files of type mozlz4 (Basically a non-standard variation of lz4)
This snippet will decompress those files and print the output to stdout, so that the JSON can then be passed into something else (or grepped, etc)
Details
- Language: Python
Snippet
#!/usr/bin/env python
import sys
def mozlz4_to_text(filepath):
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file,
# return the uncompressed text.
try:
import lz4.block as lz4
except:
import lz4
bytestream = open(filepath, "rb")
bytestream.read(8) # skip past the b"mozLz40\0" header
valid_bytes = bytestream.read()
text = lz4.decompress(valid_bytes)
return text
print mozlz4_to_text(sys.argv[1])
Usage Example
# Dump Bookmarks out
python mozlz4.py ~/.mozilla/firefox/glg1hlff.default/bookmarkbackups/bookmarks-2019-03-20_36_bKyosvOB911kdTFoAg9zeQ\=\=.jsonlz4
# Pretty print the JSON
python mozlz4.py ~/.mozilla/firefox/glg1hlff.default/bookmarkbackups/bookmarks-2019-03-20_36_bKyosvOB911kdTFoAg9zeQ\=\=.jsonlz4 | python -m "json.tool" | less
# Dump out information about the last session
python /tmp/mozlz4.py ~/.mozilla/firefox/glg1hlff.default/sessionstore-backups/previous.jsonlz4 | python -m "json.tool" | less
# Dump out session recovery info
python /tmp/mozlz4.py ~/.mozilla/firefox/glg1hlff.default/sessionstore-backups/recovery.jsonlz4 | python -m "json.tool" | less