Skip to main content

ESE-RS

High-performance Microsoft ESE (Extensible Storage Engine) database parser written in Rust with Python bindings.

Features

  • 🚀 40x faster than Impacket's Python implementations
  • 🦀 Memory-safe Rust implementation
  • 🐍 Python bindings via PyO3
  • 📦 Zero-copy parsing where possible
  • 🔧 Cross-platform (Windows, Linux, macOS)
  • 🔍 Forensic carving for recovering UTF-16LE strings from unreferenced page slack

Installation

Python

pip install ese-parser

Rust

[dependencies]
ese-rs = "0.1"

Quick Start

Python

from ese_parser import EseDatabase

# Open database
db = EseDatabase("database.edb")

# List tables
for table in db.get_tables():
    print(table)

# Read table
records = db.read_table("MSysObjects")
for record in records:
    print(record)

# Forensic carving (UTF-16LE)
# Note: carved results may come from page slack and not correspond to live records.
hits = db.carve_utf16le_strings_scoped("slack", "hopto.org", min_chars=6, max_hits=50)
for h in hits:
    print(h)

Rust

use ese_rs::Database;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let db = Database::open("database.edb")?;
    
    let mut cursor = db.open_table(b"MSysObjects")?;
    while let Some(record) = cursor.next_row()? {
        println!("{:?}", record);
    }
    
    Ok(())
}

Documentation

Performance

Benchmark parsing 340,288+ records from 3 databases:

  • Python (Impacket): 82.12 seconds
  • Rust (ese-rs): 2.18 seconds
  • Speedup: 37.69x

Supported Database Types

  • Windows Search (.edb)
  • Active Directory (.dit)
  • Exchange (.edb)
  • SRUM (SRUDB.dat)
  • WebCache (WebCacheV*.dat)
  • Any ESE database (Windows 2003+)

License

Dual-licensed under MIT OR Apache-2.0.

Acknowledgments

Based on the ESE format specification and inspired by Impacket's ese.py implementation.

Metadata

Release files for ese-parser 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for ese-parser 0.1.8
File Actions
ese_parser-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details for ese_parser-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
ese_parser-0.1.8-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for ese_parser-0.1.8-cp311-cp311-macosx_11_0_arm64.whl
ese_parser-0.1.8-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details for ese_parser-0.1.8-cp311-cp311-macosx_10_12_x86_64.whl
ese_parser-0.1.8-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for ese_parser-0.1.8-cp310-cp310-win_amd64.whl
ese_parser-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details for ese_parser-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ese_parser-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details for ese_parser-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
ese_parser-0.1.8-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for ese_parser-0.1.8-cp310-cp310-macosx_11_0_arm64.whl
ese_parser-0.1.8-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details for ese_parser-0.1.8-cp310-cp310-macosx_10_12_x86_64.whl

Total release size: 3.6 MB

Release files / ese_parser-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ese_parser-0.1.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 467.4 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
6734d402f3cef892d7d6c575c50a77296f9a8a96e523a5a19fec88379694cf82
BLAKE2b-256 checksum
How to use checksums
957e2d6a407b2c6a6146d2cb96a613669c4e306d3fdae64f61043883ff532ec2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.13.1

Release files / ese_parser-0.1.8-cp311-cp311-macosx_11_0_arm64.whl

Download URL ese_parser-0.1.8-cp311-cp311-macosx_11_0_arm64.whl
Size 446.6 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f74df459568815dd5a1d231194271b5a31fd71bb3da4642ad44da6bad42f7d2e
BLAKE2b-256 checksum
How to use checksums
a780189a5ae6695339a3192802bc33215d58dd8f6efddc5db6115d10c863ef24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.13.1

Release files / ese_parser-0.1.8-cp311-cp311-macosx_10_12_x86_64.whl

Download URL ese_parser-0.1.8-cp311-cp311-macosx_10_12_x86_64.whl
Size 460.6 kB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
d6e53022731caaa883316b1e9deb2ed925f2ffad927fbb22dd4a54aaa7ece834
BLAKE2b-256 checksum
How to use checksums
c719766adf0f89e2429671f7355b5f2bfb6b8eb373c5b966480ea9e428ba3037
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.13.1

Release files / ese_parser-0.1.8-cp310-cp310-win_amd64.whl

Download URL ese_parser-0.1.8-cp310-cp310-win_amd64.whl
Size 369.5 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
31a5c624e7f05af550072c05d62d10e5a3bac53cacb505ff78f73ceef1cfdd9b
BLAKE2b-256 checksum
How to use checksums
4287d7abce63a2d4d515b69f00a89fce12fb8294bd2e0a605e1ee3b9026ab5cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.13.1

Release files / ese_parser-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ese_parser-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 475.1 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
dc1ccc265e90a38f3f0e1bf64bcf611b009ba046a17ca86ff38ad8c36bb36c22
BLAKE2b-256 checksum
How to use checksums
416b79697903cb55f286ec332e60ab0866fd02188eeb781d7a4f3514a12bd8d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.13.1

Release files / ese_parser-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ese_parser-0.1.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 470.3 kB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
7de6c52677e6ddcf64be2c45b4d07a3344ad5afc878b682da1a77ef33e8a9362
BLAKE2b-256 checksum
How to use checksums
899b98581f0dd020fc11e60ade25991d951b03dfeb0a98e2b7d700f8b52851d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.13.1

Release files / ese_parser-0.1.8-cp310-cp310-macosx_11_0_arm64.whl

Download URL ese_parser-0.1.8-cp310-cp310-macosx_11_0_arm64.whl
Size 449.6 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
49aa922357341f4adf71712f9cf0132bbfe6f9cf96fc8487b3e418f83d7ed843
BLAKE2b-256 checksum
How to use checksums
8764a8be110dbb6507dd0fa60464fe51c20f0d9e9c73e5f6d31e76aa6b6ebc86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.13.1

Release files / ese_parser-0.1.8-cp310-cp310-macosx_10_12_x86_64.whl

Download URL ese_parser-0.1.8-cp310-cp310-macosx_10_12_x86_64.whl
Size 463.7 kB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
18c9d940af431a5b79abb98f9fce98883573279c05d85b995cfdb5e1609a2ca4
BLAKE2b-256 checksum
How to use checksums
79d11ed6836811c949252f7204edea26918aedd7f76b5b4e669a9019038eb480
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.13.1

Security for ese-parser 0.1.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page