正文

用单片机破译计算机开机密码2006-11-16 14:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/embed/20373.html

分享到:

用单片机破译计算机开机密码

 

发信人: oBigeyes (以不变应万变), 信区: Circuit
标  题: 用单片机破译计算机开机密码zz
发信站: 水木社区 (Thu Jun 22 02:19:23 2006), 站内


    目前主流计算机的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公司生产的计算机上试验通过。

阅读(5049) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册