设置程序开机自启动的几种方法

PixPin_2026-04-11_16-16-06

shell:startup 全解构:底层原理 + 依赖文件 + 完整调用逻辑链路

一、基础定义

shell:xxx 属于 Windows Shell 协议(Shell Folder 命名空间)shell:startup 是系统内置的壳路径标记,用来快速寻址「当前用户个人开机启动目录」,并非系统自带 exe 程序,是 Windows 资源管理器解析的协议字符串。

1、底层原理分层解构

1.1 注册表底层映射(根源)

Windows 将所有 shell: 前缀的路径名称,统一注册在注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
  • Startup 键值:%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  • Common Startup(所有用户)对应公共启动文件夹

配套实时生效项(User Shell Folders,动态加载优先级更高): HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders 系统开机、资源管理器初始化时,Explorer 优先读取该项,确定真实物理磁盘路径。

1.2 shell 协议解析机制

  1. Win+R 运行窗口归属进程:explorer.exe(Windows 资源管理器)
  2. 输入 shell:startup → 发送字符串给 explorer 的协议解析模块
  3. explorer 检索注册表内 Startup 对应的真实物理路径
  4. 自动调用 ShellExecuteEx API 打开该文件夹目录窗口

1.3 文件夹 “开机自启” 执行底层原理

自启行为不由文件夹本身执行程序,整套执行主体是 Userinit.exe → Explorer.exe 登录加载链路

  1. 用户输入密码登录成功 → Winlogon.exe 调用 userinit.exe
  2. userinit 完成用户配置文件加载、环境变量挂载后,启动主进程 explorer.exe(桌面、任务栏宿主)
  3. explorer 初始化阶段内置一段逻辑:遍历 Startup 目录内所有 .lnk 快捷方式、可执行文件、脚本
  4. 依次调用 CreateProcess 加载目录内文件,实现开机自动运行

核心本质:Startup 文件夹只是explorer 的开机遍历扫描目录,文件夹无执行能力,执行载体是桌面进程 explorer。

2、全量依赖文件 & 进程清单

2.1 核心进程依赖

表格

进程 作用
winlogon.exe 用户登录认证总入口,触发登录后初始化流程
userinit.exe 加载用户注册表配置、用户目录环境、拉起 explorer
explorer.exe 解析 shell 协议、打开文件夹、扫描启动目录、加载自启程序
shell32.dll 提供 Shell 文件夹解析、路径转换、快捷方式解析核心 API

2.2 系统文件依赖

  1. shell32.dll 最核心依赖:封装了 SHGetFolderPathSHGetKnownFolderPath 两个关键 API,负责把 shell:startup 翻译成真实磁盘路径。
  2. user32.dll:运行窗口窗体管理、消息响应
  3. explorerframe.dll:文件夹窗口渲染、目录浏览功能
  4. shortcut.dll:解析 Startup 目录内 lnk 快捷方式目标路径、参数、工作目录

2.3 磁盘目录本体文件

  • 目录实体:%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
  • 目录配置元数据:由系统隐藏的 desktop.ini 管控文件夹图标、本地化名称属性

3、完整逻辑链路(两段链路:①打开文件夹链路 ②开机自启执行链路)

链路 A:运行框输入 shell:startup → 打开文件夹(截图对应行为)

用户按下 Win+R → 弹出运行对话框(隶属于explorer进程)
↓
输入 shell:startup 点击确定
↓
explorer 调用 SHGetKnownFolderPath(shell32.dll)
↓
读取HKCU注册表User Shell Folders内Startup真实物理路径
↓
调用ShellExecute打开该文件目录窗口
↓
explorerframe.dll渲染文件夹视图,展示内部所有文件

链路 B:放入文件后,系统开机自动启动的完整链路

系统开机 → SMBIOS初始化 → 内核加载 → winlogon.exe启动登录界面
↓
用户登录校验通过 → LSASS完成身份凭证核验
↓
winlogon 启动 userinit.exe
↓
userinit:加载用户注册表配置单元、挂载%USERPROFILE%用户目录、加载环境变量
↓
userinit 启动 explorer.exe 并退出自身进程
↓
explorer初始化流程:加载桌面、壁纸、任务栏
↓
explorer内置遍历逻辑:读取 Startup 文件夹全部条目
↓
shortcut.dll解析每个lnk快捷的目标程序路径、启动参数、管理员权限标记
↓
explorer调用CreateProcess创建对应进程,完成开机自启
↓
桌面加载完毕,自启程序后台/前台运行

4、关键补充机制与限制

4.1 执行权限限制

Startup 内程序默认继承 explorer 的权限(普通用户权限) 若程序需要管理员权限运行,仅放入该文件夹会启动失败,原因:UAC 弹窗会被登录流程阻塞,无法交互提权。

4.2 执行时机

仅在用户账户登录完成后执行;系统进入锁屏、开机未登录状态不会触发执行。

4.3 公共启动目录对照

shell:common startup 注册表对应公共用户配置,所有本机账户登录都会加载,修改需要管理员权限写入文件。

4.4 故障点对应

  1. shell:startup 打不开 → shell32.dll 损坏 / 注册表 Shell Folders 键值被篡改
  2. 文件夹内程序不自启 → explorer 被安全软件劫持、目录权限被系统锁死、lnk 快捷损坏
  3. 恶意软件利用点:病毒写入 Startup 目录实现持久化驻留,杀毒软件会监控该目录文件写入行为

5、极简总结

  1. shell:startup = shell32.dll 通过注册表映射的路径别名,不是程序;
  2. 打开文件夹依靠 explorer+shell32 的路径解析 API;
  3. 开机自启的真正执行者是桌面进程 explorer,文件夹只是被扫描的目标目录;
  4. 整条链路从上到下:登录进程 (winlogon)→初始化 (userinit)→桌面主程序 (explorer)→解析目录文件启动程序。

PixPin_2026-04-11_16-27-34

shell:startup 配套排查命令、行为监控、安全加固完整方案

一、快速排查命令集(CMD/PowerShell,区分普通权限 / 管理员权限)

1. 读取 Startup 真实物理路径

CMD

:: 当前用户Startup路径
echo %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup

:: 所有用户公共Startup路径
echo %PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\StartUp

PowerShell

# 当前用户目录
[Environment]::GetFolderPath('Startup')
# 公共启动目录
[Environment]::GetFolderPath('CommonStartup')

2. 查询注册表映射(验证 shell:startup 寻址源头)

CMD

:: 查询动态优先加载项 User Shell Folders
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Startup

:: 查询静态备选 Shell Folders
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Startup

⚠️优先级:User Shell Folders > Shell Folders,恶意程序常篡改此处路径劫持启动目录。

3. 列出目录内全部自启文件(含快捷方式目标解析)

PowerShell(推荐,可直接看到 lnk 指向程序)

$startupPath = [Environment]::GetFolderPath('Startup')
Get-ChildItem $startupPath -Recurse | Select-Object Name,FullName,Length,LastWriteTime

# 解析所有快捷方式真实目标
$wsh = New-Object -ComObject WScript.Shell
Get-ChildItem "$startupPath\*.lnk" | ForEach-Object {
    $link = $wsh.CreateShortcut($_.FullName)
    [PSCustomObject]@{
        ShortcutName = $_.Name
        TargetPath   = $link.TargetPath
        Arguments    = $link.Arguments
        WorkingDir   = $link.WorkingDirectory
    }
}

4. 校验目录权限(防止权限篡改导致程序无法启动)

icacls "$([Environment]::GetFolderPath('Startup'))"

5. 快速测试自启是否生效

新建简单批处理 Startup_Test.bat,放入目录:

@echo off
echo Startup目录启动测试 >> %USERPROFILE%\startup_log.txt
time /t >> %USERPROFILE%\startup_log.txt

注销重登录,查看用户目录下 startup_log.txt 判断链路是否正常执行。


二、行为监控方案(追踪文件夹访问、文件新增、explorer 扫描动作)

方案 1:Sysinternals Process Monitor(Procmon,最精准)

监控配置步骤

  1. 过滤规则设置:
    • Column: Path → Contains → Startup
    • 追加进程过滤:explorer.exe
  2. 重点观测事件:
    • CreateFile:文件新增(木马写入持久化)
    • QueryDirectory:explorer 登录阶段遍历扫描目录(核心自启链路信号)
    • CreateProcess:目录内程序被拉起瞬间

关键特征:用户登录完成后,explorer 会批量触发 QueryDirectory 读取 Startup 目录,这就是自启触发源头。

方案 2:PowerShell 持续监控文件夹变更

$watcher = New-Object System.IO.FileSystemWatcher
$path = [Environment]::GetFolderPath('Startup')
$watcher.Path = $path
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true

# 新增/修改/删除事件回调
Register-ObjectEvent $watcher Created -Action {
    Write-Host "【新增文件】$($eventArgs.FullPath)"
}
Register-ObjectEvent $watcher Deleted -Action {
    Write-Host "【删除文件】$($eventArgs.FullPath)"
}
Write-Host "正在监控Startup目录文件变更,关闭窗口停止监控"
while($true){Start-Sleep 1}

运行后,任何程序向启动文件夹放入文件都会实时告警,适合查杀恶意持久化。

方案 3:审计策略(系统自带,永久日志留存,等保合规推荐)

  1. 打开「本地安全策略 secpol.msc」
  2. 本地策略 → 审核策略 → 审核对象访问:启用【成功 + 失败】
  3. 打开文件夹属性 → 安全 → 高级 → 审核 → 添加当前用户
  4. 添加审核项:遍历文件夹 / 写入 / 创建文件 / 删除 配置完成后,所有对 Startup 目录的读写行为都会记录在 安全事件日志(Event ID 4663)。

三、常见故障定位清单

故障 1:Win+R 输入 shell:startup 提示找不到文件夹

排查顺序:

  1. 执行注册表查询命令,确认Startup键值是否被清空、篡改;
  2. 检查物理目录是否被手动删除;
  3. 修复命令(管理员 CMD)
md "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"

故障 2:文件夹内快捷方式开机不自动运行

  1. 确认程序不需要管理员权限(UAC 提升程序无法通过 Startup 自启);
  2. 使用上面 PowerShell 脚本校验 lnk 快捷方式是否损坏、目标路径不存在;
  3. 安全软件 / EDR 拦截:在 Procmon 查看是否出现ACCESS DENIED
  4. explorer 异常退出:部分优化软件禁用 explorer 启动目录扫描逻辑。

故障 3:恶意程序劫持

典型篡改手段:

  1. 修改注册表User Shell Folders\Startup指向病毒自定义目录;
  2. 静默写入恶意 lnk;
  3. 替换目录内正常快捷方式。

巡检基线:定期对比注册表路径与物理目录是否一致。


四、安全加固方案(抵御持久化木马,适合办公 / 服务器终端)

加固 1:锁定目录写入权限(推荐)

管理员权限执行:

icacls "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup" /inheritance:r
icacls "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup" /grant %username%:(RX)

效果:当前用户只能读取、不能新建 / 修改文件,程序无法写入实现持久化;

注意:后续需要添加合法自启项时,先临时放开权限。

加固 2:监控注册表保护

使用组策略 / EDR 监控注册表路径: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders 防范 Startup 路径被恶意重定向。

加固 3:区分自启方案选型(安全最佳实践)

推荐方案(可控、支持 UAC 提权):任务计划程序 Task Scheduler ❌ 高危方案:过度依赖 shell:startup 目录(无日志、易被恶意利用)

加固 4:建立基线巡检脚本

定期自动导出目录内所有快捷方式清单,与历史基线对比,发现新增未知文件立即告警。

五、延伸底层取证提示

应急响应排查恶意样本时优先级顺序:

  1. 检查User Shell Folders注册表是否被篡改
  2. 导出 Startup 内所有 lnk 目标路径
  3. Procmon 日志回溯文件夹写入行为
  4. 结合安全审计日志定位恶意进程

PixPin_2026-04-11_16-35-00

PixPin_2026-04-11_17-01-45

命令 对应真实路径 描述
shell:startup C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 当前用户的启动文件夹,放置在这里的程序将在用户登录时自动启动。
shell:Common Startup C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 所有用户共享的启动文件夹,放置在这里的程序将在任何用户登录时自动启动。
shell:desktop C:\Users\Administrator\Desktop 当前用户的桌面文件夹。
shell:documents C:\Users\Administrator\Documents 当前用户的文档文件夹。
shell:downloads C:\Users\Administrator\Downloads 当前用户的下载文件夹。
shell:pictures   当前用户的图片文件夹。
shell:music   当前用户的音乐文件夹。
shell:videos   当前用户的视频文件夹。
shell:programs   当前用户的开始菜单程序文件夹。
shell:Common Documents   所有用户共享的文档文件夹。
shell:Common Desktop   所有用户的桌面文件夹。
shell:run   打开“运行”对话框。
shell:controlpanel   打开控制面板。
shell:network   打开网络位置。
shell:system   打开系统文件夹。
shell:taskschd   打开任务计划程序。

 

命令 对应目录 说明
shell:startup %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup 当前用户的启动文件夹,放置在这里的程序将在用户登录时自动启动。
shell:Common Startup C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 所有用户共享的启动文件夹,放置在这里的程序将在任何用户登录时自动启动。
shell:desktop %USERPROFILE%\Desktop 当前用户的桌面文件夹。
shell:documents %USERPROFILE%\Documents 当前用户的文档文件夹。
shell:downloads %USERPROFILE%\Downloads 当前用户的下载文件夹。
shell:pictures %USERPROFILE%\Pictures 当前用户的图片文件夹。
shell:music %USERPROFILE%\Music 当前用户的音乐文件夹。
shell:videos %USERPROFILE%\Videos 当前用户的视频文件夹。
shell:programs %APPDATA%\Microsoft\Windows\Start Menu\Programs 当前用户的开始菜单程序文件夹。
shell:Common Documents C:\ProgramData\Documents 所有用户共享的文档文件夹。
shell:Common Desktop C:\Users\Public\Desktop 所有用户的桌面文件夹。
shell:run N/A 打开“运行”对话框。
shell:controlpanel N/A 打开控制面板。
shell:network N/A 打开网络位置。
shell:system N/A 打开系统文件夹。
shell:taskschd N/A 打开任务计划程序。

设置程序开机自启动的几种方法:

方法一:(操作开机启动文件夹)

【Win + R】 打开【运行】,输入:PixPin_2026-04-11_17-01-45

shell:startup//用户自动启动的的目录

shell:Common Startup//系统自动启动的的目录

维度 shell:startup(当前用户) shell:Common Startup(公共启动)
路径 C:\Users\%USERNAME%\AppData\Roaming\... C:\ProgramData\Microsoft\Windows\...
用户 统所有用
通用户权 (User Level) 管理员权 (Admin Level)
 (用户意修)  (受系统)
 (微信、输)  (件)
shell:命令 对应路径
shell:startup C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
shell:Common Startup C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

详细技术分析

路径与环境变量逻辑

  • shell:startup (当前用户启动)
    • 物理路径C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    • 逻辑解析:路径中包含 %USERNAME%(当前用户名)。Windows 在加载用户配置文件后,会专门扫描该用户目录下的这个文件夹。
    • 数据隔离:每个用户(如 Administrator, Guest, UserA)都有自己独立的 AppData 目录,互不干扰。
  • shell:Common Startup (公共启动)
    • 物理路径C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
    • 逻辑解析:路径指向 C:\ProgramData,这是一个隐藏的系统级目录,用于存放所有用户共享的应用数据。
    • 数据共享:无论谁登录这台电脑,系统都会扫描这个文件夹。

权限控制逻辑

这是两者最本质的区别,决定了谁能往里面放东西:
  • 当前用户 (shell:startup)
    • 权限:当前登录用户对该文件夹拥有完全控制权
    • 操作:你可以随意创建、删除、修改里面的快捷方式,无需弹窗请求管理员权限(UAC)。
    • 场景:普通软件安装时,默认通常选这里,因为它不需要打扰用户进行提权操作。
  • 公共启动 (shell:Common Startup)
    • 权限:该文件夹的所有者通常是 SYSTEM 或 Administrators 组。普通用户默认只有“读取”权限,没有“写入”权限。
    • 操作:如果你想往这里放一个快捷方式,Windows 会弹出 用户账户控制 对话框,要求你确认管理员权限。
    • 场景:只有安装程序(Installer)或管理员手动操作时才会用到这里。

启动加载逻辑

  • 加载顺序:通常在用户登录进入桌面环境后,Explorer.exe 会同时扫描这两个位置。
  • 执行身份
    • 放在 shell:startup 里的程序,以当前用户的身份运行。
    • 放在 shell:Common Startup 里的程序,虽然也是随用户登录启动,但它依然以当前登录的那个用户身份运行(除非程序内部调用了提权),但它会对每一个登录的用户生效。

🛠️ 实际应用场景对比

什么时候用 shell:startup?

  • 你下载了一个网易云音乐,希望每次你自己登录电脑时它自动打开,但不希望影响用这台电脑的其他人(比如你的家人)。
  • 你写了一个简单的 Python 脚本辅助自己的工作,只需要在你自己的账户下运行。

什么时候用 shell:Common Startup?

  • 你是公司的 IT 管理员,部署了一台公共电脑,希望无论谁登录,都必须先启动公司的 VPN 客户端或监控软件。
  • 安装企业级杀毒软件,需要确保系统中没有任何死角,所有账户登录后防护都必须到位。

  • shell:startup = 私有空间(我的电脑我做主,不需要管理员权限)。
  • shell:Common Startup = 公共空间(牵一发而动全身,必须管理员点头)。

一份关于 shell:startup 与 shell:Common Startup 的深度技术分析报告。
这两个路径虽然都用于管理 Windows 的开机自启动项,但在作用域(Scope)访问控制列表(ACL)以及权限继承上有着本质的区别。

📊 核心技术对比分析表

表格
 
分析维度 shell:startup(当前用户启动) shell:Common Startup(公共启动)
对应物理路径 C:\Users\<用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
作用范围 单用户级。仅对当前登录的特定用户生效。 系统级。对登录该计算机的所有用户生效。
基础权限要求 标准用户权限。用户对自己目录拥有完全控制权。 管理员权限。写入该目录通常需要 UAC 提权。
安全性等级 较低。容易被当前用户下的恶意软件篡改或植入。 较高。受系统保护,普通权限的病毒难以写入。
典型用途 用户个性化软件(如:微信、输入法、网盘客户端)。 系统级服务、后台守护进程(如:杀毒软件、硬件驱动面板)。

🔍 深度解析:权限及关联嵌套权限关系

这是两者最本质的技术区别,涉及 Windows 的访问控制列表机制。

shell:startup (用户级) 的权限逻辑

  • 所有权:该文件夹归当前用户所有(例如 Administrator)。
  • 权限继承:继承自父文件夹 Roaming 或 Start Menu
  • ACL 设置
    • 用户:拥有完全控制权限。这意味着当前用户可以随意创建、删除、修改该文件夹内的快捷方式,无需弹出 UAC 提示框。
    • SYSTEM/管理员:通常也有完全控制权限,但在日常运行中,这是用户的“私有领地”。
  • 嵌套关系
    • 如果用户 A 登录,系统只扫描 C:\Users\A\...\Startup
    • 如果用户 B 登录,系统只扫描 C:\Users\B\...\Startup
    • 结论:数据是隔离的,互不干扰。

shell:Common Startup (公共级) 的权限逻辑

  • 所有权:该文件夹归 SYSTEM 或 Administrators 组所有。
  • 权限继承:继承自 C:\ProgramData
  • ACL 设置
    • 用户:通常只有读取和执行权限。
    • 管理员:拥有完全控制权限。
  • 写入逻辑(关键差异)
    • 当一个安装程序(Installer)试图将快捷方式放入 shell:Common Startup 时,由于标准用户没有写入权限,Windows 会触发用户账户控制弹窗,要求提升权限。
    • 嵌套关系:这是一个“汇聚点”。无论哪个用户登录,Windows 启动管理器都会去扫描这个公共目录。

⚖️ 安全性与攻击面分析

在网络安全和取证分析中,这两个路径是持久化攻击的常见目标:

针对 shell:startup 的攻击

  • 风险:如果一个恶意脚本获得了当前用户的权限(例如通过钓鱼邮件运行的 PowerShell 脚本),它可以直接向 shell:startup 写入恶意快捷方式。
  • 后果:下次该用户开机,恶意程序自动运行。
  • 防御:很难防御,因为这是用户目录,杀毒软件通常不会拦截用户对自己目录的写入操作。

针对 shell:Common Startup 的攻击

  • 风险:攻击者必须首先通过提权漏洞获取管理员权限,才能写入此目录。
  • 后果:这是“最高级别”的持久化。不仅当前用户开机运行,新建的任何用户、或者访客登录时,恶意程序都会运行。
  • 防御:Windows 的 UAC 机制是第一道防线。

🛠️ 实际应用建议

  • 如果你是开发者
    • 开发普通桌面应用(如记事本工具),请使用 shell:startup(当前用户),避免骚扰用户(不触发 UAC)。
    • 开发企业级管理软件或安全软件,请使用 shell:Common Startup,确保无论谁登录电脑,软件都在运行。
  • 如果你是系统管理员
    • 想要给全公司电脑部署一个开机脚本?通过组策略配置公共启动文件夹或直接操作 C:\ProgramData\... 路径。
  • 如果你在排查病毒
    • 务必检查这两个文件夹。很多顽固病毒会同时在两个地方留下后门,你需要删除 Common Startup 里的病毒文件时,记得右键选择“以管理员身份运行”文件资源管理器,否则可能无法删除。

一份关于 shell:startup 与 shell:Common Startup 的深度技术分析报告。
这两个命令虽然最终效果都是实现程序开机自启,但在 Windows 内部机制中,它们代表了完全不同的作用域权限层级安全边界

📊 核心技术对比概览表

表格
 
维度 shell:startup(当前用户启动) shell:Common Startup(公共启动)
对应物理路径 C:\Users\<用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
作用域 用户级:仅对当前登录用户生效。 系统级:对所有登录该计算机的用户生效。
权限要求 标准用户权限:用户对自己目录拥有完全控制权。 管理员权限:写入该目录通常需要 UAC 提权。
安全性 较低:容易被当前用户环境下的恶意软件篡改。 较高:受系统完整性机制保护,难以被普通权限程序修改。
典型用途 用户个性化软件(如:微信、输入法、网盘)。 系统级服务、驱动助手(如:杀毒软件、显卡控制面板)。

🔍 深度解析:权限及关联嵌套权限关系

这是两者最本质的区别,涉及 Windows 的访问控制列表机制。

shell:startup (用户级) 的权限逻辑

  • 所有权:该文件夹归当前用户所有(例如 Administrator 或 UserA)。
  • 权限继承:继承自父文件夹 Roaming 或 Start Menu
  • ACL设置
    • 用户:拥有完全控制权限。这意味着当前用户可以随意创建、删除、修改该文件夹内的快捷方式,无需弹出 UAC 提示框。
    • SYSTEM/管理员:通常也有完全控制权限,但在日常运行中不干预。
  • 关联嵌套:如果用户配置文件损坏,或者管理员在更高层级(如 C:\Users)强制修改了 ACL 继承,可能会导致用户无法写入自己的启动项,但这种情况较少见。

shell:Common Startup (公共级) 的权限逻辑

  • 所有权:该文件夹归 SYSTEM 或 Administrators 组所有。
  • 权限继承:继承自 C:\ProgramData
  • ACL设置
    • SYSTEM/管理员组:拥有完全控制权限。
    • 普通用户/认证用户:通常只有读取 & 执行权限。
  • 关联嵌套权限关系
    • 写入阻断:当一个标准用户(Standard User)尝试向 Common Startup 写入文件时,NTFS 文件系统会拒绝访问。
    • UAC提权:只有当程序以“管理员身份运行”时,才能修改此目录。
    • 虚拟化:在某些旧应用兼容性场景下,如果程序试图写入此目录但无权限,Windows 可能会将其重定向到用户的虚拟存储区,导致“看似写入成功,实则未生效”的假象。

🛡️ 安全性与攻击面分析

从网络安全的角度来看,这两个路径是持久化攻击的重点目标:
  • shell:startup (提权跳板)
    • 由于普通用户拥有完全控制权,恶意软件一旦在当前用户权限下运行,可以轻易地将自己写入此目录。
    • 风险:用户每次登录都会自动触发恶意代码。
  • shell:Common Startup (系统级驻留)
    • 这是高价值目标。攻击者若能写入此目录,意味着攻击者已经获取了管理员权限
    • 风险:无论哪个用户登录(包括访客),恶意程序都会运行,极难清除。

  • 如果你是开发者:一般软件默认应使用 shell:startup(当前用户),除非是杀毒软件或硬件驱动等必须全局运行的程序,才申请写入 shell:Common Startup
  • 如果你是系统管理员:排查病毒时,既要检查当前用户的启动项,更要重点检查 Common Startup,因为后者往往隐藏着更深层的系统级威胁。

把要开机自启的【程序文件】或【快捷方式】复制到打开的窗口中即可。

方法二:(添加注册表)

在Win + R 【运行】中输入【regedit】,打开注册表。

打开路径(可以直接复制路径打开):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

在空白处【右键】>【新建】>【字符串值】。

双击【新值 #1】。

在打开的窗口中输入要开机自启动的【程序路径】即可。

启用或禁用启动项:

以上两种方法添加的启动项都可以启用或禁用:

Win10系统可在【任务管理器】>【启动】中操作。

Win7系统可在【msconfig】>【启动】中操作。

 

要设置程序在 Windows 开机时自动启动,可以按照以下步骤进行操作:

  1. 使用快捷键 Win + R 打开“运行”对话框,然后输入 "shell:startup",并点击 "确定" 打开启动文件夹。

  2. 在启动文件夹中,右键单击空白处,选择 "新建" -> "快捷方式"。

  3. 在弹出的快捷方式创建向导中,点击 "浏览" 按钮,找到你想要设置开机自启动的程序的可执行文件(通常是以 .exe 结尾的文件),选中该文件后点击 "下一步"。

  4. 输入一个描述性的名称,例如程序的名称,然后点击 "完成" 完成创建快捷方式。

  5. 关闭文件资源管理器窗口,然后重新启动计算机。

重新启动后,该程序应该会自动启动。

 

还有其他几种设置程序开机自启动的方法:

  1. 使用任务计划程序:

    • 打开“任务计划程序”(可以通过在开始菜单中搜索并打开)。
    • 在左侧导航栏中,选择“任务计划程序库”。
    • 在右侧窗口中,右键单击空白处,选择“创建基本任务”。
    • 根据向导的指引,设置任务的名称、描述和触发器(选择“开机时”),然后选择要运行的程序或脚本。
    • 完成设置后,重新启动计算机以检查任务是否成功添加并自动启动。
  2. 注册表编辑器:

    • 使用快捷键 Win + R 打开“运行”对话框,输入 "regedit" 并点击 "确定" 打开注册表编辑器。
    • 导航到以下注册表路径:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    • 右键单击右侧窗格中的空白处,选择“新建” -> “字符串值”。
    • 给该字符串值命名,并将其值设置为要启动的程序的完整路径。
    • 关闭注册表编辑器,并重新启动计算机以检查程序是否会自动启动。
  3. 组策略编辑器(仅适用于专业版、企业版和教育版):

    • 使用快捷键 Win + R 打开“运行”对话框,输入 "gpedit.msc" 并点击 "确定" 打开组策略编辑器。
    • 导航到以下路径:计算机配置 -> Windows 设置 -> 脚本(启动/关机)。
    • 双击“启动”或“关机”选项,然后选择“启用”。
    • 点击“添加”并指定要启动的程序的脚本路径。
    • 重新启动计算机以检查程序是否会自动启动。

 

  1. 使用系统配置工具:

    • 使用快捷键 Win + R 打开“运行”对话框,输入 "msconfig" 并点击 "确定" 打开系统配置工具。
    • 选择“启动”选项卡,然后勾选要启动的程序的复选框。
    • 点击“应用”和“确定”,然后重新启动计算机以检查程序是否会自动启动。

 

  1. 使用快速访问菜单:

    • 在任务栏上找到程序的快捷方式图标。
    • 右键单击该图标,并选择“属性”。
    • 在属性窗口中,选择“快速访问菜单”选项卡。
    • 勾选“在登录时打开此程序”选项。
    • 点击“应用”和“确定”,然后重新启动计算机以检查程序是否会自动启动。
  2. 使用启动文件夹:

    • 按下 Win + R 快捷键,打开“运行”对话框。
    • 输入 "shell:startup" 并点击 "确定" 打开启动文件夹。
    • 将要启动的程序的快捷方式拖放到启动文件夹中。
    • 重新启动计算机以检查程序是否会自动启动。
  3. 使用登录项目管理器:

    • 按下 Ctrl + Alt + Del 快捷键,选择“任务管理器”。
    • 在任务管理器中,选择“启动”选项卡。
    • 在启动项目列表中,找到要启动的程序,并右键单击它。
    • 选择“启用”选项。
    • 重新启动计算机以检查程序是否会自动启动。
  1. 使用命令行工具:

    • 打开命令提示符(按下 Win + R,输入 "cmd",然后点击 "确定")。
    • 输入 "shell:startup",然后按回车键打开启动文件夹。
    • 将要启动的程序的快捷方式复制到启动文件夹中。
    • 重新启动计算机以检查程序是否会自动启动。
  2. 使用启动服务:

    • 打开服务管理器(按下 Win + R,输入 "services.msc",然后点击 "确定")。
    • 在服务列表中找到要启动的程序相关的服务。
    • 右键单击该服务,选择“属性”。
    • 在属性窗口中,将启动类型设置为“自动”。
    • 点击“应用”和“确定”,然后重新启动计算机以检查程序是否会自动启动。
  3. 使用注册表(只适用于高级用户):

    • 打开注册表编辑器(按下 Win + R,输入 "regedit",然后点击 "确定")。
    • 导航到以下注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    • 右键单击右侧窗格中的空白处,选择“新建” -> “字符串值”。
    • 给该字符串值命名,并将其值设置为要启动的程序的完整路径。
    • 关闭注册表编辑器,并重新启动计算机以检查程序是否会自动启动。
  1. 使用命令行工具:

    • 打开命令提示符或 PowerShell。
    • 输入 "wmic startup list full" 命令,以获取当前注册表中的所有开机自启动项的详细信息。
    • 检查输出,找出不需要的启动项。
    • 对于要禁用的启动项,可以使用 "wmic startup where name='启动项名称' call delete" 命令来删除该启动项。
  1. 检查注册表:

    • 按下 Win + R,输入 "regedit",然后点击 "确定" 打开注册表编辑器。
    • 导航到以下路径:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 和 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。
    • 在这些位置下,你可以看到注册表中的开机自启动项。
    • 右键单击要删除的启动项,并选择 "删除"。
  1. 使用组策略编辑器:使用组策略编辑器可以禁止或限制用户在登录时运行某些程序或脚本等。具体操作如下:

    • 按下 Win + R,输入 "gpedit.msc",然后点击 "确定" 打开组策略编辑器。
    • 导航到以下路径:计算机配置 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项
    • 在右侧窗口中找到 "用户帐户控制: 不允许在用户登录时启动应用程序" 选项,并将其设置为 "已启用"。
    • 点击 "应用" 和 "确定",然后重新启动计算机以应用更改。
  1. 使用 PowerShell 脚本:你可以编写 PowerShell 脚本来列出、禁用或删除开机启动项。例如,以下命令可列出当前用户的所有开机启动项: Get-CimInstance -Class Win32_StartupCommand | Select-Object Name, Command, Location

 

posted @ 2024-01-02 08:53  suv789  阅读(6207)  评论(0)    收藏  举报