电脑开机需要输入密码,但自己却忘记了,这几乎是每位IT从业者都曾遇到过的尴尬场景。尤其是当年广泛使用的Award BIOS,一旦设定了密码,忘记后确实令人头疼。最近重新梳理了一个经典话题——如何找回CMOS密码,并按照操作难度分为几个等级,供不同需求的用户参考。
首先简单说明一下原理。计算机启动时,主板ROM中的BIOS会将CMOS数据加载到内存中,用于控制系统配置。Award主板上有一小块RAM(地址00到7F,共128个字节)用于存储这些数据,其中地址1C和1D两个字节专门存放Supervisor Password(超级用户密码)。维持CMOS数据不丢失的是主板上的锂电池,而数据的读写则依赖于端口70h和71h。了解这些基础知识后,后续的操作就更容易理解了。
方法0:万能型,但也最粗暴——拔电池或跳线放电
说它“万能”并不为过,毕竟无论什么密码,只要放掉CMOS的电荷,密码就会消失。但代价也很明显——之前精心设置的所有BIOS参数都将丢失,需要重新配置。这种方法适合彻底放弃治疗的情况,或者对电脑不太熟悉的用户用来破解系统密码。如果连系统密码都忘了,放电倒是能让你回到出厂状态。
方法1:简单但粗暴的Debug法
进入DOS,输入以下命令:
debug
-o 70 10
-o 71 01
-q
重启后,你会发现CMOS可以直接进入,密码询问消失了。原理其实很简单:向CMOS芯片写入数据时,奇偶校验无法通过,导致芯片数据被重置为默认出厂值。注意,这是全部重置——你之前调整好的所有参数都会丢失。所以这个方法虽然快,但不到万不得已不要轻易使用。
方法2:编程读取——从根源上破解密码
这个方法相对硬核,核心思路是通过程序直接读取CMOS地址1C和1D中的数据。Award的加密方式非常脆弱,密码就存储在这两个字节中,且加密算法简单到令人难以置信。读取出来后,将两个字节的数据分别转换为四进制(每两位二进制算一组),合并成8位数字,就是CMOS密码了。
以下是一段在Windows 98SE下用Turboc2编译通过的小程序,简单实现了这一“破解”过程。原作者不详,但确实是个好思路:
#include
#include
#include
void main()
{
int n;
char cmospass;
char temp = 0;
printf("\nThis program only is tested at win98 and award bios!!\n");
printf("The password of the cmos is:");
outportb(0x70, 0x1d);
cmospass = inportb(0x71);
for(n = 6; n >= 0; n -= 2)
{
temp = cmospass;
temp >>= n;
temp = temp & 0x03;
printf("%d", temp);
}
outportb(0x70, 0x1c);
cmospass = inportb(0x71);
for(n = 6; n >= 0; n -= 2)
{
temp = cmospass;
temp >>= n;
temp = temp & 0x03;
printf("%d", temp);
}
printf("\n");
}
思路清晰,代码也不复杂。但你需要有编译环境,并且能在DOS下运行。对于大多数普通用户来说,这一步的门槛稍高。
方法3:绿色环保型——15秒快速搞定
这是目前我最推荐的方法。快速、准确、不破坏原有参数,而且几乎不需要额外工具——只要有一个能进入DOS的环境(或者启动时按F8进入命令行模式),再加上一点十六进制转四进制的手速即可。
步骤如下:
第一步:进入MS-DOS,输入debug。
C:\>debug
-o 70 1d
-i 71
xx
-o 70 1c
-i 71
yy
这里,xx和yy就是屏幕上显示的两个16进制数,分别对应之前提到的1D和1C两个地址里的加密结果。
第二步:将这两个十六进制数分别转换为四进制。例如xx为8E,转换为四进制就是2032;yy为3B,转换为四进制就是0323。将两个结果拼接起来(注意yy在前、xx在后),得到的就是8位密码。如果某个数字转换后不足四位,前面补0。例如3B转换的结果是0323,而不是323。我测试过原密码设为87654321,用这个方法依然能成功反推出来。成功率在98%以上——当然,前提是您使用的是Award主板,且BIOS版本不是太冷门。
第三步:如果你不想手动计算四进制,可以直接使用Windows 2000及以上系统自带的科学型计算器,输入十六进制数,然后切换到“程序员”模式查看对应的四进制值即可。
总之,Award主板的CMOS加密之所以如此脆弱,完全是因为它在设计时就没有将其作为重点安全防护。两个字节的加密数据,稍微懂得底层原理的人,三分钟就能搞定。也难怪当年网上随便搜索都能找到破解教程。不过话说回来,这玩意儿毕竟是防君子不防小人,真要较真,谁也没办法。
