Jump Lists¶
What Jump Lists are¶
Jump Lists back the menus shown from taskbar and Start-menu application entries. Automatic Jump Lists are Windows-managed histories of items used by an application. Custom Jump Lists are application-defined categories and tasks. Both can embed LNK structures with target paths, times, volume/network context, MFT references, and launch arguments.
Automatic records can reveal files or folders opened by an application, last-use order/time, interaction count, and pinned state. Custom lists can expose “recently closed” pages or application tasks—including malicious command arguments.
Best conclusion: the owning application recorded or exposed the item/task in its Jump List. Behavior differs by application; corroborate actual execution/access.
Locations and collection¶
%APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations\*.automaticDestinations-ms
%APPDATA%\Microsoft\Windows\Recent\CustomDestinations\*.customDestinations-ms
The hexadecimal file-name prefix is an AppID. Collect both directories and retain the user profile
path. Automatic lists are OLE Compound File containers with a DestList stream and numbered LNK
streams; custom lists use their own category/link format.
Analyst cautions¶
- AppID descriptions come from a known mapping; an unknown AppID is not suspicious by itself.
LastModified/ last-used fields belong to a DestList entry; embedded target times are different.- Interaction counts exist only in supported versions and are not a full open count.
- Pinning preserves items beyond normal recency; cleanup or application settings can remove others.
- A list can contain stale/unattached streams or bytes from an earlier, longer custom list.
- Embedded LNK arguments and paths are attacker-controlled. Application association is context, not trust.
Parse with Juntei¶
Usage: juntei parse-file jump-lists <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find automatic/custom destination files
-f, --file <FILE> Parse one Jump List
--code-page <CP> ANSI code page for embedded links
Output:
-o, --output <PATH> Directory of CSV tables, or JSON/JSONL file
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-file jump-lists -d evidence/ -o jump-list-csv
juntei parse-file jump-lists -f sample.automaticDestinations-ms -t jsonl | jq .
With auto-parse, the CSV tables are FileAndFolderOpening/JumpLists-AutomaticDestinations.csv
and FileAndFolderOpening/JumpLists-CustomDestinations.csv, directly under each computer.
The shared log is JumpLists-logs.txt in that category. The manifests list the exact paths
in OutputFiles. Standalone CSV exports retain AutomaticDestinations.csv and
CustomDestinations.csv in the directory you choose. JSON and JSONL automatic exports are
single JumpLists.json or JumpLists.jsonl files; the record structure is unchanged.
AutomaticDestinations CSV fields¶
| Field group | Fields and interpretation |
|---|---|
| Source | SourceFile, SourceCreated, SourceModified, SourceAccessed: the Jump List container and its file-system times. |
| Application | AppId, AppIdDescription: file-name AppID and known application mapping. Do not infer identity from an unknown hash. |
| Container | HasSps, DestListVersion, LastUsedEntryNumber: DestList structure/version and header context. |
| Ordering | MRU, EntryNumber: most-recent-use position and hexadecimal entry/stream identifier. |
| Use metadata | CreationTime, LastModified, InteractionCount, PinStatus, PinPosition: DestList lifecycle/use/pin state. Interpret by version. |
| Host/path | Hostname, MacAddress, Path, DisplayPath: target location and tracking context. Host/MAC is not sole attribution. |
| Tracking IDs | FileBirthDroid, FileDroid, VolumeBirthDroid, VolumeDroid: correlate moved targets and embedded LNK tracking. |
| Notes | Notes: tells you about unattached streams, recovered leftovers, or other parser context. |
| Embedded LNK | TargetCreated, TargetModified, TargetAccessed, FileSize, RelativePath, WorkingDirectory, FileAttributes, HeaderFlags, DriveType, VolumeSerialNumber, VolumeLabel, LocalPath, CommonPath, TargetIDAbsolutePath, TargetMFTEntryNumber, TargetMFTSequenceNumber, MachineID, MachineMACAddress, TrackerCreatedOn, ExtraBlocksPresent, Args: interpret as described on LNK Shortcuts. |
| Additional LNK | NetworkPath, Name, IconLocation: network and presentation fields from the embedded shortcut. |
| Validation | Problems: missing streams, truncation, count disagreement, or link damage. |
CustomDestinations CSV fields¶
Custom output starts with SourceFile, SourceCreated, SourceModified, SourceAccessed, AppId,
AppIdDescription, and EntryName (category name or Tasks), followed by all embedded LNK fields
listed above, then Notes, NetworkPath, Name, IconLocation, and Problems.
JSON/JSONL additionally preserves the DestList header, per-entry score/checksum/property store,
DestListPropertyStore, compound-file streams, custom categories, bytes after the last category,
and every embedded LNK's nested fields.
Investigation strategy¶
- Identify user and source profile, then map AppID to application cautiously.
- Sort automatic entries by
LastModifiedandMRU; separate pinned items. - Review paths, network shares, removable volume serials, MFT references, and arguments.
- Inspect
Notesand unattached/leftover links—deleted or earlier items can survive there. - Correlate with RecentDocs, standalone Recent LNKs, Prefetch, SRUM,
$MFT, and event logs.