ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

cmospwd 清 BIOS 密码全指南:原理、DOS引导与适用边界

cmospwd 清 BIOS 密码全指南:原理、DOS引导与适用边界

简介:cmospwd是一款实用BIOS密码清除工具,专门面向系统管理员、电脑维修人员和需要恢复CMOS设置权限的用户。它兼容AMI、AWARD、Phoenix等主流BIOS类型,直接读取CMOS存储器中的密码区,在DOS环境下即可运行,无需原密码便能清除或显示BIOS密码,解决因密码遗忘、设置锁定而无法进入BIOS或操作系统的常见问题。压缩包共15个文件,整体仅107KB,包含DOS与Windows双平台可执行程序、C语言源码、说明文档与许可证文件,目录中分别提供Windows版和DOS版程序,并附源码供开发者研究底层实现。该工具小巧、轻量,在老旧设备维护、系统重装和BIOS排障中非常实用。目前已有3490人学习,读者可依据配套说明直接运行,也可通过源码认识CMOS密码存储原理;操作前需确认拥有合法权限,避免误操作损坏主板数据或侵犯他人权益。

1. cmospwd 能清掉的密码,其实只有一部分

修过几台老台式机的人,多半遇到过这种场面:机器是别人给的,开机却卡在 BIOS 密码输入框,绕不过去。放电、拔电池、跳线全部试完,密码纹丝不动,时间倒是清零了。我第一次处理这样的机器也折腾了一下午,最后是在一个 FreeDOS 引导盘里敲了一条命令,十几秒后密码就被列了出来,连清除都省了。那个工具,就是 cmospwd。

cmospwd 属于当年那批直接操作 CMOS 存储器的密码工具,它主要帮你在两类场景下干活:一类是忘了自己设置的 BIOS 密码,另一类是拿到二手设备、管理员也不清楚密码。它不玄学,核心就两件事——读出 CMOS 里和密码相关的数据,然后要么反推出密码明文,要么把密码位清掉并修正校验和。但它的能力有上限,新出的 UEFI 笔记本多数它管不了,所以在动手前,先搞清楚这台机器是不是它「够得着」的类型,比盲目找工具更省时间。这份笔记就沿着「原理 -> 实操 -> 翻车经验 -> 边界」这条路,把 cmospwd 怎么用、什么时候别用讲清楚。

2. 想用对 cmospwd,先搞懂 CMOS 里密码是怎么躺着的

很多人以为 BIOS 密码是个独立的芯片,或者藏在某个加密分区里,其实在老机器上它没那么神秘。CMOS 本身是一块用电池维持的易失性存储,通常挂在南桥或者 Super I/O 下面,BIOS 通过两个端口就能读写它:0x70 是索引端口,0x71 是数据端口。密码就在这块存储的某个偏移量上,和日期时间、开机顺序、硬盘参数挤在同一个区域里。cmospwd 所做的,就是直接对这两个端口做 I/O,把整块 CMOS 内容读出来分析。

2.1 密码在 CMOS 里的三样东西:口令、校验和、状态位

老式 BIOS 存密码,不存明文,而是存一份经过加密变换的口令数据。不同的 BIOS 厂商加密方式不一样,常见的几类有 AMI、Award、Phoenix、IBM 等。它们有的用 DES 变体,有的用简单的查表置换,有的甚至只是把 ASCII 码按位取反再乘个因子。所以同一段「密码密文」,在不同工具眼里含义完全不同。cmospwd 内置了多套解密表,读出来一个字节序列,先判断它像哪个厂商的密文格式,再套对应算法去还原。

校验和是另一个关键。BIOS 每次启动时会计算 CMOS 中校验区的总和,跟出厂时写入的校验值比对。如果 cmospwd 清了密码字节,却没同步重算校验和,BIOS 会判定 CMOS 损坏,轻则恢复默认设置,重则停在启动界面报错。状态位则是 BIOS 自己留下的密码启用标记,有些主板就算密码区域被清空,只要状态位还置着,开机依旧要求输入口令。所以一个合格的清密码工具,动作应该包含三件事:抹掉口令数据、重算校验和、复位状态位。cmospwd 的很多版本是这么设计的,但主板兼容性差异会导致其中某一步失效。

2.2 cmospwd 的两条路子:算出来和抹掉它

用 cmospwd 时,它通常给你两种处理方式,这也是读完输出后要做的选择。第一种是把密码解出来显示在屏幕上。这样做的好处是你不需要改 CMOS 任何字节,输入解出的密码就能正常进 BIOS 设置,风险最低,适合密码只是被自己忘掉的情况。第二种是直接把密码字节清零并修正校验和,相当于把 CMOS 里的口令相关区域恢复成出场默认状态,适合设备交接、管理员不知道密码的场景。

我一般会优先看工具有没有解出明文。因为 CMOS 里可能还存着其它设备密码,比如硬盘密码、扩展卡密码,直接清空口令区,可能把和密码关联的其它安全位一起弄丢,后续反而麻烦。但「只解算不清除」也有前提:你得能进到 BIOS 密码输入界面去手动输入。有些机器的 BIOS 输错几次会被锁定,或者密码提示后直接拒绝键盘输入,这时候就只能走清除路线。

2.3 动手前先自测:你的主板属不属于「友好型」

cmospwd 的兼容性从来不是「支持/不支持」两个选项,而是分了几个梯队。第一梯队是 2005 年前后的 AMI 和 Award 台式机主板,这类 BIOS 的密码加密方式固定,CMOS 映射公开,工具成功率很高。第二梯队是部分 Phoenix BIOS 的老笔记本和品牌机,加密方式稍复杂,有些能解算、有些只能尝试清除。第三梯队就直接没戏了——2012 年后大量设备把密码挪到了主板上独立的 EEPROM 里,CMOS 里只有一串无效的索引值,cmospwd 跑完提示成功,重启照样要密码。

动手之前,建议先做两个检查。第一,看 BIOS 类型和版本,开机自检画面会显示,或者在 DOS 下用工具读。第二,确认机器有没有设置过硬盘密码之类的附加口令,有些机器主密码清掉了,硬盘密码还锁着,那不在 cmospwd 的职责范围内。搞清楚这两点,能避免在机器前白忙活半小时。

3. 在 DOS 引导环境里把 cmospwd 跑起来

光把 cmospwd 下载下来在 Windows 里双击,多半没反应。因为它需要直接访问 0x70 和 0x71 端口,现代操作系统的驱动层和权限管理会挡掉这种原生的端口 I/O,而且很多人拿到的可执行文件是为 DOS 编译的 16 位程序。所以标准做法是,准备一个最小的引导环境,让机器在纯 DOS 或 FreeDOS 下运行它。环境越小越稳,不用进 Windows,也不用挂载硬盘。

3.1 准备一个最小的 FreeDOS 引导盘

我习惯用一个 4GB 的 U 盘做载体,里面只放引导所需的最小文件集,再塞几个工具进去。制作引导盘时,用常见的启动盘制作工具把 FreeDOS 写到 U 盘上,然后在 U 盘根目录放 cmospwd 的目录,整体结构类似下面这样:

U盘根目录 │ command.com │ kernel.sys │ autoexec.bat │ fdisk.exe └── tools ├── cmospwd.com └── readme.txt

逻辑说明:FreeDOS 引导时先加载内核,再执行 autoexec.bat,autoexec 里可以加一段菜单逻辑,也可以在启动后手动进入 tools 目录运行工具。fdisk.exe 不是必需,但我习惯放一个,因为旧机器硬盘分区表有问题时,引导盘启动也会失败,能顺手修。cmospwd 的扩展名有的是 .com,有的是 .exe,取决于你拿到的构建版本,运行方式都是一样的。

参数说明:如果 autoexec.bat 里写了path=c:\tools,那在命令行下直接敲cmospwd就能运行,不用切目录。如果没写,就先进c:\tools再运行。另外,有些主板的 USB 引导需要在 BIOS 里把启动顺序改成 U 盘优先,做好盘之后先在普通电脑上确认能启动到 DOS 提示符,再动目标机器,别把环境问题混在密码问题里一起排查。

3.2 运行 cmospwd 并看懂屏幕输出

引导到命令行后,运行 cmospwd,输出的第一屏通常是扫描到的 BIOS 类型、CMOS 偏移量和算法版本,类似这样:

CmosPwd v0.5 AMI BIOS detected at offset 0x2E Password hash: 0x1A2B3C4D Decoded password: 3L3PH4NT

逻辑说明:第一行告诉你识别到了哪个厂商的 BIOS,以及密码数据在 CMOS 里的偏移位置。第二行是读到的密文哈希,一般十六进制显示。第三行是解算出来的明文密码。见到Decoded password这行,就说明走「算出来」这条路成了。没见到也不要慌,工具可能检测到多组密码候选,会以列表形式输出,挨个去 BIOS 输入框试就行。

参数说明:很多版本的 cmospwd 支持/c之类参数指定清除动作,不同构建的参数名不一样。我的建议是不要凭记忆敲参数,先进交互菜单看提示,或者cmospwd /?看帮助。清除动作执行时,屏幕上通常会显示CMOS cleared,please reboot一类提示,看到这种输出再重启,才说明清除动作完成。如果直接按电源键强制重启,可能状态位还没写回去,白折腾。

3.3 密码没直接清掉?用哈希离线反查顶上去

有时候 cmospwd 能读到密码哈希,却解不出明文,因为某个 BIOS 变体用了一种它没内置的算法。这时候可以把它打印出来的哈希值记下来,到另一台电脑上用更现代的密码恢复思路处理。常见做法是先把哈希文本保存下来,再用带字典和暴力组合的哈希类工具离线跑,跑出来之后手动输入 BIOS 即可。

# 在另一台 Linux/Windows 机器上,把哈希先落成文本 echo "0x1A2B3C4D" > hash.txt # 然后用密码恢复工具加载 BIOS 哈希规则 hashcat -m 9999 hash.txt wordlist.txt --rule-file bios.rule

逻辑说明:示例里-m 9999只是占位,真实应用时要把模块编号换成这版工具对应的 BIOS 哈希模块代码,规则文件也要按你拿到的工具包实际情况调整。这段的意思不是让你照抄命令,而是告诉你「哈希 -> 离线算」这个链路本身可行。cmospwd 解不出明文时,哈希往往还是准的,把它留档再走离线赛道,成功率能提高不少。

参数说明:离线算密码要控制规模,老 BIOS 的密码通常不超过 8 位,字符集以大写字母和数字为主。优先用带年份前缀的字典,比如 1234、1987、abcd 这类组合,命中率比纯暴力高得多。若哈希工具不支持 BIOS 哈希类型,就回到清除路线,毕竟很多老机器密码设的也不复杂,清掉重设更省事。

4. 清 BIOS 密码时最容易翻车的 5 个坑

工具能跑通不代表问题解决,清 CMOS 密码这条路上的翻车点比想象中多。下面这五类现象,是我在台式机和老笔记本上都见过真实案例的,每条按现象、原因、解决的顺序写。你遇到时可以直接对照排查。

4.1 现象一:提示 CMOS checksum invalid,机器卡住开不了机

原因:工具清了密码字节,但没有正确重算校验和,或者校验算法和 BIOS 实际使用的版本对不上。BIOS 上电自检时发现校验值不匹配,就认为 CMOS 数据损坏,停在报错画面,有时候还伴随两次自动重启。这种情况看起来吓人,其实 CMOS 没有被物理损坏。

解决:先不要慌,进 BIOS 设置界面重新保存一次默认值。多数主板在检测到校验失败后,会让你按 F1 或 Del 进入设置,你只需要按提示恢复默认,保存退出,让 BIOS 自己重新生成一份有效的校验和。如果进不了设置界面,就再做一次放电流程,拔掉电源线,取下主板上的纽扣电池,等待一分钟后装回,再启动。注意,放电后密码可能也一并清了,这就是老主板物理清密码的原理——把整个 CMOS 校验区和口令区一起重置。

4.2 现象二:写入成功、提示已清除,重启后密码还在

原因:这是最典型的「工具做到了自己能做的,但没做到主板需要的」。老笔记本或者部分品牌机,主板有多个密码存储区,主密码在 CMOS 里,从密码或管理员密码却放在独立 EEPROM 里。cmospwd 清的只是它认识的那一段,设备开机时 BIOS 会去读另一个区域的密码,所以照样拦你。

解决:先把 BIOS 设置里的密码相关项找全,有些机器分 Supervisor Password 和 User Password,是两套独立口令,只清一个当然不行。其次看工具输出里有没有提到非 CMOS 区域,比如EEPROM、NVRAM字样,提到就说明它确实识别到了更多区域。如果在老笔记本上遇到这种情况,坦白说继续用 cmospwd 翻盘概率不高,直接跳到第 5 章看边界处理。

4.3 现象三:杀毒软件把引导盘里的工具拦了

原因:工具本身就是直接读写端口的程序,行为特征和恶意软件类似,加上很多分发包是十几年前的编译产物,没签名没时间戳,杀毒软件的启发式引擎很容易报毒。这是老维护工具的常态,不是工具本身有问题,也不能完全排除有人往二手包里塞私货。

解决:第一,只从可信渠道拿文件,下载后立刻计算哈希,和发布者公布的校验值比对,对不上就删除。第二,做引导盘时可以把工具放在 U 盘的未分配分区,或者打包成压缩文件,制作完引导盘后再解开,减少操作系统的实时扫描介入。第三,如果虚拟机里实验,记得验证镜像来源,别拿来源不明的虚拟磁盘跑,那相当于把未知代码放进了自己的实验环境。

4.4 现象四:笔记本上执行工具,屏幕花掉或者风扇狂转

原因:部分老笔记本的电源管理和 CMOS 读写共用芯片资源,工具做低层 I/O 时触发了 SMI 中断或者 ACPI 事件。花屏和风扇狂转不是工具在破坏硬件,而是它访问端口的方式比较粗暴,把主板的温度读取程序干扰了。

解决:这种情况下立即停止操作,长按电源键关机,重启后一般恢复正常。之后不要再用工具去读这类机器的 CMOS,改回 BIOS 设置界面或者放电的路线处理。这也印证了第 2.3 节的观点——先判断主板类型再动手,能少踩很多坑。

4.5 现象五:密码是没了,但开机时间、启动顺序全乱了

原因:某些版本的 cmospwd 在清密码时,把整个 CMOS 内容都重置了,不只是密码区。结果密码倒是消失,时间回到出厂日期,硬盘启动顺序变回默认,如果机器原本是从光驱或特定硬盘启动,现在可能直接找不到系统。

解决:清完密码后第一次进 BIOS 设置,手动把时间、日期、启动顺序改回来,保存退出。顺手把密码重新设置一个,别留空密码状态,很多 BIOS 在空密码条件下会跳过安全启动,反而容易被误操作改坏参数。如果你不想手动一项项设,部分主板有「Load Optimal Defaults」之类的选项,加载优化默认再微调即可。

5. cmospwd 的边界在哪:新机器为什么越来越不好使

cmospwd 是老维护工具箱里的常客,但它在 2012 年之后的设备上越来越没用,这是技术演进的结果。新机器的密码存储方式完全变了,那些还在坚持用它处理新笔记本的人,只是重复已经失效的操作。

5.1 密码从 CMOS 搬进了 EEPROM 和 TPM

现代主板上的 BIOS 芯片容量比老主板大了好几个量级,密码不放在那个靠电池维持的易失 CMOS 里,而是写进 SPI Flash 的独立区域,甚至和 TPM 的度量值绑定。操作系统启动时,BIOS 固件读到的密码、状态位、校验数据来自 Flash,不在 CMOS 端口能访问的范围内。cmospwd 就算把 CMOS 读了个遍,也只会看到一片不再承载密码的空白数据。

对这种机器,还有一条非常规路线叫「固件级处理」——用烧录器直接读 SPI Flash,在固件镜像里定位密码区做修改。但那样做的风险明显更高,容易把整个固件刷坏。如果只是处理交接过的一次性密码问题,代价不值得,我建议你还是优先看品牌方有没有正式解锁通道。

5.2 品牌机和笔记本:跳线、放电和售后服务才是常态

现代品牌台式机通常在主板上留了密码清除跳线,常见标记是 CLR_CMOS 或 PASSWD 字样。拔掉电源,短接这个跳线,几秒后恢复默认。笔记本则看品牌,有的在底部有隐藏孔位,有的需要按住特定组合键在开机时重置,也有的必须联系厂家售后。这些都是官方支持的解锁方式,它们存在的原因,就是第三方软件已经覆盖不了新机器的密码存储结构。

动手前记得先查维修手册,确定跳线位置和短接时间。有些主板清了密码后首次开机会等很久,那是它在重放固件默认值,不是故障。别一看到屏幕黑就反复按电源,等足两分钟再说。

5.3 给老机器做实验时的一套验证顺序

如果你手里正好有台老台式机,想验证 cmospwd 在你这台机器上到底能不能用,我建议按这个顺序操作,最小化破坏。

先记录这台机器当前的 BIOS 设置,可以用手机拍照。然后在 BIOS 里设置一个临时密码,重启确认密码生效。再引导到你的 FreeDOS 盘,运行 cmospwd,如果它能解出你几分钟前设的那个密码,说明这台机器的加密结构在它覆盖范围内。接着再执行清除动作,重启确认密码消失、时间重置,最后进 BIOS 重新设置并拍照留档。

这样一套流程下来,你既验证了工具能力,又学会了这台机器的复位特性。做实验时记得拔掉电源线再操作主板上任何跳线,避免带电触碰。实验完把 U 盘里的工具目录顺手复制一份到网盘的压缩包里,下次需要时不用重新找。

6. 进阶:把工具做进引导菜单,实现老机器快速处理

熟练之后,你会发现每次处理老机器都要先找 U 盘、再进 DOS 手动敲命令,很繁琐。我自己的习惯是把 cmospwd 做进一个统一的引导菜单里,机器从 U 盘启动后直接选到对应项,剩下就是等输出。

6.1 用 GRUB 菜单集成 cmospwd

引导环境我用的是 GRUB 2 或 grub4dos 这类引导器,两者都支持在启动菜单里直接加载 DOS 映像。先制作一个干净的 DOS 启动软盘映像,把 cmospwd 放进去,然后在引导配置里加一个菜单项:

menuentry "BIOS Password Clear - DOS" { linux16 /boot/memdisk initrd16 /boot/dosTools.img }

逻辑说明:这个配置是先加载 memdisk,把 dosTools.img 作为虚拟软盘交给后续的 DOS 内核,进入命令行后自动挂载 A 盘,里面放着 cmospwd。实际使用中,memdisk 是否启用取决于你的引导器版本,grub4dos 下也可以直接map --mem把映像映射到内存。

参数说明:dosTools.img 最好控制在 16MB 以内,大映像加载慢,而且老机器内存有限,映射进内存后留给工具运行的空间会变少。映像里除了 cmospwd,我一般还放一个脱机时间同步脚本。清完密码后顺手执行它,能避免 BIOS 时间重置导致后续日志时间错乱。

6.2 处理完顺手验证,别急着收工

清完密码重启后,我习惯按 Del 进一次 BIOS,确认三件事:密码输入提示没再出现,时间日期显示正常,启动顺序还是我之前维护好的那几项。确认没问题后,重启到系统里再跑一次硬件检测工具,看 CPU 频率、内存容量、硬盘模式有没有因为 CMOS 重置而变化。

如果机器原本设置了开机密码之外的管理员限制,比如 BIOS 里禁止 USB 启动,清完密码后限制一般也一起失效了,记得进 BIOS 重新把需要的安全策略设回来。做完这些,这台机器才算真正处理完毕。

说回工具本身,cmospwd 的价值不在于它多强大,而在于它代表了一类「系统层软件处理硬件锁」的思路。老机器的密码问题用软件解法最省事,新机器的密码问题则要回到硬件和官方通道。每次接一台新机器,我先问自己一句:这台机器的密码到底存哪了?这个问题想明白了,用不用 cmospwd 自然就有了答案。希望帮到你少走一些我走过的弯路。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进