淺析Award BIOS密碼的破解(910字)

看雪資料發表於2015-11-15

Award BIOS版本有很多,有些有通用密碼,但加密演算法幾乎沒變,C語言演算法描述
為:

int code(char str[8])
{
short i=0,ren;
int bin;
bin=str[i++];
while(str[i])
{
bin=bin<<2;
ren=str[i++];
bin+=ren;
}
return bin;
}

是將輸入的字元左移兩位加下一個字元,直到最後擴充到一個字,Superior 
Password存放在BIOS的0x1c或0x3a處,User Password存放到0x63處,不同的版本可
能會不同。從加密演算法看是有損加密,無法從密文反推得出密碼,我用了一種方法。
還有很多其他的方法,比如窮舉法,也很容易,可以分別在數字、小寫字母、大寫字
母範圍中窮舉。

我的方法是(不要看我,我可想不出來):密碼長不超過8位,透過近位迴圈左移兩
位,可表示為4a-164k+k,其中a為密碼,k=0-3,用數學式表示為:(...((4a7-
65535k7+a6)4-65535k6+a5)...)4-65535k1+a0=w其中ai 為密碼,ki=0-3,w為密
字,考慮到前5位密碼的迴圈左移等於算術左移,即k7..k4=0,所以又可簡化為:
47a7+46a6+...+a0=w+65535(42k3+4k2+k1)
式中42k3+4k2+k1,記為k,則k只有0-41共42個可能取值,要破密碼,無非是求ai在
32-126之間的整數解,下面給出我的程式:

unsigned char *crack(char f)
{
char i=0,j=0,k=1;
unsigned int p,s=0,a=1,t;
unsigned char *b;
p=getpass1(f); 取出密字
do
{
s+=a;
t=floor(p/s);
i++;
a*=4;
}
while(t<32||t>126);
b=malloc((unsigned char*)i);
b[0]=t;
for(i=i-1;i>0;i--)
{
p-=b[j++]*pow(4,i);
s-=pow(4,i);
b[k++]=floor(p/s);
}
b[k]=0;
return(b);b即為密碼
}

整個過程就是這樣,如果有錯請告訴我。詳細的程式可到曉光之家下載。
還有程式只有在進入作業系統後才能執行,如果密碼設的是System方式,則進不到系
統,只好放電了:(..

我有一個想法,就是製作一個模擬鍵盤的裝置(可控制鍵盤也行),可以向鍵盤介面
(串列埠、PS/2)傳送ASCII碼,只要編一個小程式,讓它不斷的傳送數字和回車,用窮
舉法擊破它,可破解System的密碼。據我所知,用硬體破密碼的還不多,現在我正在
學習微控制器,鄙人才疏學淺,不知能否做到,哪位有高招不妨交流一下。

2000.11.20 於太原

相關文章