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)
#!/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])
# 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