CMOS密码动态改变的方法

Author: 邵青 Date: 2001年 21期

?牐犛泄仄平釩MOS密码的方法技巧,有关文章已经介绍过很多了。现在,电脑的CMOS中设置的密码都是单一且固定的,破解的概率相对较大,那么CMOS的密码能否动态改变﹖这样较为保险,经过思考,想出了一种方法,思路如下:
  ?牐牭缒灾械腃MOS信息是可以更改的,因此我们可以编制类似的程序,将CMOS中的信息读出保存,需要时从磁盘文件上恢复.一般来说,CMOS主体信息长度为64字节,其中包括各种计算机参数和CMOS密码,其索引端口号为70H,数据端口号为71H,有些资料上介绍开机状态下清除CMOS密码用的下面的两条DEBUG指令:
  ?牐?-O 70,23
  ?牐?-O 70,34
  ?牐犉渲?23和34为随机数,这种方法清除CMOS的原理是改写CMOS的第23H字节的内容为34H,只要原CMOS第23H字节的内容不是34H,就会导致计算机在启动时CMOS数据校验通不过而使CMOS数据失效,所以在一般情况下,我们不能直接修改CMOS中的数据,但是我们如果修改后使其通过校验的话,则也可以使其内容满足我们的需要,但一般人对其数据校验原理并不知情,我们可否用其它的方法来间接实现呢﹖可以,本人实现的方法就是保存数次CMOS的设置,然后根据需要将其从磁盘上恢复到CMOS上去。下面是在TC 2.0中实现的将CMOS读出保存为磁盘文件CDDATA.DAT的程序??
  ?牐?#include <dos.h>
  ?牐?#include <stdio.h>
  ?牐?#include <stdlib.h>
  ?牐爉ain()?煟?
  ?牐牓煟?
  ?牐燜ILE *fp;??
  ?牐爄nt indexport=0x70,dataport=0x71,i;??
  ?牐燾har data[256];/*读出256字节*/
  ?牐爁p=fopen("c:\\cdata.dat"."wb");?牔?
  ?牐爁or(i=0;i<256;i++)??
  ?牐牓煟鹢utportb(indexport,i);/*定位数据端口*/
  ?牐燿ata[i]=inportb(dataport);/*从端口读字节*/
  ?牐牓牐?
  ?牐爁write(data,1,256,fp);/*写字节到文件*/
  ?牐爁close(fp);?牔?
  ?牐牓牐?
  ?牐犐鲜龅某绦蚪鼻暗腃MOS数据读出并保存。根据此原理,我们可以在CMOS中分别设置三次密码,每次保存为一个文件,三个文件分别取名,如:cdata01.dat,cdata02.dat,cdata03.dat,如保存的CMOS密码分别为"111","222","333",然后随机从磁盘文件读出写入CMOS中,开机时就不定是哪一个密码了,最多试三次就可解密,但旁人无法知其奥妙,就不好将密码试出来了。从文件将密码读出的程序如下??
  ?牐?#include <dos.h>
  ?牐?#include <stdio.h>
  ?牐?#include <stdlib.h>
  ?牐?#include <time.h>
  ?牐燾har *filename[]={"c:\\cdata01.dat","c:\\cdata02.dat","c:\\cdata03.dat"};?牔?
  ?牐爉ain()?煟?
  ?牐牐?
  ?牐燜ILE*fp;??
  ?牐爄nt indexport=0x70,dataport=0x71,i;??
  ?牐燾har data[256],num;??
  ?牐爊um=random(3);?牔?
  ?牐爁p=fopen(filename[num]."rb");/*随机取三个文件名*/
  ?牐爁read(data,1,256,fp);?牔?
  ?牐爁or (i=0;i<256;i++)??
  ?牐牓煟鹢utportb(indexport,i);/*定位数据端口*/
  ?牐爋utportb(dataport,data[i]);?牐牔?
  ?牐牓牐?
  ?牐爁close(fp);??
  ?牐牓牐?
  ?牐牻宋募嘁牒蠹釉谧远?理文件中,每次启动后,自动恢复三个密码中的一个,实现了CMOS动态密码。在以上的思路中,可以编程控制密码根据某种情况具体变化,就看你怎么想了。
  ?牐牨嗪笥铮喝贸绦蚨厣瓒?密码的确是一个好方法,但这种方法并不安全,频繁地写入(指每启动一次机器就写入一次密码)有可能引起数据的丢失或误传,从而造成不能进入CMOS或使系统处于不稳定的运行状态,所以请大家在测试前做好准备工作。