How to parse SRUDB.dat without installing anything
5/17/2026
There is no shortage of SRUM parsers. The choice is about your workflow,
not about capability — every tool below reads the same ESE structures
and resolves the same SruDbIdMapTable joins.
| Approach | Install required | Best for |
|---|---|---|
| Browser parser | None | One-off analysis, sensitive files (no upload), demos |
| SrumECmd | .NET 6+ runtime | Windows DFIR workstation, batch processing |
| srum-dump | Python 3.9+ | Linux/macOS analysts, custom pipelines |
SrumECmd — what most DFIR shops actually run
Eric Zimmerman's SrumECmd is the standard on Windows analysis
workstations. It writes one CSV per table, ready for Timeline Explorer:
SrumECmd.exe -f C:\evidence\SRUDB.dat -r C:\evidence\SOFTWARE --csv C:\output
-r points at the SOFTWARE registry hive so that network profile
GUIDs resolve to friendly SSIDs. Without it, you get raw GUIDs and
have to pivot through the registry
manually.
Output:
- Application Resource Use (current + LT)
- Network Data Usage
- Network Connectivity
- Energy Usage (+ LT)
- Push Notifications
- The resolved IdMap
Process a whole evidence drive in a single batch script and pull the CSVs into Timeline Explorer or your SIEM.
srum-dump — the cross-platform option
Mark Baggett's Python tool. Writes an XLSX with one sheet per table.
pip install -r requirements.txt
python srum_dump.py --SRUM_INFILE SRUDB.dat --REG_HIVE SOFTWARE --OUT_DIR ./out
Willi Ballenthin's JSON fork is a better fit for scripted pipelines (pandas, jq). Both are slower than SrumECmd on multi-gigabyte files, faster than waiting for a Windows VM if you live in Linux/macOS.
In-browser parser
Drop SRUDB.dat onto the page. Parsing happens entirely client-side
via WebAssembly; nothing is uploaded. For a typical 5 MB database the
results render in about a second.
What you get:
- All ESE tables enumerated with column types.
- Tabs for the well-known SRUM tables (Application Resource Use, Network Data Usage, Network Connectivity, Energy Usage, Push Notifications).
AppIdandUserIdautomatically resolved againstSruDbIdMapTable.- FILETIME columns rendered as ISO-8601; OLE dates rendered correctly.
Useful when the source database came from a regulated environment and uploading it to a third-party SaaS is not an option.
Picking between them
- One file, quick triage → browser parser.
- Many files, repeatable in a script → SrumECmd.
- Custom analysis in pandas / jq → srum-dump JSON fork.
- Sensitive evidence that cannot cross a vendor boundary → browser parser.
Common pitfalls before you trust any tool's output
- Copying a locked file.
SRUDB.datis locked on a live system. See where is SRUDB.dat located for acquisition options. - Dirty database. A copy from a live host is almost always dirty.
The most recent rows live in the
SRU*.logfiles. See how to fix a dirty SRUDB.dat. - Forgetting the SOFTWARE hive. Without it, network profile names
are raw GUIDs. SrumECmd's
-rflag and srum-dump's--REG_HIVEaccept the hive path. - Reading only the short-term table. Application Resource Use
captures ~30 days. The
LTsibling holds weekly aggregates for up to a year. Always check both, especially for incidents older than a month. - Assuming every timestamp is FILETIME. Application Resource Use
TimeStampis an OLE variant date. Energy and Network Connectivity event timestamps are FILETIMEs. Mixing them slips dates by 400 years.
Further reading
Frequently asked questions
Do I need Python to parse SRUDB.dat?
No. You can use a browser-based parser (no install), a .NET command-line tool (SrumECmd), or Python (srum-dump). Pick whichever fits your environment.
Is the browser-based parser slower than CLI tools?
For files under 100 MB the difference is imperceptible — parsing happens in WebAssembly at near-native speed. CLI tools win for batch processing dozens of files.
Can I export results to CSV?
SrumECmd and srum-dump both produce CSV/XLSX out of the box. The browser parser currently shows results in an interactive table; CSV export is on the roadmap.
Will any parser show me data older than 30 days?
Only if the long-term (LT) tables exist and have rows. Short-term tables are pruned after about 30 days by the SRUM service itself.
Can I parse just the SRUDB.dat file or do I need the logs?
SRUDB.dat alone is usually enough. The SRU*.log transaction logs only matter when the database was copied while the service was mid-flush — in that case, replaying the logs gives you the missing recent rows.