analyzing-lnk-file-and-jump-list-artifacts
分析 Windows LNK 快捷方式文件和 Jump List 制品,使用 LECmd、JLECmd 以及对 Shell Link 二进制格式的手动解析,以建立文件访问、程序执行和用户活动的证据。
Best use case
analyzing-lnk-file-and-jump-list-artifacts is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
分析 Windows LNK 快捷方式文件和 Jump List 制品,使用 LECmd、JLECmd 以及对 Shell Link 二进制格式的手动解析,以建立文件访问、程序执行和用户活动的证据。
Teams using analyzing-lnk-file-and-jump-list-artifacts should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/analyzing-lnk-file-and-jump-list-artifacts/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How analyzing-lnk-file-and-jump-list-artifacts Compares
| Feature / Agent | analyzing-lnk-file-and-jump-list-artifacts | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
分析 Windows LNK 快捷方式文件和 Jump List 制品,使用 LECmd、JLECmd 以及对 Shell Link 二进制格式的手动解析,以建立文件访问、程序执行和用户活动的证据。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 分析 LNK 文件和 Jump List 制品
## 概述
Windows LNK(快捷方式)文件和 Jump List 是关键的取证制品(forensic artifact),提供文件访问、程序执行和用户行为的证据。当用户通过 Windows 资源管理器或"打开/保存"对话框打开文件时,会自动创建 LNK 文件,其中存储了目标文件的元数据,包括原始路径、时间戳、卷序列号、NetBIOS 名称以及主机系统的 MAC 地址。Windows 7 引入的 Jump List 通过维护每个应用程序最近和频繁访问文件的列表来扩展这一功能。即使目标文件被删除,这些制品仍然存在,使其成为证明用户在特定时间访问特定文件的宝贵手段。
## 前置条件
- LECmd(Eric Zimmerman)用于 LNK 文件解析
- JLECmd(Eric Zimmerman)用于 Jump List 解析
- Python 3.8+ 及 pylnk3 或 LnkParse3 库
- 来自 Windows 系统的取证镜像或分诊(triage)收集
- Timeline Explorer 用于 CSV 分析
## LNK 文件位置
| 位置 | 描述 |
|----------|-------------|
| `%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\` | 最近访问的文件 |
| `%USERPROFILE%\Desktop\` | 用户创建的快捷方式 |
| `%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\` | 开始菜单快捷方式 |
| `%USERPROFILE%\AppData\Roaming\Microsoft\Office\Recent\` | Office 最近文档 |
## LNK 文件结构
### Shell Link 头部(76 字节)
| 偏移 | 大小 | 字段 |
|--------|------|-------|
| 0x00 | 4 | HeaderSize(始终为 0x0000004C) |
| 0x04 | 16 | LinkCLSID(始终为 00021401-0000-0000-C000-000000000046) |
| 0x14 | 4 | LinkFlags |
| 0x18 | 4 | FileAttributes |
| 0x1C | 8 | CreationTime(FILETIME) |
| 0x24 | 8 | AccessTime(FILETIME) |
| 0x2C | 8 | WriteTime(FILETIME) |
| 0x34 | 4 | 目标文件大小 |
| 0x38 | 4 | IconIndex |
| 0x3C | 4 | ShowCommand |
| 0x40 | 2 | HotKey |
### LNK 文件中的关键取证字段
- **目标文件时间戳**:被引用文件的创建、访问、修改时间
- **卷信息**:序列号、驱动器类型、卷标
- **网络共享信息**:UNC 路径、共享名称
- **机器标识符**:NetBIOS 名称、MAC 地址(来自 TrackerDataBlock)
- **分布式链接跟踪**:机器 ID 和对象 GUID
## 使用 EZ Tools 分析
### LECmd——LNK 文件解析器
```powershell
# 解析 Recent 文件夹中的所有 LNK 文件
LECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent" --csv C:\Output --csvf lnk_analysis.csv
# 解析单个 LNK 文件并输出完整详情
LECmd.exe -f "C:\Evidence\Users\suspect\Desktop\Confidential.docx.lnk" --json C:\Output
# 解析 LNK 文件并附加详细级别
LECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent" --csv C:\Output --csvf lnk_all.csv --all
```
### JLECmd——Jump List 解析器
```powershell
# 解析自动 Jump List
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv C:\Output --csvf jumplists_auto.csv
# 解析自定义 Jump List
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations" --csv C:\Output --csvf jumplists_custom.csv
# 解析所有 Jump List 并输出详细信息
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv C:\Output --csvf jumplists_auto.csv --ld
```
## Jump List 结构
### 自动目标(automaticDestinations-ms)
这些是 OLE 复合文件(结构化存储),由文件名中的 AppID 哈希标识:
| AppID 哈希 | 应用程序 |
|-----------|-------------|
| 5f7b5f1e01b83767 | Windows 资源管理器固定/频繁 |
| 1b4dd67f29cb1962 | Windows 资源管理器最近 |
| 9b9cdc69c1c24e2b | Notepad |
| a7bd71699cd38d1c | Notepad++ |
| 12dc1ea8e34b5a6 | Microsoft Paint |
| 7e4dca80246863e3 | 控制面板 |
| 1cf97c38a5881255 | Microsoft Edge |
| f01b4d95cf55d32a | Windows 资源管理器 |
| 9d1f905ce5044aee | Microsoft Excel |
| a4a5324453625195 | Microsoft Word |
| d00655d2aa12ff6d | Microsoft PowerPoint |
| bc03160ee1a59fc1 | Outlook |
### 自定义目标(customDestinations-ms)
当用户将条目固定到应用程序 Jump List 时创建。这些文件包含连续的 LNK 条目。
## Python 分析脚本
```python
import struct
import os
from datetime import datetime, timedelta
FILETIME_EPOCH = datetime(1601, 1, 1)
def filetime_to_datetime(filetime_bytes: bytes) -> datetime:
"""将 Windows FILETIME(自 1601 年起的 100 纳秒间隔)转换为 datetime。"""
ft = struct.unpack("<Q", filetime_bytes)[0]
if ft == 0:
return None
return FILETIME_EPOCH + timedelta(microseconds=ft // 10)
def parse_lnk_header(lnk_path: str) -> dict:
"""解析 LNK 文件的 Shell Link 头部。"""
with open(lnk_path, "rb") as f:
header = f.read(76)
header_size = struct.unpack("<I", header[0:4])[0]
if header_size != 0x4C:
return {"error": "无效的 LNK 头部"}
link_flags = struct.unpack("<I", header[0x14:0x18])[0]
file_attrs = struct.unpack("<I", header[0x18:0x1C])[0]
result = {
"header_size": header_size,
"link_flags": hex(link_flags),
"file_attributes": hex(file_attrs),
"creation_time": filetime_to_datetime(header[0x1C:0x24]),
"access_time": filetime_to_datetime(header[0x24:0x2C]),
"write_time": filetime_to_datetime(header[0x2C:0x34]),
"file_size": struct.unpack("<I", header[0x34:0x38])[0],
"has_target_id_list": bool(link_flags & 0x01),
"has_link_info": bool(link_flags & 0x02),
"has_name": bool(link_flags & 0x04),
"has_relative_path": bool(link_flags & 0x08),
"has_working_dir": bool(link_flags & 0x10),
"has_arguments": bool(link_flags & 0x20),
"has_icon_location": bool(link_flags & 0x40),
}
return result
```
## 调查使用场景
### 文件访问证据
1. 解析 Recent 文件夹中的 LNK 文件以识别访问的文档
2. 与 MFT 时间戳和 USN Journal 条目交叉比对
3. 注意:即使目标文件被删除,LNK 文件仍然存在
### 可移动媒体访问
1. 引用驱动器盘符 E:、F:、G: 的 LNK 文件表明使用了可移动媒体
2. LNK 中的卷序列号标识具体设备
3. TrackerDataBlock 中的 MAC 地址标识源机器
### 网络共享活动
1. 包含 UNC 路径(\\server\share)的 LNK 文件表明有网络文件访问
2. NetBIOS 名称标识远程服务器
3. 时间戳确定访问发生的时间
## Windows 10 与 Windows 11 的差异
最新研究(IEEE 2025)表明 Windows 11 产生不同的 LNK 和 Jump List 制品:
- 某些文件类型自动生成的 LNK 文件减少
- 现代应用的 Jump List 行为已修改
- UWP/MSIX 应用可能不生成传统 Jump List
- Windows 11 快速访问(Quick Access)取代了部分最近功能
## 参考资料
- Shell Link 二进制文件格式:https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-shllink/
- Magnet Forensics LNK 分析:https://www.magnetforensics.com/blog/forensic-analysis-of-lnk-files/
- Jump List 取证 2025:https://www.cybertriage.com/blog/jump-list-forensics-2025/
- Eric Zimmerman 的 LECmd/JLECmd:https://ericzimmerman.github.io/Related Skills
recovering-deleted-files-with-photorec
使用 PhotoRec 基于文件签名的数据雕刻(File Carving)引擎,从磁盘镜像和存储介质中恢复已删除文件,无论文件系统是否损坏。
performing-file-carving-with-foremost
使用 Foremost 的文件头/文件尾签名雕刻技术,从磁盘镜像和未分配空间中恢复文件,无论文件系统状态如何均可提取证据。
investigating-ransomware-attack-artifacts
识别、收集和分析勒索软件攻击制品,以确定变种、初始访问向量、加密范围和恢复选项。
implementing-file-integrity-monitoring-with-aide
配置 AIDE(高级入侵检测环境)进行文件完整性监控,包括基线创建、定期完整性检查、变更检测和告警
implementing-code-signing-for-artifacts
本技能涵盖为构建产物实施代码签名,以确保软件供应链中的完整性和真实性。 内容包括使用 GPG、Sigstore 和平台专用签名工具对二进制文件、软件包和容器进行签名, 建立信任链,以及在部署管道中验证签名。
implementing-application-whitelisting-with-applocker
使用 Windows AppLocker 实施应用程序白名单,限制端点上未授权软件的执行, 减少来自恶意软件、未授权工具和影子 IT 的攻击面。适用于执行应用程序控制策略、 满足软件限制合规要求或防止未签名或不受信任的二进制文件执行的场景。 适用于涉及 AppLocker、应用程序白名单、软件限制或可执行文件控制的请求。
extracting-windows-event-logs-artifacts
使用 Chainsaw、Hayabusa 和 EvtxECmd 提取、解析和分析 Windows 事件日志(EVTX),以检测横向移动、持久化和权限提升。
extracting-memory-artifacts-with-rekall
使用 Rekall 内存取证框架分析内存转储,检测进程空洞化(process hollowing)、通过 VAD 异常注入的代码、隐藏进程和 rootkit。应用 pslist、psscan、vadinfo、malfind 和 dlllist 等插件从 Windows 内存镜像中提取取证工件。适用于应急响应内存分析场景。
extracting-browser-history-artifacts
从 Chrome、Firefox 和 Edge 中提取并分析浏览器历史记录、Cookie、缓存、下载记录和书签,以获取用户网络活动的取证证据。
detecting-fileless-malware-techniques
检测和分析完全在内存中运行的无文件恶意软件,这类恶意软件利用 PowerShell、 WMI、.NET 反射、注册表存储载荷和离地攻击二进制文件(LOLBins), 不在磁盘上写入传统可执行文件。适用于无文件威胁检测、内存恶意软件调查、 LOLBin 滥用分析或 WMI 持久化检查等请求。
detecting-fileless-attacks-on-endpoints
检测完全在内存(RAM)中执行、不向磁盘写入持久文件的无文件恶意软件和内存攻击, 规避传统杀毒软件。适用于为 PowerShell 攻击、反射式 DLL 注入、WMI 持久化和注册表驻留恶意软件 构建检测规则的场景。
deploying-ransomware-canary-files
使用 Python watchdog 库在关键目录中部署并监控勒索软件诱饵文件(Canary File),实现实时文件系统事件检测。 将策略性命名的诱饵文件(模拟高价值目标,如财务记录、凭据、数据库导出)放置在勒索软件通常优先枚举的 目录中,监控对诱饵文件的任何读取、修改、重命名或删除操作,并在检测到交互时通过 Email、Slack Webhook 或 Syslog 触发即时告警,在完整加密开始前提供早期预警。