This module salvages Firefox JSONLZ4 (mozLz4) compressed JSON files, extracting sessions, bookmarks, and telemetry data from both intact and carved/truncated files.
This report is for informational and investigative purposes only. The data presented should be independently verified before being relied upon for any legal, regulatory, or evidentiary purpose.
- Partial data recovery: Carved or truncated files may yield incomplete data. The parser uses progressive decompression and JSON repair heuristics, but some records may be lost or corrupted.
- JSON repair heuristics: Corrupted JSON is repaired using multi-stage heuristics (brace balancing, escape fixing, truncation recovery). Repaired JSON may not perfectly represent the original data.
- Telemetry structure variance: Firefox telemetry JSON structure varies across Firefox versions. Some fields may be missing or differently named in older/newer versions.
- Timestamp interpretation: Session timestamps represent last-accessed times, not necessarily when tabs were first opened. Bookmark timestamps may reflect import dates rather than original creation.
- Deduplication: The parser deduplicates extracted records within a single run. Records may appear duplicated across multiple source files from the same profile.
Firefox uses a custom LZ4-based compression format called "mozLz4" for storing JSON data. These
files have a mozLz40\0 magic header followed by LZ4-compressed JSON content.
Common JSONLZ4 files include:
- Session files (
sessionstore.jsonlz4,recovery.jsonlz4): Open tabs, closed tabs, window state - Bookmarks (
bookmarks.jsonlz4): Bookmark tree with folders and URLs - Telemetry (
*.jsonlz4in datareporting): Browser metrics and events
This module is specifically designed for forensic recovery from:
- Carved files: JSONLZ4 segments extracted from disk images or unallocated space
- Truncated files: Partially overwritten or incomplete files
- Corrupted files: Files with bit errors or missing data
- Segment detection: Scans files for
mozLz40\0magic bytes to find embedded JSONLZ4 segments - Progressive tail trimming: Attempts decompression with progressively shorter input until success
- Partial decompression: Uses liblz4 C library for partial decompression when available
- JSON repair: Multi-stage repair process:
- Control character removal
- Backslash escape fixing
- Brace/bracket balancing
- Truncation to last valid JSON boundary
Extracted from session restore files:
- Tab URLs: URLs from open and recently closed tabs
- Last accessed: Timestamp of last tab interaction
- Window context: Which window/tab group contained the tab
Extracted from bookmark backup files:
- Title: Bookmark display name
- URL: Bookmarked URI
- Date added: When bookmark was created
- Date modified: Last modification timestamp
- Folder path: Location in bookmark hierarchy
Extracted from telemetry event files:
- Timestamp: Event occurrence time
- Category: Event category (e.g., "navigation", "security")
- Method: Event action type
- Object: Target of the event
- Value: Event payload
Extracted from telemetry main ping files:
- Metric name: Flattened metric path
- Value: Metric value (histograms, scalars, etc.)
- Process: Which Firefox process generated the metric
| Artifact | Path Pattern | Purpose |
|---|---|---|
| Session store | sessionstore.jsonlz4 |
Current session state |
| Session backup | sessionstore-backups/*.jsonlz4 |
Session recovery files |
| Bookmarks | bookmarkbackups/*.jsonlz4 |
Bookmark snapshots |
| Telemetry | datareporting/archived/**/*.jsonlz4 |
Browser telemetry |
| Carved files | **/*.jsonlz4, **/*.mozlz4 |
Recovered segments |
- Session history: Individual tab navigation history within sessions
- Form data: Saved form field values in session files
- Pinned tabs: Tab pinning state
- Container tabs: Multi-Account Container associations
- Sync data: Firefox Sync encrypted payloads
Four CSV files are generated:
-
firefox_sessions.csv- Tab URLs and access timestampssource_file,url,last_accessed
-
firefox_bookmarks.csv- Bookmark entriessource_file,title,url,date_added,date_modified
-
firefox_telemetry_events.csv- Flattened telemetry eventssource_file,timestamp,category,method,object,value,extra_*
-
firefox_telemetry_main_metrics.csv- Flattened telemetry metricssource_file,metric,value,process
When --classify is specified, source files are organized into categories:
Firefox/
Sessions/ - Session restore files
Bookmarks/ - Bookmark backup files
Telemetry/ - Telemetry data files
Other/ - Valid mozLz4 JSON (unclassified type)
Unknown/ - JSON parsed but not Firefox format
Corrupt/ - No salvageable mozLz4 segments found
| Option | Description |
|---|---|
--glob |
File pattern to match (default: **/*.*lz4) |
--append |
Append to existing CSV files instead of overwriting |
--classify |
Organize files: move, copy, link, or none |
--preserve-tree |
Maintain source directory structure in classification |
--dry-run |
Show what would be done without making changes |
--delete-source |
Delete source files after successful processing |
lz4Python library (required)liblz4C library (optional, enables partial decompression)
Exemplar AND Candidate - This module runs during both live system scans and carved file processing, making it particularly useful for forensic recovery scenarios.