发信人: williamlong() 
整理人: williamlong(2000-03-21 14:49:45), 站内信件
 | 
 
 
             CMOS破解完全手册 
 
              cartoonboy (11/03/1999)
  
   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这四个字节中,由 于39H和3BH这两个字节一直为00H,所以就略过,那么CMOS密码的关键就集中到了 38H和3AH这两个字节上。先介绍一点Award的密码规则,Award允许一位至八位密 码,每一个字符的范围由20H-7FH,也就是由空格到ASCII码的127号。想必大家已 经发现了,八个字符要放到两个字节中去,好象不压缩一下是不行的。的确,Aw ard是将其压缩了,但是不是普通的压缩方法,我想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 中,将H1和H3的和保存到38H中。如果密码不足八位,以此类推。 
 
 下面举一实例:我的密码为:r*vte,ASCII码为:72H、2AH、76H、74H、65H,按 公式运算得:72*100 + 2A*40 + 76*10 + 74*4 + 65=8615,于是H1=00H,H2=86 H,H3=15H,所以3AH的值为86H,38H的值为15H。看来密码就这么简单,在你每次 输入密码的时候,BIOS将其算算,再与CMOS中的值比较一下,如果一样就放行, 否则免谈。过程就是这样,不过还是有些问题要说明,先算算看,两个字节可以 表达的密码可以有多少种:164=65536种,而八位密码,每一位有96种选择,则可 以表示的密码有:968≈7.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下,很多破解程序都无法使用,原因在于WindowsNT的DOS是模 拟的禁止对CMOS写入,请大家注意。 
 
 (一) 
 //AMIPWD.CPP --- Show AMI Password String 
 //Compile with SMALL model Tel:027-7800172 7404402(H) 
 //Email:[email protected] 
 #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 secret[7]; 
 char str[22]=""; 
 for(length=0; length<7; length++) 
 secret[length] = rbyte(0x37+length); 
 secret[0] &= 0xf0; 
 for(i=0; i<7 ,secret[i+1]>0; i++) 
 str[i] = AMI_unEncrypt(secret[i], secret[i+1]); 
 str[i+1]=0; 
 if (secret[1]==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.6和92.11.11的微机上测试通过. 为便于理解,将解密算法的C代码列出: 
 char AMI_unEncrypt( BYTE key,BYTE c2){ 
 BYTE num[]={ 0,1,1,2 }; 
 int di=0,c; 
 do{ 
 c=num[key>>6]+num[key&3]; 
 if (c&1) key=0x80+(key>>1); 
 else key>>=1; 
 di++; 
 }whi���� 
  
  --                                                      ☆ 蓝色月光 ☆  http://williamlong.163.net                                                   
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.128.129.3]
  | 
 
 
 |