對於CMOS而言,破解CMOS密碼的文章有不少。在這裡說明如何解開CMOS密碼。Award允許一位至八位密碼,每一個字元的範圍由20H-7FH,也就是由空格到ASCII碼的127號。八個字元要放到兩個位元組中去,是需要壓縮的。
主要結構,密碼規則,實例,通用密碼,破解程式,
主要結構
先向大家說明一下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另有將其加密的想法,因為在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=86H,H3=15H,所以3AH的值為86H,38H的值為15H。看來密碼就這么簡單,在你每次輸入密碼的時候,BIOS將其算算,再與CMOS中的值比較一下,如果一樣就放行,否則免談。過程就是這樣,不過還是有些問題要說明,先算算看,兩個位元組可以表達的密碼可以有多少種:164=65536種,而八位密碼,每一位有96種選擇,則可以表示的密碼有:968≈7.2×1015種,所以理論上說,每一個密碼,都可以找出大約1011這么多個可以起相同作用的密碼。但是事實上並不是大家都是八位的密碼,或許沒有大得這么嚇人,不過也挺多的,就如我那個密碼,光與他相同功能的五位密碼就有二十五萬多個,而六位,七位,八位的更多,數量不詳,因為從來沒有把他算完過,時間太長了,耗不起。
通用密碼
Award4.51版以前的才有通用密碼,
wantgirl
Syxz(pay attension to the capital letter)
dirrid
wnatgirl
破解程式
在這裡再向大家介紹一下復旦網友們的破解程式:(道德感不佳者和功力不夠深者略過)
(零)
這個是斑竹偶(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:mecad @server20. hust. edu. cn
#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[an error occurred while processing this directive]
cartoonboy
用DEBUG 破解
1. 用dos盤啟動
2. 在命令提示符後面輸入 debug -o 70 10
3.重啟電腦cmos密碼清空了。