浅析Award BIOS密码的破解
2007-01-12 20:13:32 来源:WEB开发网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 于太原
更多精彩
赞助商链接