扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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 <math.h>
#include <conio.h>
#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));
}
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。