• 标 题:浅析Award BIOS密码的破解(910字)
  • 作 者:yuky
  • 时 间:2000.11.20 17:22

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 于太原