Dialoge zum Öffnen und Speichern unter (OpenSaveMRU)¶
Was der Dialogverlauf ist¶
Wenn ein Programm den allgemeinen Dialog „Öffnen“ oder „Speichern unter“ anzeigt, zeichnet Windows in der
NTUSER.DAT des Benutzers Folgendes auf:
- welche Datei geöffnet oder gespeichert wurde:
OpenSavePidlMRUhat einen Unterschlüssel pro Dateierweiterung (docx,ps1, …) und*für alle Erweiterungen, jeweils als Liste der zuletzt verwendeten Elemente (MRU); - welches Programm den Dialog verwendet hat und in welchem Ordner er sich befand:
LastVisitedPidlMRU(undLastVisitedPidlMRULegacyfür Programme, die die älteren Dialoge verwenden); - Programme, die den Dialog angezeigt haben:
CIDSizeMRU(die Größe des Dialogs pro Programm) undFirstFolder(der Pfad eines Programms und ein Ordner); - unter Windows 2000 und XP
OpenSaveMRU(Pfade pro Erweiterung) undLastVisitedMRU(Programme und ihre Ordner als Pfade).
Seit Windows Vista sind die Dateien und Ordner Shell-Item-Listen, also dieselben Strukturen wie das Ziel einer Verknüpfung: Jedes Element ist ein Teil des Pfads (Dieser PC, ein Laufwerk, ein Ordner, die Datei), und ein Datei- oder Ordnerelement kann eigene Zeitstempel und eine NTFS-Dateireferenz enthalten.
Bestmögliche Schlussfolgerung: Ein Programm hat in der Sitzung dieses Benutzers den Dialog „Öffnen“ oder „Speichern unter“ verwendet, um diese Datei zu öffnen oder zu speichern bzw. in diesem Ordner. Nur der neueste Eintrag jeder Liste ist datiert: durch den Zeitpunkt des letzten Schreibzugriffs auf seinen Schlüssel.
Speicherort¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\
OpenSavePidlMRU\<extension> shell item lists, MRUListEx order (Vista and later)
OpenSavePidlMRU\* every extension
LastVisitedPidlMRU program name, then a shell item list
LastVisitedPidlMRULegacy the same
CIDSizeMRU program name
FirstFolder program path, then a folder path
OpenSaveMRU\<extension> paths, MRUList order (2000 and XP)
LastVisitedMRU program name, then a folder path (2000 and XP)
Sichern Sie NTUSER.DAT mit seinen Transaktionsprotokollen für jedes Profil.
Hinweise für die Analyse¶
- Ein Zeitstempel pro Liste. Der Zeitpunkt des letzten Schreibzugriffs auf einen Schlüssel ändert sich, wenn einer seiner Einträge an den
Anfang seiner Liste rückt; er datiert daher nur den Eintrag an Position 0 (
IsMostRecent,LastUsedUTC). Die übrigen Einträge sind geordnet, vom neuesten zum ältesten absteigend, aber undatiert. - Dieselbe Datei in zwei Listen. Eine Datei steht in der Liste ihrer Erweiterung und in
*; zählen Sie sie nicht als zwei Verwendungen.*liefert die Reihenfolge über alle Erweiterungen hinweg. - Geöffnet oder gespeichert. Die Listen sagen nicht, was davon zutrifft. Korrelieren Sie mit den
$MFT- und USN-Journal-Datensätzen der Datei, LNK-Dateien und Jump Lists. - Elementzeitstempel gehören zur Datei, nicht zum Dialog.
ItemModifiedUTC,ItemCreatedUTCundItemAccessedUTCsind die Zeitstempel der Datei zum Zeitpunkt, als das Element geschrieben wurde, mit einer Genauigkeit von 2 Sekunden (FAT). Elemente bekannter Ordner (CLSID_ThisPCDocumentsRegFolder,Downloads, …) haben oft keine. Diese FAT-Zeitstempel besitzen keinen Zeitzonen-Offset. Das SpaltensuffixUTCist eine Darstellungskonvention, kein Beleg dafür, dass die ursprüngliche Uhr in UTC lief; korrelieren Sie mit der Zeitzone des Quellsystems und anderen Zeitstempeln, bevor Sie sie mit Registry-FILETIMEs vergleichen. Siehe Microsofts Hinweise zu Dateizeiten. - Pfade sind Shell-Pfade. Sie beginnen beim Desktop:
This PC\C:\Users\…, ein bekannter Ordner, eine Bibliothek (UsersLibraries\Documents\…) oder ein Netzwerkspeicherort. Ein Pfad, der mit einem Ordner oder einer Datei beginnt, liegt auf dem Desktop. Ein leerer Pfad ist der Desktop selbst. - Nicht dekodierte Elemente. Ein Element eines Typs, den der Shell-Item-Parser nicht kennt, wird durch seine
Klasse angezeigt (
[class 0x00]), sein Typ istunknown, und die Bytes der Liste stehen inDataRaw. - Programme sind Namen.
LastVisitedPidlMRUundCIDSizeMRUspeichern einen Dateinamen (WINWORD.EXE), keinen Pfad.FirstFolderspeichert einen Pfad. - Listen sind kurz und werden bereinigt. Jede Liste enthält nur eine begrenzte Anzahl von Einträgen, und Bereinigungswerkzeuge
löschen die Schlüssel. Verwenden Sie
parse-registry read --recover-deletedfür gelöschte Werte.
Mit Juntei parsen¶
Usage: juntei parse-registry open-save-mru <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
--code-page <CP> Code page of shell item names that aren't Unicode (default 1252)
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry open-save-mru -d evidence/ -o opensavemru.csv
juntei parse-registry open-save-mru -f NTUSER.DAT -t jsonl \
| jq 'select(.List == "OpenSavePidlMRU" and .Extension != "*")'
Die Zusammenfassung listet die Einträge pro Liste, die Programme, die die Dialoge verwendet haben, und die neueste
Datei jedes Hives (den ersten Eintrag von *) auf.
Ausgabefelder¶
| Feld | Interpretation |
|---|---|
Host, User, UserSID, SourcePath |
Host, der Profilinhaber (aus dem Pfad oder den Shell-Ordnern), die SID aus der ProfileList des Systems und der Hive. |
List |
OpenSavePidlMRU, LastVisitedPidlMRU, LastVisitedPidlMRULegacy, CIDSizeMRU, FirstFolder, OpenSaveMRU oder LastVisitedMRU. |
Extension |
Der Unterschlüssel der Erweiterung (docx, *); leer bei den übrigen Listen. |
MRU-Position, IsMostRecent |
Die Position in der Liste des Schlüssels (0 ist der neueste); leer, wenn die Liste den Wert nicht nennt. |
ValueName |
Die Nummer (MRUListEx) oder der Buchstabe (MRUList) des Werts. |
Program |
Das Programm, das den Dialog angezeigt hat. |
Path |
Die Datei oder der Ordner: die verbundenen Namen der Shell-Items oder der als Text gespeicherte Pfad. |
ItemType |
Der Typ des letzten Shell-Items: file, directory, root_folder, volume, network_location, property_view, unknown, … |
ItemModifiedUTC, ItemCreatedUTC, ItemAccessedUTC |
Die Zeitstempel der Datei oder des Ordners, wie ihr Shell-Item sie aufgezeichnet hat. |
MFT-Entry, MFT-Sequence |
Die NTFS-Dateireferenz, die das Shell-Item aufgezeichnet hat. |
LastUsedUTC |
Der Zeitpunkt des letzten Schreibzugriffs auf den Schlüssel, nur für den neuesten Eintrag. |
KeyPath, KeyLastWrittenUTC |
Der Schlüssel und sein letzter Schreibzugriff: der Zeitpunkt seines neuesten Eintrags, nicht jeder Zeile. |
DataRaw |
Die Bytes des Werts (hexadezimal), wenn sie sich nicht dekodieren lassen, oder die Shell-Item-Liste, wenn der Typ eines Elements unbekannt ist. |
TransactionLogStatus, LogsApplied |
Kontext der Registry-Wiederherstellung. |
Problems |
Werte, die die Liste nennt, die der Schlüssel aber nicht hat, Werte, die sie nicht nennt, falsche Typen, abgeschnittene Namen oder Listen. |
Untersuchungsstrategie¶
- Lesen Sie
*pro Benutzer in der Reihenfolge, undLastUsedUTCfür die neueste Datei. - Suchen Sie nach Skripten, Archiven, ausführbaren Dateien und Dokumenten an für Benutzer beschreibbaren Orten, auf Wechselmedien oder im Netzwerk sowie nach Dateien, deren Namen auf Anmeldedaten oder Exporte hindeuten.
- Verwenden Sie
LastVisitedPidlMRU, um ein Programm mit dem zuletzt verwendeten Ordner zu verknüpfen, sowieCIDSizeMRUundFirstFolderfür Programme, die die Dialoge überhaupt verwendet haben. - Korrelieren Sie die Pfade und
MftEntrymit der$MFT, dem USN-Journal, LNK-Dateien, Jump Lists, ShellBags und RecentDocs.