Chrome Local Storage & IndexedDB (LevelDB)
2026-05-19 · 2 min
Neben den SQLite-Dateien hält Chrome den Web-App-Zustand in
LevelDB-Schlüssel-Wert-Speichern. Die meisten Ermittler überspringen sie
und verpassen die ergiebigste Quelle für Absichtsbeweise auf dem Rechner.
Eine angemeldete Identität, eine Entwurfsnachricht, ein OAuth-Token, die
URL eines vom Benutzer geöffneten Drive-Dokuments - diese Daten liegen in
Local Storage oder IndexedDB, nicht in History.
Wo es im Profil liegt
Local Storage/leveldb/ # window.localStorage je Origin
Session Storage/ # Session Storage je Tab
IndexedDB/<origin>.indexeddb.leveldb/ # strukturierte App-Datenbanken
IndexedDB/<origin>.indexeddb.blob/ # große Blobs, referenziert vom LDB
Jeder Eintrag ist ein Ordner, keine einzelne Datei: CURRENT,
MANIFEST-NNNNNN, eine oder mehrere *.ldb-SSTables und ein
*.log-Write-Ahead-Log. Kopieren Sie das gesamte Verzeichnis, sonst weigert
sich LevelDB, es zu öffnen.
Das Format, das Sie wirklich lesen müssen
LevelDB ist ein LSM-Baum. Um Schlüssel korrekt aufzuzählen:
- Lesen Sie
CURRENT, um das aktive Manifest zu finden. - Laufen Sie durch
MANIFEST-*, um zu erfahren, welche SSTables auf welcher Ebene live sind. - Mergen Sie die Live-SSTables mit dem
*.log-WAL; der jüngste Schreibvorgang gewinnt pro Schlüssel. - Dekomprimieren Sie Snappy pro Block, falls der Trailer das angibt.
Die Werte erfordern dann eine formatspezifische Dekodierung:
- Local-Storage-Schlüssel sind
_<origin>\x00<key>. Werte beginnen mit einem 1-Byte-Kodierungsmarker:0x00UTF-16LE,0x01Latin-1, manchmal vorangestellt von einem Meta-Byte. - Session Storage verwendet eine
namespace -> map -> key-Indirektion. Über die Meta-Namespace-Schlüssel auflösen, bevor Werte extrahiert werden. - IndexedDB-Werte sind V8-Structured-Clone-kodiert. Zahlen, Strings und einfache Objekte gehen sauber hin und zurück; zyklische Referenzen und typed arrays brauchen sorgfältige Behandlung.
Was Sie hier an echten Beweisen finden
- Slack, Teams, Discord, Notion: eingeloggte Benutzer-IDs, Workspace-IDs, zuletzt geöffnete Kanäle, Entwurfsnachrichten.
- Google Docs / Drive: Datei-IDs (der lange zufällige Teil einer Drive-URL), zuletzt bearbeitete Dokumenttitel, Synchronisierungsstatus.
- VS Code Web / GitHub Codespaces: geöffnete Dateipfade, Repository-Namen.
- Banking und SSO: JWT-Token mit noch lesbaren Claims (Audience, Issuer, Ablauf, manchmal Benutzername).
- Krypto-Wallets: gespeicherte Adressen, oft die Wallet-Kennung.
Vorbehalte
- Im WAL (
*.log) liegen die jüngsten Schreibvorgänge. Wenn Sie nur die*.ldb-Dateien kopieren, verlieren Sie die letzten Minuten Aktivität. - LevelDB-Compaction kann Tombstones für gelöschte Schlüssel erzeugen, die während des Merges noch auftauchen. Behandeln Sie unerklärliche NULs in Ihrer Ausgabe als Löschungen, nicht als Daten.
- Browser migrieren gelegentlich Origins zwischen LevelDB-Stores. Ein sauberer Shutdown ist freundlicher; ein Absturz während der Migration kann verwaiste Daten hinterlassen, die manuelle Wiederherstellung wert sind.