您的位置:首页精文荟萃破解文章 → 浅析Award BIOS密码的破解

浅析Award BIOS密码的破解

时间:2004/10/15 0:50:00来源:本站整理作者:蓝点我要评论(0)

 

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




源程序:


#include
#include
#define ON 0
#define OFF 1
void change(unsigned char x,unsigned char y)
{
outportb(0x70,x);
outportb(0x71,y);
}
unsigned int sum()
{
int i;
unsigned int s=0;
for(i=0x10;i<=0x2d;i++)
{
outportb(0x70,i);
s+=inportb(0x71);
}
return(s);
}
void chsum()
{
unsigned int s;
s=sum();
change(0x2e,s>>8);
change(0x2f,s<<8>>8);
}
void clear()
{
unsigned char a;
outportb(0x70,0x11);
a=inportb(0x71)-0xc0;
change(0x11,0xc0);
chsum();
outportb(0x70,0x62);
if(inportb(0x71)==0xff)
{
outportb(0x71,0xff-a);
outportb(0x70,0x7b);
a=inportb(0x71)-a;
change(0x7b,a);
}
}
void display()
{
int i,j=0;
printf("Your Bios Mem at 0x10--0x7f:\n");
for(i=0x10;i<=0x7f;i++)
{
outportb(0x70,i);
printf("%4x",inportb(0x71));
j++;
if(j%16==0) printf("\n");
}
}
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;
}
void chpass(char str[8])
{
change(0x1c,code(str)%0x100);
change(0x1d,code(str)/0x100);
chsum();
}
unsigned int getpass1(char i)
{
unsigned int a,b,p;
unsigned char x;
if(i==0) x=0x1c;
if(i==1) x=0x63;
outportb(0x70,x);
a=inportb(0x71);
outportb(0x70,x+1);
b=inportb(0x71);
p=(b<<8)+a;
return(p);
}


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[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);
}
main()
{
unsigned char *p;
clrscr();
textmode(3);
printf("Award Bios Password Crack v2.0\nWritten By Yuky (Add:97091B2,NCIT)\n");
display();
p=crack(0);
printf("Your BIOS Superviosr Password:");
textcolor(RED+BLINK);
cprintf("%s\n",p);
printf("\n");
printf("Your BIOS User Password:");
textcolor(GREEN+BLINK);
cprintf("%s",crack(1));
}





    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程