目前主流计算机的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+994+ 9816+9764=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+984+9816+9764 =8272,查ASCII码表可知979898104对应的字符为a,b ,b,h,因此“abbh”也可以做为开机密码开启电脑。用程序来求解这个方程有 多种计算方法。最简单的采用几个变量累加的办法求解,但收敛速度慢,有其它收敛速 度非常快的算法,本文不再赘述。 三、键盘接口原理 PC系列键盘采用行列扫描法识别按下的键,键盘的扫描控制电路的核心是804 8单片机,执行固化在ROM中的键盘扫描程序,当有键按下时,产生接通扫描码,而 该按键松开时,产生断开扫描码。键盘向计算机发送的数据为扫描码,与该键的ASC II码并不相同,其关系如下表所示,计算机接收到此扫描码可求出按键的ASCII 码: 键的接通扫描码用上表所示一个字节表示,断开扫描码由接通扫描码加上80H而 得。例如,“D”键按下后又松开,则键盘控制器先输出23H,再输出A0H。 目前主机板上键盘的插座主要有两种接口,一种为老式的大五芯接口:其接口定义为: 1Clock 2Data 3Not connected 4GND 5 Vcc+5V 目前较常见为小的六芯接口:其接口定义:1:Data 2not connect ed 3 GND 4VCC+5V 5CLOCK 6NOT 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公司生产的计算机上试验通过。 |