以前很多人談過CMOS以及CMOS密碼,但今天我想談談自己的見解。
在談密碼之前,還是先說說什麼是CMOS(本文所言CMOS均針對Award而言)。CMOS實際上存放的是電腦的系統時鐘和硬體設定方面的一些資訊,供系統引導時讀取;同時初始化電腦各個組件的狀態,總共有128個位元組,存放在RAM晶片中。
好了,先看一個例子,用來向大家說明一下CMOS的一些結構,下面這128個位元組就是我的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-3AH的密碼資料倒可以肯定,所以接下來就切入正題,談一談CMOS的密碼,由於我能找到的均為Award的BIOS,所以以下的結論均針對Award的CMOS,並且在以下的主板及相應的BIOS上驗證通過。(本文一下數值均為16進位)
主板名及型號 BIOS版本 BIOS日期
Aopen(建基)AP58 R1.50c 1998-07-13
Aopen(建基)AX5T R1.80 1998-07-30
EPoX(磐英)MVP3E 未知 1998-08-03
EPoX(磐英)P2-112A 未知 1998-09-16
FIC(福士)PA-2007 v1.0A 1997-06-25
在38H-3BH這四個位元組中,由於39H和3BH這兩個位元組一直為00H,所以就略過,那麼CMOS密碼的關鍵就集中到了38H和3AH這兩個位元組上。先介紹一點Award的密碼規則,Award允許一位至八位密碼,每一個字元的範圍由20H-7FH,也就是由空格到ASCII碼的127號。想必大家已經發現了,八個字元要放到兩個位元組中去,好象不壓縮一下是不行的。的確,Award是將其壓縮了,但是不是普通的壓縮方法,我想Award另有將其加密的想法,因為在CMOS中空位還很多,要想放八個位元組看來是沒有什麼問題的,不過這麼裸露的密碼就更加沒有什麼用處了。通常的壓縮方式有無損壓縮,如zip,arj等,或者是有損壓縮,象mpeg,jpeg等。但是對這麼幾個位元組,這些方法就沒有什麼用武之地了,而且壓縮過的東西,應該是可以還原的,否則壓來壓去就沒有什麼意義了。不過Award的方法就不同了,他不僅僅進行了超級的有損壓縮,而且這種壓縮是不可還原的,下面就給出他的加密壓縮方法(以下數值,運算均基於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這麼多個可以起相同作用的密碼。但是事實上並不是大家都是八位的密碼,或許沒有大得這麼嚇人,不過也挺多的,就如我那個密碼,光與他相同功能的五位密碼就有二十五萬多個,而六位,七位,八位的更多,數量不詳,因為從來沒有把他算完過,時間太長了,耗不起。所以我隨便把我們研究用的那個小程式附上了,可以搜尋Award的CMOS密碼,大家也可算算看。
CMOS的密碼談的也差不多了,也該停筆了。不過為了減少大家的疑問,再多談幾句。現在的BIOS都比較先進了,在CMOS的設定中,大多有User和SuperVisor密碼的設定,我這裡討論的地址為User的,至於SuperVisor的,自各兒研究吧,因為密碼這個東西,說得太明,大家都沒趣了,對不。好了,就此打住。