教你破解BIOS密码保护
2007年04月15日 星期日 下午 05:03
      为了防止其它人未经允许使用你的计算机,大部分主板都允许你为CMOS设置密码,这当然是一个不错的方法,可是如果你的计算机被别人恶意设置了密码,或者你把记着密码的纸条丢了那该怎么办呢?接着往下读你会到答案的。
  CMOS被设置密码之后一般会有两种表现。第一种开机后就被提示输入密码,如果密码输入错误根本无法进入系统;第二种开机后可以引导系统,可是当企图修改CMOS设置时被提示输入密码,如密码错误将无法更改CMOS设置。下面本着先简单后复杂的顺序分别介绍解决方法。
  如果你遇到的是第二种情况那么恭喜你,因为这种情况下问题是很容易解决的。解决方法大至有三种::
  (1DEBUG直接修改法。其原理是利用DEBUGCMOS进行直接操作从而把其中的密码擦除。运用这种方法你先要获得DEBUG.EXE这个软件,它很好在DOSWIN95中都有。获得这个软件后在DOS提示符下键入DEBUG,然后按如下格式输入:
  -o 70 10
  -o 71 10
  -Q
  输完之后重新启动计算机就可以了。
  (2)软件修改法。利用CMOSPWD这个软件也可以很方便的清除CMOS密码。使用方法是先下载李亦捷whua/down/Cmospwd.zip然后将其解压到一个目录中如ABC,接着进入MSDOS方式再进入目录ABC,你会发现目录中有一个CMOSPWD.EXE文件,在DOS提示符下输入CMOSPWD/k,你会看到三个选项,分别是1kill cmos,2kill cmos(try to keep data and time),0abort。选择第一项或第二项后重新启动计算机,CMOS中的密码就被清除了。
  (3)通用密码法。一些主板厂商为了防止用户忘记密码后无法正常使用计算机,特意保留了一些通用密码比如AWARDwantgirlAWRRD等。但是使用通用密码并不是一个好的方法,首先通用密码很难到,其次所谓的通用密码也只能在其相对应的CMOS版本中使用。
1、针对 Award BIOS:
试试下面的密码: AWARD_SW, j262 , HLT, SER, SKY_FOX, BIOSTAR, ALFAROME, lkwpeter,
j256, AWARD?SW, LKWPETER, Syxz, aLLy, 589589, 589721, awkward, CONCAT
也可在网上下载有关的破解程序。
2、针对AMI BIOS:
试试下面的密码:AMI, BIOS, PASSWORD, HEWITT RAND, AMI?SW, AMI_SW, LKWPETER, A.M.I.
也可在网上下载有关的破解程序。
  接下来谈谈第一种情况的解决方法。如果你遇到的是第一种情况要解决问题那你需要具有一定的硬件知识,因为这种情况的解决是需要打开机箱的。
  (1)跳线清CMOS法。有些主板上有一个跳线是专门用来清除CMOS中设置的内容。只要短接这个跳线CMOS中的口令就会被清除掉了。因各款主板的操作并不一样,所以具体操作时请参照说明书。
  (2)直接短路法。如果你的主板没有专门用来清CMOS的跳线你就可以采用这种方法。因为CMOS中的内容在关机时是通过一块电池来保存的,我们只要在关机时把电池取出来,过一段时间CMOS中的内容就会被清空了。主板上使用的供电电池大部分是钮扣电池,很好分辨。
  最后要说明一点,有些电脑再清除CMOS后不能正确引导而提示没有操作系统,这是因为在清除CMOSCMOS中关于硬盘的设置也被清除了,导致系统不到硬盘从而无法启动。这时只要进入CMOS自动检测一下硬盘就可以了。
CMOS破解完全手册

1)对于CMOS而言,相信大家已经不再陌生。对于破解CMOS密码的文章也有不少。在这里偶(cartoonboy)根据自己的经验并参考精华区的相关文章来说明如何解开CMOS密码:
先向大家说明一下CMOS的一些结构:导演汪俊
00000000H 30 00| FF 00 | 39 00 | FF 00 | 12 00 | FF 00 |01 00 | 18 00
| 秒报警 | |分报警 | 小时 |时报警 |星期 |
00000010H 11 00| 98 00 | 26 00 | 02 00| 70 00 | 80 00 |00 00 | 00 00
| |寄存器A|寄存器B|寄存器C|寄存器D |诊断 | 下电
00000020H 40 00| 7E 00 | F0 00| 03 00| 0F 00| 80 00 |02 00 | 00 00
软驱| 密码域 | 硬盘 | 未知 | 设备 |基本内存| 扩充
00000030H 7C 00| 2E 00 | 00 00| 7F 00| 15 00| 86 00 |00 00 | 00 00
内存|硬盘类型| 未知 | 密码数据位 | 未知
00000040H 00 00| 00 00 | 00 00| 00 00| 00 00| 00 00 |E2 00 | 22 00
未知
00000050H 0F 00| FF 00 | FF 00| E1 00| 22 00| 3F 00 |08 00 | 59 00
未知
00000060H 00 00| 7C 00 | 19 00| 80 00| FF 00| FF 00 |FF 00 | FF 00
未知 | 世纪值 | 未知
00000070H 7D 00| 81 00 | AA 00| 0F 00| 39 00| 9B 00 |E8 00 |19 00
未知
上述的内容参考了其他资料,所以不一定完全正确.38H-3BH这四个字节中,由于39H3BH这两个字节一直为00H,所以就略过,那么CMOS密码的关键就集中到了38H3AH这两个字节上。先介绍一点Award的密码规则,Award允许一位至八位密码,每一个字符的范围由20H-7FH,也就是由空格到ASCII汪涵仇晓码的127号。想必大家已经发现了,八个字符要放到两个字节中去,好象不压缩一下是不行的。的确,Award是将其压缩了,但是不是普通的压缩方法,我想Award另有将其加密的想法,因为在CMOS中空位还很多,要想放八个字节看来是没有什么问题的,不过这么裸露的密码就更加没有什么用处了。通常的压缩方式有无损压缩,如zip,arj等,或者是有损压缩,象mpeg,jpeg等。但是对这么几个字节,这些方法就没有什么用武之地了,而且压缩过的东西,应该是可以还原的,否则压来压去就没有什么意义了。不过Award的方法就不同了,他不仅仅进行了超级的有损压缩用的是HASH算法,而且这种压缩是不可还原的,下面就给出他的加密压缩方法(以下数值,运算均基于16进制):假如有一密码,八位,记为:ABCDEFGH(每一位的取值范围为20H-7FH),将其按下列公式运算:H+4*G+10*F+40*E+100*D+400*C+1000*B+4000*A ,将结果按由低到高保存到:H1,H2,H3,字节中,然后将H2保存到地址:郑湫泓3AH中,将H1H3的和保存到38H中。如果密码不足八位,以此类推。
下面举一实例:我的密码为:r*vteASCII码为:72H2AH76H74H65H奔跑吧兄弟电影票房,按公式运算得:72*100 + 2A*40 + 76*10 + 74*4 + 65=8615,于是H1=00HH2=86HH3=15H,所以3AH的值为86H38H的值为15H。看来密码就这么简单,在你每次输入密码的时候,BIOS将其算算,再与CMOS中的值比较一下,如果一样就放行,否则免谈。过程就是这样,不过还是有些问题要说明,先算算看,两个字节可以表达的密码可以有多少种:164=65536种,而八位密码,每一位有96种选择,则可以表示的密码有:9687.2×1015种,所以理论上说,每一个密码,都可以出大约1011这么多个可以起相同作用的密码。但是事实上并不是大家都是八位的密码,或许没有大得这么吓人,不过也挺多的,就如我那个密码,光与他相同功能的五位密码就有二十五万多个,而六位,七位,八位的更多,数量不详,因为从来没有把他算完过,时间太长了,耗不起。
2)关于通用密码:
Award4.51版以前的才有通用密码,
wantgirl
Syxz(pay attension to the capital letter)
dirrid
wnatgirl
3)在这里再向大家介绍一下复旦网友们的破解程序:(道德感不佳者和功力不够深者略过)
(零)
这个是斑竹偶(cartoonboy)连破十几台机器攻无不克的方法,要珍惜哦:)
you try (under dos)
debug
o 70 2e
o 71 00
o 70 2f
o 71 00
note:windowsNT下,很多破解程序都无法使用,原因在于WindowsNTDOS是模拟的禁止对CMOS写入,请大家注意。
(一)
//AMIPWD.CPP --- Show AMI Password String
//Compile with SMALL model Tel:027-7800172 7404402(H)
//Email:mecad@server20.hust.edu
#include
#include
#define BYTE unsigned char
char AMI_unEncrypt( BYTE key,BYTE c2){
asm xor di,di
asm mov bl,key
asm mov cl,c2
lab1:
asm test bl,0xc3
asm jpe lab2
asm stc
lab2:
asm rcr bl,1
asm inc di
asm cmp bl,cl
asm jne lab1:
return _DI;
}
BYTE rbyte(int port){
outp(0x70,port);
outp(0xed, port);
return inp(0x71);
}
// 0x38-3d password code 0x37 initial value
void main(){
int i, length;
static BYTE secret7;
char str22="";
for(length=0; length<7; length++)
secretlength= rbyte(0x37+length);
secret0&= 0xf0;
for(i=0; i<7 ,secret教师节老师祝福语[i+1>0; i++)
stri = AMI_unEncrypt(secreti, secreti+1);
stri+1=0;
if (secret1==0)
printf("No password\n");
else
printf("Password=%s\n",str);
return;
(二)
前述针对AMI主板的BIOS口令破译算法在BIOS日期为91.5.5, 91.7.7, 91.12.12,92.6.692.11.11的微机上测试通过. 为便于理解,将解密算法的C代码列出:
char AMI_unEncrypt( BYTE key,BYTE c2){
BYTE num[]={ 0,1,1,2 };
int di=0,c;
do{
c=numkey>>6+numkey&3;
if (c&1) key=0x80+(key>>1);
else key>>=1;
di++;
}whi