程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 再談CMOS密碼

再談CMOS密碼

編輯:關於C++

對於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的,自各兒研究吧,因為密碼這個東西,說得太明,大家都沒趣了,對不。好了,就此打住。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved