Last active
January 7, 2024 02:04
-
-
Save snorey/3eaa683d43b0e08057a82cf776fd7d83 to your computer and use it in GitHub Desktop.
Simple tool to decode Firefox jsonlz4, baklz4 files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# Command-line tool to decompress mozLz4 files used for example by Firefox to store various kinds of session backup information. | |
# Works in both Python 2.7.15 and 3.6.7, as of version 2.1.6 of the LZ4 Python bindings at pypi.org/project/lz4. | |
# To use in another script, simply cut and paste the import statement and the mozlz4_to_text() function (lines 8 to 17). | |
import lz4.block # pip install lz4 --user | |
def mozlz4_to_text(filepath): | |
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file, | |
# return the uncompressed text. | |
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 | |
def main(args): | |
# Given command-line arguments of an input filepath for a ".mozlz4" file | |
# and optionally an output filepath, write the decompressed text to the | |
# output filepath. | |
# Default output filepath is the input filepath minus the last three characters | |
# (e.g. "foo.jsonlz4" becomes "foo.json") | |
filepath_in = args[0] | |
if len(args) < 2: | |
filepath_out = filepath_in[:-3] | |
else: | |
filepath_out = args[1] | |
text = mozlz4_to_text(filepath_in) | |
with open(filepath_out, "wb") as outfile: | |
outfile.write(text) | |
print("Wrote decompressed text to {}".format(filepath_out)) | |
if __name__ == "__main__": | |
import sys | |
args = sys.argv[1:] | |
if args and not args[0] in ("--help", "-h"): | |
main(args) | |
else: | |
print("Usage: mozlz4.py <mozlz4 file to read> <location to write>") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment