CMOS结构剖析
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号。想必大家已经发现了,八个字符要放到两个字节中去,好象不压缩一下是不行的。的确,Award是将其压缩了,但是不是普通的压缩方法,我想Award另有将其加密的想法,应为在CMOS中空位还很多,要想放八个字节看来是没有什么问题的,不过这么裸露的密码就更加没有用处了。
通常的压缩方式有无损压缩,如zip, arj等,或者是有损压缩,象meg ,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=86H ,H3=15H,所以3AH的值为86H,38H的值为15H。看来密码就那么简单,在你每次输入密码的时候,BIOS将其算算,再与CMOS中的值比较一下,如果一样就放行,否则免谈。过程就是这样,不过还是有些问题要说明,先算算看,两个字节可以表达的密码可以有多少种:164=65536种,而八位密码,每一位有96种选择,则可以表示的密码有:968≈7.2×1015种,所以理论上说,每一个密码,都可以找出大约1011这么多个可以起相同作用的密码。
但是事实上并不是大家都是八位的密码,或许没有大得这么吓人,不过也挺多的,就如我哪个密码,光与他相同功能的五位密码就有二十五万多个,而六位,七位,八位的更多,数量不详,因为从来没有把他算完过,时间太长了,耗不起。