Windows-Artefakte · Lektion 4 von 9
Datei- und Ordnerzugriffe: LNK-Dateien, Sprunglisten, RecentDocs und MRU-Listen
10 Min. Lesezeit
Artefakte der Programmausführung (Lektion 2.3) zeigen, dass ein Programm ausgeführt wurde. Diese Lektion zeigt, welche Dateien und Ordner ein Benutzer damit geöffnet hat: die automatischen Verknüpfungen im Ordner Recent, Sprunglisten und die Listen der zuletzt verwendeten Elemente (MRU) in der NTUSER.DAT des Benutzers. Zusammen beantworten sie die Fragen, die in der praktischen Prüfung am häufigsten gestellt werden: welche Datei, von welchem Volume, mit welchem Programm und wann sie zuletzt geöffnet wurde.
LNK-Dateien
Eine Shell-Link-Datei (LNK) ist eine Windows-Verknüpfung. Neben den Verknüpfungen, die Benutzer anlegen, erstellt Windows sie auch automatisch: Wenn eine Anwendung eine Datei als zuletzt verwendet registriert (Explorer und die standardmäßigen Öffnen-/Speichern-Dialoge tun dies), wird eine Verknüpfung nach %APPDATA%\Microsoft\Windows\Recent geschrieben, also nach C:\Users\<user>\AppData\Roaming\Microsoft\Windows\Recent. Beim Öffnen von E:\Clients\budget-q3.xlsx werden budget-q3.xlsx.lnk und außerdem Clients.lnk für den übergeordneten Ordner erstellt.
Pro Zielname gibt es eine automatische LNK-Datei. Wird dieselbe Datei erneut geöffnet, wird die vorhandene Verknüpfung aktualisiert. Wird eine andere Datei mit demselben Namen in einem anderen Ordner geöffnet, wird sie überschrieben. Der Ordner Recent behält daher für jeden Namen nur das letzte Ziel. Windows entfernt außerdem alte Einträge. Eine Datenschutzeinstellung oder Gruppenrichtlinie, die zuletzt verwendete Elemente deaktiviert, kann verhindern, dass sowohl der Ordner Recent als auch Sprunglisten geschrieben werden. Ein leerer Ordner ist daher für sich genommen kein Beweis für eine Bereinigung.
Struktur
Alle Ganzzahlen liegen im Little-Endian-Format vor. Das Format ist von Microsoft als [MS-SHLLINK] dokumentiert.
| Teil | Inhalt |
|---|---|
| ShellLinkHeader (0x4C Bytes) | HeaderSize 0x0000004C bei 0x00; LinkCLSID 00021401-0000-0000-C000-000000000046 bei 0x04; LinkFlags bei 0x14; Zielattribute bei 0x18; Erstellungs-, Zugriffs- und Schreibzeitstempel des Ziels als FILETIMEs bei 0x1C, 0x24 und 0x2C; Dateigröße des Ziels (4 Bytes) bei 0x34 |
| LinkTargetIDList | Shell-Elemente (das von Shellbags verwendete Format, Lektion 2.5), die den Zielpfad beschreiben |
| LinkInfo | VolumeID: Laufwerkstyp (2 = Wechseldatenträger, 3 = Festplatte, 4 = Netzwerk, 5 = CD-ROM), Laufwerksseriennummer, Volumebezeichnung; anschließend der lokale Basispfad oder bei einer Freigabe der Netzwerkpfad, etwa \\FS01\finance |
| StringData | Optionaler Name, relativer Pfad, Arbeitsverzeichnis, Argumente, Symbolpfad |
| ExtraData-Blöcke | Jeweils mit einer Größe und einer Signatur, z. B. TrackerDataBlock 0xA0000003, PropertyStoreDataBlock 0xA0000009 |
Jede LNK-Datei beginnt also mit 4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00 00 00 00 46. Die Zeitstempel und die Größe im Header beschreiben das Ziel zu dem Zeitpunkt, als die Verknüpfung zuletzt aktualisiert wurde, nicht die Verknüpfung selbst. Befand sich das Ziel auf FAT32, hat sein Änderungszeitstempel eine Auflösung von 2 Sekunden (Lektion 1.5).
Der TrackerDataBlock (0x60 Bytes) enthält den NetBIOS-Namen des Computers, auf dem das Ziel gefunden wurde (16 Bytes, mit NUL aufgefüllt; bei einer Datei auf einer Freigabe ist dies häufig der Dateiserver), und die IDs der verteilten Verknüpfungsnachverfolgung (Droids): eine Volume-ID und eine Dateiobjekt-ID, jeweils aktuell und bei der Erstellung. Wenn die Dateiobjekt-ID eine UUID der Version 1 ist, enthalten ihre letzten 6 Bytes (das Node-Feld) häufig die MAC-Adresse des Computers, der sie erzeugt hat. Der Node-Wert kann allerdings auch zufällig sein.
Zeitstempel der LNK-Datei selbst
Die .lnk-Datei hat eigene Zeitstempel in der $MFT. Bei automatisch angelegten Verknüpfungen für zuletzt verwendete Elemente ist die übliche Interpretation:
- Erstellt ≈ der erste Zeitpunkt, zu dem eine Datei mit diesem Namen über die Shell geöffnet wurde.
- Geändert ≈ der letzte Zeitpunkt, zu dem sie geöffnet wurde.
Betrachten Sie dies als eine zu bestätigende Interpretation, nicht als Regel, da auch andere Aktivitäten die Verknüpfung aktualisieren können. Bei einer Triage-Sicherung behält die Kopie auf Ihrer Arbeitsstation möglicherweise nicht die ursprünglichen Zeitstempel. Lesen Sie diese aus der gesicherten $MFT oder aus dem Protokoll des Sicherungswerkzeugs aus, sofern es sie aufgezeichnet hat.
Warum LNK-Dateien wichtig sind
Die Verknüpfung bleibt erhalten, wenn das Ziel gelöscht oder sicher gelöscht wird oder sich auf einem nicht mehr angeschlossenen USB-Laufwerk befindet. Eine LNK-Datei in Recent mit dem Laufwerkstyp Wechseldatenträger, einer Volumeseriennummer und einem Pfad auf E:\ ist ein wichtiger Beleg dafür, dass dieser Benutzer diese Datei von diesem Volume geöffnet hat. Die Seriennummer verknüpft die Verknüpfung mit einem bestimmten formatierten Volume (Lektion 2.6). LECmd analysiert einzelne Dateien oder ganze Ordner, beispielsweise mit LECmd.exe -d <Recent folder> --csv <out>.
Sprunglisten
Sprunglisten sind die anwendungsspezifischen Listen zuletzt verwendeter und angehefteter Elemente, die in der Taskleiste und im Startmenü angezeigt werden. Sie befinden sich neben den LNK-Dateien in Recent:
Recent\AutomaticDestinations\<AppID>.automaticDestinations-ms: von Windows verwaltet. Jede ist eine OLE-Verbunddatei (SignaturD0 CF 11 E0 A1 B1 1A E1) mit nummerierten Streams, die jeweils eine vollständige LNK-Datei enthalten, und einem Stream namens DestList.Recent\CustomDestinations\<AppID>.customDestinations-ms: von Anwendungen geschrieben, die eigene Kategorien oder Aufgaben definieren; der Inhalt besteht aus einem kurzen Header, auf den hauptsächlich LNK-Strukturen folgen, nicht aus einer Verbunddatei.
Die AppID ist ein 16-stelliger hexadezimaler Hash, der aus der Identität der Anwendung (ihrer AppUserModelID oder ihrem Pfad zur ausführbaren Datei) berechnet wird. Sie identifiziert somit das Programm, das die Liste geführt hat. Veröffentlichte Referenzlisten ordnen bekannte AppIDs Programmen zu, und JLECmd löst viele davon auf. Bei einer unbekannten AppID lassen die Dateitypen der Ziele und andere Ausführungsartefakte in der Regel auf das Programm schließen.
DestList
Der DestList-Stream hat einen 32-Byte-Header, gefolgt von einem Eintrag pro Element. Unter Windows 10 und 11 enthält jeder Eintrag:
| Feld | Bedeutung |
|---|---|
| Droids | Volume- und Objekt-IDs wie im TrackerDataBlock |
| NetBIOS-Name | Computer, auf dem das Ziel gefunden wurde |
| Eintragsnummer | Benennt den LNK-Stream: Eintrag 26 ist Stream 1a (hexadezimal) |
| Letzter aufgezeichneter Zugriff | FILETIME (UTC), zu dem die Anwendung das Element zuletzt verwendet hat |
| Anheftstatus | Position des angehefteten Elements oder -1 (0xFFFFFFFF), wenn es nicht angeheftet ist |
| Zugriffszähler | Wie oft das Element verwendet wurde |
| Pfad | Vollständiger Zielpfad, UTF-16 |
Eintragsnummern werden in aufsteigender Reihenfolge vergeben. Eine höhere Nummer wurde daher später zur Liste hinzugefügt; die Sortierung nach dem letzten Zugriffszeitpunkt ergibt die MRU-Reihenfolge. Die eingebettete LNK-Datei enthält den Laufwerkstyp, die Volumeseriennummer und die Zeitstempel des Ziels; der Zeitpunkt der Verwendung stammt aus DestList.
Sprunglisten bleiben häufig länger erhalten als LNK-Dateien in Recent und zeichnen einen umfangreicheren Verlauf auf. Ihre Einträge werden anhand des vollständigen Pfads unterschieden, sodass zwei Dateien mit demselben Namen in verschiedenen Ordnern separate Einträge behalten. Ein Benutzer, der Elemente aus dem Ordner Recent löscht, verändert AutomaticDestinations nur selten. Außerdem führt jede Anwendung ihre eigene Liste, die mehr Elemente enthalten kann, als die Taskleiste anzeigt. JLECmd analysiert beide Arten, beispielsweise mit JLECmd.exe -d <Recent folder> --csv <out>.
MRU-Listen in der Registry
Diese Schlüssel befinden sich, sofern nicht anders angegeben, in der NTUSER.DAT des Benutzers unter Software\Microsoft\Windows\CurrentVersion\Explorer. Viele verwenden MRUListEx: 4-Byte-Wertnummern im Little-Endian-Format, die zuletzt verwendete zuerst, abgeschlossen durch 0xFFFFFFFF. Der einzige Nutzungszeitpunkt, den sie liefern, ist der LastWrite-Zeitstempel des Schlüssels (Lektion 2.1), der die Änderung am Anfang der Liste datiert.
| Schlüssel | Was er aufzeichnet |
|---|---|
RecentDocs | Namen zuletzt geöffneter Dateien und Ordner; ein Unterschlüssel pro Erweiterung (.xlsx, Folder). Die Werte enthalten den Namen, nicht den vollständigen Pfad. Der LastWrite-Zeitstempel eines Schlüssels datiert nur dessen neuesten Eintrag |
ComDlg32\OpenSavePidlMRU\<ext> (und *) | Vollständige Pfade als Shell-Elemente von Dateien, die über Standarddialoge geöffnet oder gespeichert wurden, nach Erweiterung |
ComDlg32\LastVisitedPidlMRU | Name der ausführbaren Datei und der letzte Ordner, den sie in einem Öffnen-/Speichern-Dialog verwendet hat |
RunMRU | In Win+R eingegebene Befehle; Werte a, b, c… mit der Endung \1, geordnet durch einen Zeichenfolgenwert MRUList |
TypedPaths | In die Adressleiste von Explorer eingegebene Pfade; url1 ist der zuletzt verwendete |
WordWheelQuery | In Explorer eingegebene Suchbegriffe, UTF-16, nach MRUListEx geordnet |
Microsoft Office und LibreOffice
Office 2016, 2019, 2021, 2024 und Microsoft 365 (alle Version 16.0) führen eigene Listen unter Software\Microsoft\Office\16.0\<App>\User MRU\<account id>\File MRU, wobei <App> für Word, Excel oder PowerPoint steht und die Konto-ID das angemeldete Konto identifiziert (beispielsweise LiveId_… oder ADAL_…). Jeder Wert Item n sieht wie folgt aus: [F00000000][T01DCE118009C9A00][O00000000]*C:\Users\ana\Documents\plan.docx. Der Teil [T…] ist ein FILETIME in hexadezimaler Form: 0x01DCE118009C9A00 = 134.229.582.120.000.000, was 2026-05-11T07:30:12Z entspricht. Dies ist ein dateispezifischer Zeitstempel, den RecentDocs nicht liefern kann. Ein benachbarter Schlüssel Place MRU listet Ordner auf.
LibreOffice verwendet diese Schlüssel nicht, sondern speichert zuletzt verwendete Dokumente als file:///-URLs in seiner Benutzerprofildatei registrymodifications.xcu (unter %APPDATA%\LibreOffice\4\user).
Durchgearbeitetes Beispiel: Wann wurde budget-q3.xlsx zuletzt geöffnet?
Die Triage-Sicherung des Computers von ana, DESKTOP-7QK2M1F (Windows 11), enthält eine Excel-Sprungliste in AutomaticDestinations und Recent\budget-q3.xlsx.lnk.
1. DestList. JLECmd listet Eintrag 26 auf: Pfad E:\Clients\budget-q3.xlsx, NetBIOS-Name DESKTOP-7QK2M1F, Zugriffszähler 4, Anheftstatus -1, letzter Zugriff als FILETIME 0x01DCE76C17B033A0. Rechnen Sie ihn um: 0x01DCE76C17B033A0 = 134.236.540.354.180.000 Intervalle von jeweils hundert Nanosekunden; ÷ 10.000.000 = 13.423.654.035,418 s seit 1601; − 11.644.473.600 = Unix-Zeit 1.779.180.435,418 = 2026-05-19T08:47:15.418Z.
2. Eingebettete LNK-Datei. Eintrag 26 = 0x1A, öffnen Sie also Stream 1a: Laufwerkstyp 2 (Wechseldatenträger), Bytes der Laufwerksseriennummer 4D 3C 2B 1A, im Little-Endian-Format als 0x1A2B3C4D gelesen und als 1A2B-3C4D angezeigt, Bezeichnung CLIENTS.
3. LNK-Datei in Recent. budget-q3.xlsx.lnk hat denselben Pfad, Laufwerkstyp und dieselbe Seriennummer. Ihr Header enthält den Änderungszeitstempel des Ziels 2026-05-12T13:02:40Z und die Größe 48.640 Bytes. Laut gesicherter $MFT wurde die .lnk-Datei selbst am 2026-05-11T07:30:12Z erstellt und am 2026-05-19T08:47:16Z geändert.
4. Vergleich. Die Änderung der LNK-Datei liegt 0,582 s nach dem DestList-Zeitpunkt. Verschiedene Komponenten schreiben die beiden Artefakte während desselben Öffnungsvorgangs. Ein Abstand von einer oder zwei Sekunden ist daher normal. Die Volumeseriennummer in beiden stimmt mit dem Bootsektor des USB-Abbilds überein (Lektion 2.6). Der Erstellungszeitstempel der LNK-Datei deutet auf ein erstes Öffnen am 2026-05-11 hin, und der Zähler zeigt mindestens vier Verwendungen.
Antwort: zuletzt geöffnet um 2026-05-19T08:47:15Z (sekundengenau, wie in der Aufgabe verlangt), ermittelt aus der Excel-Sprungliste und bestätigt durch die LNK-Datei in Recent. Geben Sie UTC immer mit Z an; übernehmen Sie niemals einen von einem Werkzeug in Ortszeit angezeigten Zeitpunkt, ohne ihn umzurechnen.
Auswahl und Bestätigung
| Frage | Bestes Artefakt | Bestätigen durch |
|---|---|---|
| Wann wurde Datei X zuletzt geöffnet? | Letzter Zugriff in DestList in der Sprungliste der Anwendung | Änderungszeitstempel der LNK-Datei in Recent; Office-Zeitstempel [T…]; LastWrite von RecentDocs, wenn X am Anfang der Liste steht |
| Wann wurde X erstmals geöffnet? | Erstellungszeitstempel der LNK-Datei in Recent | USN-Journaleintrag zur Erstellung der .lnk-Datei (Lektion 1.4) |
| Befand sich X auf einem Wechseldatenträger, und auf welchem? | LNK-LinkInfo: Laufwerkstyp und Volumeseriennummer | In die Sprungliste eingebettete LNK-Datei; VBR des USB-Abbilds (Lektion 2.6) |
| Welches Programm hat X geöffnet? | AppID der Sprungliste, die X enthält | LastVisitedPidlMRU; Ausführungsartefakte (Lektion 2.3) |
| Welchen Ordner hat der Benutzer durchsucht oder als Speicherziel verwendet? | OpenSavePidlMRU, LastVisitedPidlMRU | Shellbags (Lektion 2.5) |
| Was hat der Benutzer eingegeben oder gesucht? | TypedPaths, RunMRU, WordWheelQuery | LastWrite des Schlüssels; Shellbags |
Prüfungsschwerpunkt: Rechnen Sie mit einer Aufgabe, die danach fragt, wann eine Datei zuletzt geöffnet wurde, von welchem Volume oder durch welches Programm, und als Antwort einen exakten UTC-Zeitpunkt, einen vollständigen Pfad oder eine Volumeseriennummer verlangt. Sie sollten wissen, wo sich jedes Artefakt in einer Triage-Sicherung befindet, wie eine DestList-Eintragsnummer einem hexadezimalen Streamnamen zugeordnet wird und dass die Zeitstempel im LNK-Header zum Ziel gehören. Sie sollten erklären können, warum RecentDocs nur seinen neuesten Eintrag datiert.
Kernpunkte
- Automatische LNK-Dateien in
%APPDATA%\Microsoft\Windows\Recentzeichnen Pfad, Zeitstempel, Größe, Laufwerkstyp, Volumeseriennummer und Computernamen des Ziels auf und bleiben auch nach dem Löschen oder Entfernen des Ziels erhalten. - Pro Zielname existiert eine LNK-Datei in Recent; ihre eigenen Erstellungs- und Änderungszeitstempel entsprechen in der Regel ungefähr dem ersten und letzten Öffnen und müssen bestätigt werden.
- Sprunglisten in
AutomaticDestinationssind Verbunddateien mit nummerierten LNK-Streams und einer DestList, die für jedes Element den letzten Zugriffszeitpunkt, Zugriffszähler, Anheftstatus und Pfad enthält. - MRUListEx gibt die Reihenfolge an; der LastWrite-Zeitstempel eines Schlüssels datiert nur den Eintrag am Anfang der Liste. Die Office-File-MRU-Werte
[T…]liefern dateispezifische FILETIMEs. - Beantworten Sie „zuletzt geöffnet“ anhand von DestList, bestätigen Sie den Befund mit der LNK-Datei und geben Sie UTC mit
Zan.