前阵子有位同事找我救急:他在VMware Workstation Pro里建了一台Windows 10虚拟机,开机密码存在系统便签里,结果便签被清理,脑子里的记忆也跟着“清理”了。虚拟机里是整整一天的编译环境和一堆工程,重装一遍至少损失一天。这种“密码忘了,虚拟机还在”的情况,在VMware Workstation Pro用户里实在太常见。如果你也遇到一模一样的困境,别急着重装,也别去下那些来路不明的密码字典暴力破解工具——我常用的离线重置方法,通常十分钟内就能把登录密码改掉。
先把话说明白:这里说的“密码破解”,严格讲是“密码恢复”或“密码重置”,适用前提只有一个:这台虚拟机是你自己的,或者你拿到了明确的授权。越线的事别做,这篇文章不教。
1. 先别急着动手:搞清“密码破解”的几种情况和边界
1.1 为什么不推荐在线暴力破解
很多人一听说密码忘了,第一反应是去下载“密码破解字典”,然后对着登录界面反复尝试。这个思路在虚拟机场景下基本是死路一条。
Windows系统普遍有账户锁定策略,默认情况下连续输错多次会自动锁定一段时间,你还没试到字典里的第二十个密码,系统已经不让你继续了。更麻烦的是,Windows登录界面每次失败都要等几秒,如果虚拟机还设置了自动重启,一次非正常关机还可能触发磁盘检查,整个过程又慢又糟心。
在线暴力破解的本质是“猜”,而离线重置的本质是“绕”。密码猜不出来,但存放密码的文件我们拿得到。在VMware Workstation Pro里,虚拟机硬盘就是宿主机上的几个文件,关掉虚拟机,挂上一个维护工具镜像,就能直接修改登录凭据。这比在登录界面硬试靠谱得多。
1.2 密码恢复前的合规前提
每次讲这类操作,我都会先泼一盆冷水:别把它用在不属于你的虚拟机上。
技术本身是中立的,离线重置密码的能力,和物理机上用PE盘重置开机密码、找开锁师傅换锁芯是同一类事情。你家的锁打不开,找师傅来换锁芯是正常的;你拿这个手艺去开别人家的门,那就是另外一回事了。
在公司环境里,虚拟机通常属于业务资产,即使密码忘了、管理员账户进不去,也应该走运维流程或找负责人确认授权,而不是自己偷偷摸摸处理。在家里使用VMware Workstation Pro建虚拟机的人,也请确认这台虚拟机确实由你本人创建和持有。这篇文章的所有操作,默认都满足这个前提。
1.3 方案选型:离线重置、安装介质替换、快照回滚
根据遗忘场景和系统类型,恢复方案主要有这么几类:
| 方案 | 核心原理 | 适用系统 | 耗时 | 风险 |
|---|---|---|---|---|
| 离线修改SAM文件 | 绕过Windows登录,直接改哈希 | Windows各版本 | 约10分钟 | 低,推荐 |
| 替换sethc.exe为cmd.exe | 利用登录前辅助工具弹出命令行 | Windows 7/10/11 | 约15分钟 | 中,操作不当影响系统 |
| GRUB单用户模式 | 进入Linux维护模式重置密码 | Linux各发行版 | 约5分钟 | 低,推荐 |
| VMware快照回滚 | 恢复到密码设置前的状态 | 任意系统 | 约1分钟 | 会丢失快照之后的改动 |
我自己用得最多的是前两种和Linux的GRUB方案。快照回滚虽然快,但前提是你恰好记得在密码设置之前建立了快照,而且能接受丢失这段时间的改动,所以它更多是“后悔药”,不是常规手段。
2. 底层原理:密码在虚拟机里到底是怎么存的
2.1 Windows的SAM文件与NTLM哈希
Windows的本地账户密码并不是明文存放的。系统会把每个账户的用户名、密码哈希、账户状态等信息写入一个叫SAM的文件,路径固定是C:\Windows\System32\config\SAM,同时它也映射到注册表的HKEY_LOCAL_MACHINE\SAM。
你在登录界面输入的密码,会先经过一系列算法变成哈希值,再和SAM里保存的哈希做对比。哈希算法是单向的,理论上很难反推出原密码,所以在线破解难,不是没有道理。
但这里有一个关键点:SAM文件只在系统运行时被占用,如果我们让虚拟机从外部工具启动,不加载Windows,那这个文件就是磁盘上的普通文件。我们可以直接在文件层面修改它,把某个用户的密码哈希清空,或者替换成一个我们知道的新密码哈希。这等于跳过了“必须验证原密码”这层逻辑,直接换锁芯。
需要注意的是,BitLocker卷加密会破坏这套操作。如果虚拟机的Windows系统盘开了BitLocker,外部工具根本读不到明文文件,看到的是一堆密文。这种情况必须先拿到48位恢复密钥,或在Windows内暂停保护。很多人在离线重置时卡住,十有八九就是栽在BitLocker上。
2.2 Linux的shadow文件与哈希算法
Linux的情况比Windows更直接。传统上账户信息存在/etc/passwd,密码哈希存在/etc/shadow,后来出于安全考虑,Shadow文件只有root用户能直接读取和修改。
Shadow文件的每一行是一段记录,大致长这样:
username:$y$j9Txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:18980:0:99999:7:::$y$后面的部分就是密码哈希,算法可能是SHA-crypt、bcrypt或Argon2,具体取决于发行版版本。我们要重置密码,不需要逆推哈希,只需要获得root权限,然后执行passwd 用户名命令重新生成一个新哈希写回去就行。
这也解释了为什么Linux虚拟机密码恢复往往比Windows更简单:Windows有更多安全机制和文件锁,Linux只要能进入单用户模式或紧急维护模式,root权限基本就到手了。
2.3 虚拟机的软硬件可控性是最大优势
在物理机上做这类操作,你需要准备U盘、刻录光盘、设置BIOS启动顺序,搞不好还要拆机。但在VMware Workstation Pro里,这些硬件层面的麻烦全都被虚拟化解决了。
虚拟光驱可以直接挂载一个ISO镜像文件,不用刻盘,不用准备U盘;开机时按一下Esc,或者直接在虚拟机设置里改启动顺序,就能让虚拟机从维护系统启动,比物理机快很多;宿主机的磁盘文件可以随时复制一份作为备份,改坏了还能恢复。更重要的,VMware的快照功能让你可以在动手前建一个快照,操作失败直接回滚,安全边际高得多。
说白了,虚拟机就是“软件定义的计算机”,硬件都靠配置文件表达,这让普通用户也能完成以前只有老手敢碰的系统级操作。
3. 实操:用chntpw离线重置Windows虚拟机登录密码
3.1 准备工作:下载引导ISO并挂载
我用的工具是Offline NT Password & Registry Editor,名字很长,大家一般叫它chntpw。它体积很小,几十兆的ISO,启动后是一个命令行环境,专门用来修改Windows账户密码和注册表配置,官方项目页面可以下载,GitHub上也有镜像。如果不想用这个,Hiren's BootCD PE、SystemRescue等工具套件里也自带chntpw,效果一样。
下载好ISO之后,把它挂到虚拟机上:
- 在VMware Workstation Pro中选中目标虚拟机,点击“编辑虚拟机设置”。
- 在硬件页面选择“CD/DVD (SATA)”。
- 右侧选择“使用ISO映像文件”,浏览指向你下载的维护ISO。
- 勾选“打开电源时连接”。
- 确定,关闭设置窗口。
这一套操作和安装系统时装ISO是同一个逻辑,区别只在于这次挂的是一个“维修工具”。
3.2 引导虚拟机:让光驱排到最前面
挂好ISO后,重启虚拟机。关键一步是让虚拟机从光驱启动。
常见做法是开机时快速按Esc,弹出启动设备菜单,直接选光驱。如果按Esc没反应,按F2进入固件设置,把CD-ROM选项移到启动顺序第一位。VMware Workstation Pro的新版虚拟机如果启用了UEFI固件,有时候Esc进入的启动菜单可能看不到传统光驱选项,这种情况可以点击虚拟机窗口顶部菜单的“虚拟机”——“电源”——“打开电源时进入固件”,在固件里调整。
启动成功后,屏幕会进入chntpw的文本菜单,看到类似“Boot the Offline NT Password & Registry Editor”的选项,直接回车即可。这个过程不需要额外输入什么命令。
3.3 在维护环境中找到系统盘和SAM文件
chntpw启动后,会自动检测虚拟机的硬盘设备,并列出分区信息。屏幕上会显示类似/dev/sda1、/dev/sda2这样的设备列表,并询问哪个是Windows系统所在分区。
选择分区时,最容易出错的是选到EFI系统分区。EFI分区很小,通常只有100MB到几百MB,文件系统是FAT32;真正的Windows系统分区往往是NTFS格式,容量也大得多。如果实在不确定,可以看提示里的分区大小,或者先选一个看起来最像的,进去后如果提示找不到SAM,再退出来换一个。
选定分区后,chntpw会问“Which file has registry files”,默认是/regedit/SAM,直接回车就行。接着系统读取SAM文件,进入主菜单,这时候我们离目标已经很近了。
3.4 选择用户并清空密码
在chntpw主菜单中输入数字1,回车,进入“Edit user data and passwords”子菜单。系统会列出SAM里已有的用户名,你可以直接输入要做处理的账户名,比如Administrator。若不清楚用户名,先输入星号*列出全部账户。
进入账户编辑菜单后,有几个常用选项:
1:清空密码,让账户变成无密码状态。5:设置一个新密码。2:解锁被禁用的账户。
我通常选1清空密码。之后按提示输入q退出,当系统询问是否写入更改时,务必输入y确认。这一步不要跳过,否则前面全是白干。
写入完成后,系统会提示可以重启。此时回到虚拟机设置,把CD/DVD的ISO从维护镜像改回“使用物理驱动器”或直接断开连接,确保下次启动不会再次进入维护工具。
3.5 重启验证与Microsoft账户、PIN的坑
重启虚拟机,看到登录界面后,在密码框直接按回车,一般就能进入系统了。
但有两个坑极容易踩:
第一,如果原账户是Microsoft账户,离线清空本地SAM密码后,系统可能在登录时尝试联网验证账户状态,提示密码错误。这时可以把虚拟机的网络适配器临时断开,再尝试登录,登录成功后再恢复网络。
第二,如果平时登录用的是PIN码,重置密码后PIN会失效,因为PIN和Windows Hello的凭据存储在安全芯片和用户配置中,和SAM密码哈希不是一套体系。系统会提示“由于此设备上的更改,你的PIN不再可用”,让你重新设置PIN。这不是故障,是正常表现,按提示设置新PIN即可。
登录成功后,第一件事就是打开“设置”——“账户”,给当前用户设置一个自己记得住且强度够高的新密码。别让系统一直处于空密码状态,空密码账户在内网环境里和裸奔没什么区别。
4. 备选方案:不装任何工具也能重置Windows密码
4.1 利用Windows安装镜像调出命令行
如果手边没有chntpw镜像,但有Windows安装ISO,也能完成密码恢复。这个方法利用的是Windows安装界面里自带命令行工具。
步骤如下:
- 给虚拟机挂载Windows安装ISO,并设置光驱为第一启动项。
- 启动虚拟机,进入Windows安装界面,此时按
Shift + F10,会弹出命令提示符。 - 命令提示符默认目录可能是安装介质,先执行
dir C:\Windows确认系统盘盘符。UEFI模式下盘符映射和日常环境不同,系统盘不一定是C盘,可能需要在命令行里先执行diskpart、list volume查看卷信息。 - 确认盘符后执行备份替换:
ren C:\Windows\System32\sethc.exe sethc.exe.bak copy C:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe- 关闭命令行,断开ISO镜像,正常重启进入Windows登录界面。
- 连续按5次Shift键,弹出来的不再是粘滞键设置窗口,而是系统权限的命令提示符。
- 在其中执行:
net user administrator 新密码或者针对其他用户名:
net user 用户名 新密码- 关闭窗口,输入新密码登录。
4.2 这个方法的风险与适用边界
说实话,这个方法我只推荐在没别的手段时应急。它有个非常明显的副作用:sethc.exe被替换后,任何人登录Windows之前都能通过连续按5次Shift弹出管理员命令提示符,这是一道明晃晃的后门。处理完密码后,必须第一时间恢复原始文件:
del C:\Windows\System32\sethc.exe ren C:\Windows\System32\sethc.exe.bak sethc.exe另外,这个方法对纯本地账户最有效。如果当前登录的是Microsoft账户,net user命令能改的是本机账户数据库,系统联网验证Microsoft账户后可能出现密码对不上,需要断网登录或改用chntpw清空。现代Windows 11还可能有额外的系统保护机制,比如部分企业镜像会限制辅助功能的启动权限,导致替换后按5次Shift没反应。所以论稳定性和安全性,chntpw仍然是第一选择。
5. Linux虚拟机密码恢复,比Windows还简单
5.1 GRUB单用户模式重置root密码
Linux虚拟机的处理思路和Windows完全不同。由于Linux本身开放引导过程,我们能在不进入正常系统的情况下拿到root权限。
以CentOS/RHEL系虚拟机为例,步骤是这样:
- 启动虚拟机,在GRUB菜单出现时迅速按
e进入编辑界面。 - 找到以
linux开头的那一行,通常是linux /boot/vmlinuz-... root=...,在行尾追加一个参数:
rd.break或者对老版本系统追加:
single- 按
Ctrl + X或F10启动。 - 使用
rd.break时,系统会停在一个紧急维护shell。此时根目录是只读状态,先重新挂载:
mount -o remount,rw /sysroot chroot /sysroot- 进入真正的根文件系统后,重置密码:
passwd root- 如果在SELinux强制模式下的系统,重置密码后最好执行:
touch /.autorelabel这一步告诉系统下次启动时重新给文件打安全标签,否则可能出现密码改了但登录后一堆服务起不来的怪问题。
- 输入两次
exit退出维护环境,重启虚拟机。
Ubuntu/Debian系的虚拟机操作类似,在GRUB中往内核参数末尾加init=/bin/bash,或者加recvery模式,也能达到同样的效果。
5.2 普通用户忘记密码时的处理
很多人以为只有root密码能靠这种方法重置,其实普通用户也一样。
在进入单用户模式或rd.break环境后,先查看用户名:
ls /home确定用户名后执行:
passwd 用户名输入新密码即可。Ubuntu默认禁用root账户,如果日常用的是普通用户,这个方法比重新安装系统省事多了。
5.3 关于系统完整性和安全注意事项
在Linux上做密码恢复,有一个容易被忽略的点:如果你的系统开启了全盘加密(比如LUKS),GRUB阶段是无法读取根文件系统的,需要先提供磁盘解密密码或解密密钥。虚拟机和物理机在这个约束上是一样的,没有加密密钥照样进不去。
还有一个习惯建议:重置密码后,立刻检查一下系统里是否有其他可疑的后门或未授权的SSH密钥,确保这次操作没有给系统留下安全隐患。既然能进入维护环境,说明权限足够高,那就顺手把底细查清楚。
6. 实操过程中的高频问题与避坑指南
6.1 密码明明清空了,重启却依然提示错误
这是我在群里看到问得最多的问题。原因通常是这几个:
第一,chntpw写入完成后忘了输入y确认,所有修改没有落盘。第二,选错了分区,改的是某个旧系统的SAM,而不是当前系统的。第三,目标账户本身是Microsoft账户,离线清空本地哈希后,在线账户状态仍影响登录。
排查顺序建议:重新进入维护环境,用blkid确认各分区文件系统类型,找到NTFS系统盘;再次修改时注意看屏幕提示上是否出现“Password cleared”字样;如果还是不生效,就考虑是否开着BitLocker,这个前面提到过。另外,修改完SAM后重启虚拟机的第一件事是把维护ISO断开,避免再次从光驱启动。
6.2 光驱引导加载失败,卡在“No bootable medium found”
这个问题通俗点说就是虚拟机没找到可启动的介质。最常见的原因是ISO挂载后没有在启动顺序中排到第一位,或者光驱没有勾选“打开电源时连接”。
处理办法是在开机时按Esc调入启动菜单,手动选CD-ROM。如果是UEFI虚拟机和传统BIOS引导的维护ISO之间不兼容,也会出现盘在介质也在,但启动不了的情况。此时可以在虚拟机设置里把固件临时改为BIOS,操作结束后再改回UEFI。注意,改固件类型会影响Windows启动方式,最好提前备份虚拟机或做好快照。
6.3 找不到Windows分区或SAM文件
chntpw有时会列出很多分区,除了正常系统盘外,还包括恢复分区、EFI分区。看到这种列表,别贪快乱选。
用blkid命令查看每个分区的文件系统类型,NTFS和FAT32是最常见的标识。系统盘通常是NTFS,容量大;EFI分区是FAT32,容量小。如果虚拟机里有多个Windows系统,那就要仔细看容量和卷标,别拿错盘。
还有一种情况是SAM权限异常导致chntpw读取失败,但出现概率很低,更多是选错分区或BitLocker加密引起的。
6.4 快照回滚:最省事的后悔药,也是一把双刃剑
VMware Workstation Pro的快照,在密码恢复这个场景里堪称外挂。只要在系统还正常、密码还没改或还没忘的时候建立过快照,恢复密码就只需要在“快照管理器”里点一下“转到”。
但这个操作有代价:快照回滚会把这个时间点之后的所有改动丢掉,包括安装的软件、更新的驱动、新建的文件。如果虚拟机里只是一些简单配置,回滚很划算;如果里面有大量新数据,宁可花十分钟走离线重置,也不要用快照回滚。
我自己的习惯是:每台长期使用的虚拟机,在完成系统安装和基础配置后立刻建立一个“干净系统”快照,之后每一项大改动前再建一个临时快照。这样忘记密码只算是小事,系统被搞坏了也能快速回到可用状态。
6.5 下载工具时的安全提醒
搜索“VMware Workstation Pro 17下载”“VMware激活工具”“密码字典下载”这些关键词时,很容易碰到一堆来路不明的网站。它们多数顶着看似专业的版本号,实际下载包里夹带着挖矿木马、下载器劫持脚本,甚至直接篡改浏览器主页。
我的建议很简单:VMware Workstation Pro从官网获取,维护工具ISO从官方项目页或可信开源镜像站获取。密码字典这种东西,在正经恢复场景里几乎用不上,没必要冒险下载。安全永远是第一位的,工具选对,操作才稳。
我个人在实际操作中的体会是:虚拟机密码恢复这件事,真正难的从来不是技术,而是心态。别一忘记密码就慌,也别急着格式化重装。先判断当前系统类型,选对方案,做好备份,按步骤来,基本都能救回来。最后再多说一句:密码最好用密码管理器记下来,重要虚拟机做完就建快照,这两件事做到位,以后你基本不会再有这种救火的经历。