Board logo

标题: [转帖]用51破解计算机的BIOS密码 [打印本页]

作者: linuxarm    时间: 2006-10-27 11:17     标题: [转帖]用51破解计算机的BIOS密码

目前主流计算机的BIOS均为AWARD公司生产的,CMOS开机密码最长为
8个字符,采用穷举法看似有非常多的键盘组合,但经过加密运算后的有效“密文”只
有16位,即65536种,因此有大量“重复”的密码,即虽然输入的键盘组合不一
样,但CMOS中的密文是一样的,实际效果是一样的。对应这65536种密文,每
个密文只需找出一种键盘组合即可。本文讲述如何用单片机来计算出这65536种键
盘组合,并输给计算机,采用穷举法来破译CMOS密码。

 一、CMOS密码加密运算方法

    CMOS加密运算是:从低位到高位每一位的ASCII码左移2(n-1)位之
后相加,其中n为位数,相加结果即为密文,存入CMOS。如果密码位数较多,运算
结果超过16位,则将超出16位的部分再与低16位相加,保留此结果。

以4位密码“abcd”为例,计算机内部是将“d”的ASCII码64H保留,“
c”的ASCII值63H向左移2位,b的ASCII值62H向左移4位,a的A
SCII值61H左移6位,然后将这四个数相加得到一个16位数,此数2050H
即为运算后的密文,存入CMOS。用十进制数表示此过程即为:100+994+
9816+9764=8272转为十六进制为2050H。

二、密文向密码反推算法

    由加密算法可知,肯定会存在多个密码运算后形成的密文相同的情况,因此用一个
密文,可以反推出很多组密码来,我们只需要其中一组即可。

    从10进制的角度出发,密码的ASCII码与密文的关系符合如下方程:

X1×1+X2×4+X3×16+X4×64+X5×256… …=密文

其中X1,X2,X3,X4等分别为密码从低到高位的ASCII码。这是一个不定
方程,所有符合下列两个条件的解都满足要求:

1. X1,X2,X3,X4……为整数。

2. X1,X2,X3,X4……的值大于等于32,小于等于126(键盘向计算机
输入的字符ASCII值最小为32,最大126)。

求出任意一组符合要求的解后,每一个数字查ASCII码表,换成对应的字符,即可
作为计算机开机密码。以刚才密码为“abcd”为例,运算后密文十进制数为827
2,用凑数的办法可知以下等式也成立:104+984+9816+9764
=8272,查ASCII码表可知979898104对应的字符为a,b
,b,h,因此“abbh”也可以做为开机密码开启电脑。用程序来求解这个方程有
多种计算方法。最简单的采用几个变量累加的办法求解,但收敛速度慢,有其它收敛速
度非常快的算法,本文不再赘述。

三、键盘接口原理

   PC系列键盘采用行列扫描法识别按下的键,键盘的扫描控制电路的核心是804
8单片机,执行固化在ROM中的键盘扫描程序,当有键按下时,产生接通扫描码,而
该按键松开时,产生断开扫描码。键盘向计算机发送的数据为扫描码,与该键的ASC
II码并不相同,其关系如下表所示,计算机接收到此扫描码可求出按键的ASCII
码:

    键的接通扫描码用上表所示一个字节表示,断开扫描码由接通扫描码加上80H而
得。例如,“D”键按下后又松开,则键盘控制器先输出23H,再输出A0H。

目前主机板上键盘的插座主要有两种接口,一种为老式的大五芯接口:其接口定义为:
1Clock  2Data  3Not connected  4GND  5
Vcc+5V

目前较常见为小的六芯接口:其接口定义:1:Data  2not connect
ed  3 GND  4VCC+5V  5CLOCK  6NOT CONNEC
TED,键盘扫描码经8048单片机通过data和clock两根信号线进行串行
移位输出,串行序列发送时以clock信号的上升沿为准。四、用单片机来实现

    单片机硬件很简单,从键盘插头中的data与clock信号接至单片机的两个
I/O口,键盘接口中的VCC与GND信号直接向单片机供电,通过对单片机I/O
口编程,控制data与clock的动作,实现向计算机传输数据。单片机内部从0
开始,一直到65535,每一个密文经过程序反推出一组“键盘密码”,查出对应的
键盘扫描码,依次发向计算机,然后发回车键。计算机接收到密码和回车后,开始校验
密码,若密码不能通过验证,计算机会提示用户密码错误,单片机再发送下一组密码,
依次循环。每秒种计算机可校验约10组密码,65536组密码两个小时可全部校验
完毕,对于5位以下的密文,几分钟即可通过校验。


操作方法:按正常顺序打开计算机,在计算机提示输入密码的时候,将键盘插头拨下,
把单片机上的键盘插头插在主机上,单片机上电后自动向计算机发送各组数据,直到其
中有一组数据通过密码校验,计算机加载操作系统。此时将单片机电路拨下,将键盘插
上即可正常操作。操作系统加载成功后,可用其它软件获取CMOS密码,下次启动计
算机时即可用获取的密码进入操作系统。

    本方法已采用AT89C51单片机上,用Franklin C编程实现,在多台
BIOS为AWARD公司生产的计算机上试验通过。


作者: jadyhui@163.com    时间: 2006-10-27 11:19

漂亮!!!!!
作者: ee168    时间: 2006-10-27 11:33

计算机怎么告诉你密码正确还是不正确,眼睛看吗?
累死
作者: ee168    时间: 2006-10-27 11:34

我想错了,是应该可以,不停的输入,不管正确否,正确了仍然照常输入,只是没有产生影响,但是你还是不知道密码啊
作者: diweo    时间: 2006-12-1 11:22

高。


作者: diweo    时间: 2006-12-1 11:55

不过我试了一下不行啊。主板是Phinex-Award的,我就设密码为abcd,重启后输入abbh提示密码错误。


作者: bububu    时间: 2006-12-9 09:49

这种做法慢了点


作者: zyalxl    时间: 2006-12-12 15:35

猛人啊,不知道到底能成功吗


作者: wchj42    时间: 2006-12-25 15:40

要是再有原理图说明更好!!!!!!
作者: 隐忍    时间: 2007-1-10 15:05

有点不对哈,你输了密码,但是需要按回车,但是你在程序中需要设计一个回车的关键码,然后在PC进行密码校验的时候,你的单片机就已经开发发送第二组密码了,就会产生密码错位的情况,如果你在单片机中加延时程序的话,效率又低了。你可以把电脑的报警电路就是密码错误后,(电脑会产生一个声音,提示密码错误。)将这个线连出来,接单片机,就会保证码率的正确性了。(难度大了点。要修改电脑电路。汗!还是采用延时程序好点)

还有就是,好象现在电脑的bios密码输入三次不正确的话,不能重输吧。


作者: 记忆深埋    时间: 2007-1-19 22:29

不要去了
天气太冷了


作者: zzx3111    时间: 2007-2-10 13:07

好!!
作者: luoqiang198082    时间: 2007-8-18 11:36

把代码发上看看

作者: ivw2008fun    时间: 2007-8-25 22:06

直接清除就是了,主板都可以的。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0