两个启动文件夹
Windows 启动文件夹分用户级与全局级两处,登录时自动执行其中的快捷方式与脚本。快捷方式的真实目标、脚本内容与文件签名,是快速定性的三个入手点。
名称会骗人
恶意快捷方式常命名为 OneDrive、输入法或公司软件:必须展开 TargetPath 与 Arguments 才看得到真实目标,只看文件名必然误判。
基本信息
| 用户级 | %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup |
|---|---|
| 全局级 | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp |
| 常见形态 | .lnk 快捷方式、.bat/.vbs/.ps1 脚本 |
| 辅助入口 | 任务管理器启动项、注册表 Run 键 |
| 检查要点 | 展开快捷方式目标路径与脚本内容 |
| 权限要求 | 查看全局目录与系统备份需管理员 |
典型使用场景
- 排查登录后自动执行的异常程序
- 定位伪装成常用软件的自启项
- 与 Run 键、计划任务清单交叉核对
- 清理后验证不再自动执行
- 复盘时说明启动链覆盖范围
列出启动项并展开目标
列出启动项并展开目标
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -Force
Get-ChildItem 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp' -Force
$sh = New-Object -ComObject WScript.Shell
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\*.lnk" | ForEach-Object { $sh.CreateShortcut($_.FullName).TargetPath }
Get-ChildItem 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\*.lnk' | ForEach-Object { $sh.CreateShortcut($_.FullName) | Select-Object FullName,TargetPath,Arguments }输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| 文件名 | 启动项名称 | 名称合法不代表目标合法 |
| TargetPath | 快捷方式指向的程序 | 指向临时目录或脚本宿主即为可疑 |
| Arguments | 启动参数 | 出现下载地址或编码参数需立即跟进 |
| 修改时间 | 文件最后改动时间 | 与入侵时间窗对比判断相关性 |
快捷方式必须展开 TargetPath:恶意样本常伪装成 OneDrive、输入法之类熟悉的名字;同时注意 .bat、.vbs、.ps1 需要直接读内容。
全局目录(ProgramData 下)的启动项对全部用户生效,权限更高,也常被巡检忽略。
启动项之间的相互关联
- 启动文件夹中的快捷方式可能被计划任务重新创建
- Run 键与启动文件夹常互为备份,清理要同时进行
- 同一条目可能在多个用户目录下重复出现
- 删除前确认目标文件是否被其他自启项引用
清理与验证
- 把条目与目标文件备份到证据目录
- 删除条目或移动到隔离目录
- 重新登录验证不再自动执行
- 检查其他自启位置是否指向同一程序