WinHello故障解决
Windows Hello / PIN 锁死导致无法密码登录的完整排障记录
——一次微软安全策略BUG导致无法登录的恢复实录
全文由我撰写草稿并由ChatGPT优化排版
一、问题起点
背景:
SP8由于电池衰减,在保修期结束之前,申请了一次质保,正常来讲MS会直接给换一台官翻机,硬盘不返还,在换新之前我把自己的1TB SSD拆下,换回了原装256硬盘,计划在换新之后装回硬盘继续使用。
质保流程完成后,收到新机,换回我的1TB SSD,问题发生了,由于硬件发生变化,设备不再被信任,输入PIN登录要求重置PIN,但无法重置和登录……
设备:Surface Pro8
系统:Windows(Microsoft 账户)
用户结构:
Administrator(本地内置管理员,禁用状态)admin(日常主用的Microsoft 账户,目标用户,无法登录)
核心异常现象
在 admin 用户上:
登录页 只显示
Windows Hello 人脸
PIN
由于我日常使用启用了Win Hello,所以完全没有“密码登录”入口
登录行为表现:
人脸识别成功 → 闪一下 → 回到登录页
PIN 提示需要重置 / 新建 → 点击后 转圈,无窗口、无报错
安全模式:
- 仍然要求 PIN,不给密码框
结论(当时尚未完全确认):
登录 UI 已被 Windows Hello 绑定
但 Hello 自身组件已经不可用
→ 形成死锁态
所以我的目的就是,移除Win hello或直接暴露密码框,登录回原系统。
二、第一阶段:确认「不是简单权限 / UI 问题」
1. 通过 PE 获取登录页 NT 权限 Shell,验证是否为 UI 层受限
首先进入 PE 环境,通过常规方式:
使用
cmd替换无障碍程序utilman获取提权cmd在 Windows 登录页 点击无障碍拉起 NT AUTHORITY\SYSTEM 权限的 cmd
如果是MS账号关联导致的普通用户权限不足 / UI 被策略隐藏,
那么在 NT 权限 下应当可以直接解除。
2. 在 NT 权限 Shell 中修改组策略,尝试暴露密码登录入口(失败)
在登录页的 NT 权限 cmd 中:
直接启动
gpedit.msc修改以下策略:
2.1 暴露用户切换入口
计算机配置 → 管理模板 → 系统 → 登录
将
“隐藏快速用户切换的入口”
设置为 “已禁用”
明确暴露“切换用户”,排除“当前登录上下文被强制绑定”的可能
2.2 禁用 Windows Hello / PIN 强制策略
在同一策略树下,执行:
禁用 Windows Hello
禁用 “仅允许使用 PIN 登录”(其实记不清名字了,是这个作用的策略)
完成后重启。
结果:
登录页状态 完全无变化
目标用户 admin:
仍然只有 Windows Hello / PIN
无密码输入框
结论:
即使在 NT 权限下修改本地组策略,
也无法改变 admin 用户的登录方式→ 登录方式已不在 UI / GPO 层控制
三、第二阶段:尝试从 Administrator 用户侧进行干预
1. 在 NT 权限 Shell 中启用内置 Administrator(遇到权限差异)
思路转变:
既然目标用户 admin 已被锁死,
那么先进入 Administrator,再进行修改。
1.1 尝试使用 net user 启用 Administrator(失败)
在 NT 权限 cmd 中执行:
1 | |
结果:
Active状态仍显示 No命令未报错,但未生效
说明:
即便是 SYSTEM / NT 权限 cmd,
在该环境下 net user 行为受限
1.2 使用 PowerShell 成功启用 Administrator
切换至 PowerShell,执行:
Enable-LocalUser -Name "Administrator"
结果:
Administrator 成功启用
可在登录页切换并进入系统
四、第三阶段:在 Administrator 下直接修改目标用户(失败)
1. 使用 net user 修改 admin(失败,8646)
进入 Administrator 桌面后,尝试:net user admin *
结果:
返回错误 8646
提示无权限 / 操作不允许
回到 登录页 NT Shell 再次尝试:
- 同样失败
结论非常明确:
admin为 Microsoft 账户
不受
net user管理不受 Administrator / NT 权限直接控制
2. 注册表层面针对 SID / LogonUI 的修改(仅对 Administrator 生效)
接下来尝试的方向是:
定位
admin的 SID修改:
AuthenticationLogonUICredential Provider相关键值
目标是强制暴露密码登录框
结果:
Administrator 用户:
Windows Hello / PIN 可以被成功关闭
密码登录可见、可用
目标用户 admin:
完全无变化
仍为 Hello / PIN 页面
结论:
目标用户的登录链路 不属于常规注册表控制路径**
五、第四阶段:参考社区方案,尝试 WinRE 下对目标用户操作(失败)
1. 尝试社区方案《在使用 PIN 登录不可用时开启密码登录》
参考帖子:
https://bbs.pcbeta.com/viewthread-2047506-1-1.html
按照该方案实施:
进入 WinRE CMD
在登录页选择目标用户(admin)
输入 Microsoft 账户密码
加载
SOFTWAREHive 并修改
实际执行结果:
成功进入 WinRE CMD
选择目标用户 admin
尝试加载
SOFTWAREHive 时:- 提示 文件被占用
尝试通过非常规方式提权 / 解除占用:
- 仍被占用
结论:
即使进入 WinRE,
MSA 用户相关 Hive 在该阶段仍被锁定
六、第五阶段:清除 PIN 数据(失败)
1. 删除 NGC 目录,验证是否为 PIN 数据阻塞
回到登录页的 NT 权限 Shell,删除如下文件:
C:\Windows\ServiceProfiles\LocalService\AppData\Local\Microsoft\Ngc
结果:
PIN 被清空
目标用户登录页变为:
“需要创建 PIN”
但:
点击“创建 PIN”
仍然 转圈
无窗口、无报错
结论:
NGC 只是 PIN 数据
不是登录方式选择权本身
七、第六阶段:放弃“暴露密码框”,改为“绕过登录选择”(失败)
1. 多次修改 HKLM 下注册表,确认无效
此后尝试:
多个
HKLM下与登录、认证、Hello 相关的键均对 admin 用户不生效
此时可以确认:
继续尝试“让系统给密码框”是死路
八、最终方案:AutoAdminLogon 绕过登录选择(成功)
1. 思路转变(关键)
不再尝试:
暴露密码框
修复 Hello
干预 Credential Provider
而是:
让 Winlogon 直接完成登录
2. 通过注册表配置 AutoAdminLogon
在 Administrator 下:
路径:
**HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon**
配置:
| 键名 | 类型 | 值 |
|---|---|---|
| AutoAdminLogon | 字符串值 | 1 |
| DefaultUserName | 字符串值 | admin(目标用户名) |
| DefaultPassword | 字符串值 | 明文密码 |
重启。
3. 结果
系统 直接登录 admin
完全绕过:
Windows Hello
PIN
登录 UI
用户态完整、数据未受损
九、后续验证
成功进入系统后:
手动重新创建 PIN
重新配置人脸识别
删除修改和新建的注册表条目
重启复测:
登录正常
Hello / PIN 功能恢复可用
十、问题定性与结论
本次问题并非权限、策略或配置错误,而更可能是 Microsoft 账户(MSA)与 Windows Hello 在 PIN 重置流程中的实现缺陷。
在目标用户 admin 上,点击 重置 / 修改 PIN 时,系统未拉起 Microsoft 账户验证弹窗,但登录状态已被推进至 “仅允许通过 Windows Hello 登录”。由此形成死锁:
系统要求使用 Hello → Hello 又依赖 PIN / MSA 验证 →
验证流程未被调用 → 登录无法继续,也无法回退到密码。
在该状态下:
Password Credential Provider 不再被枚举
组策略、注册表、WinRE、NT 权限修改均对目标用户无效
网上常见“恢复密码登录”的通用方案不再适用
值得讽刺的是,微软的这类安全设置并未真正阻止任何具备技术能力的访问行为:在整个过程中,我可以通过完整的渗透测试手段获取系统内全部数据,却唯独无法以“合法用户”的身份进入自己的桌面进行正常使用。
最终解决方式并非“暴露密码框”,而是绕过登录选择流程本身:
通过 AutoAdminLogon 直接由 Winlogon 使用明确凭据完成登录,避开已进入死锁态的 Windows Hello 登录链路。
这是在不破坏用户态数据前提下,唯一可控且可逆的解法。
十一、尾声
这篇blog写下,也希望能帮助到像我一样,被微软的各式各样bug坑害的用户,把我全部的错误尝试写下,也是希望能帮助其他人避免一些错误操作或从中发现更有效的解法。
最后回到那句经典的话:你可能是正版软件的受害者。