荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jek (好好学习天天向上), 信区: Program
标  题: 动态改变CMOS密码的方法
发信站: BBS 荔园晨风站 (Sat Mar 11 14:41:32 2000), 转信


    现代微机的CMOS设置中均有密码,但单一的密码可能被旁人偷看,例如公共机房的超
级用户专用机等。那么CMOS的密码能否动态改变?这样较为保险,经过思考,想出了一种方
法,思路如下:


微机中的CMOS信息是可以更改的,因此我们可以编制类似的程序,将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>
main()
{
FILE *fp;
int indexport=0x70,dataport=0x71,i;
char data[256]; /*此程序读出256字节*/
fp=fopen("c:\\cdata.dat","wb");
for (i=0;i<256;i++)
{outportb(indexport,i); /*定位数据端口*/
data[i]=inportb(dataport);/*从端口读字节*/
}
fwrite(data,1,256,fp);/*写字节到文件*/
fclose(fp);
}
    上述的程序将当前的CMOS数据读出并保存.根据此原理,我们可以在CMOS中分别设置三
次密最多试三次就可解密,但旁人无法知其奥妙,就不好将密码试出来了.从文件将密码读
出的程序如下:
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char *filename[]={"c:\\cdata01.dat","c:\\cdata02.dat","c:\\cdata03.dat"};
main()
{
FILE *fp;
int indexport=0x70,dataport=0x71,i;
char data[256],num;
num=random(3);
fp=fopen(filename[num],"rb");/*随机取三个文件名*/
fread(data,1,256,fp);
for (i=0;i<256;i++)
{outportb(indexport,i); /*定位数据端口*/
outportb(dataport,data[i]);
}
fclose(fp);
}
    将此文件编译后加在自动批处理文件中,每次启动后,自动恢复三个密码中的一个,实
现了CMOS动态密码.在以上的思路中,可以编程控制密码根据某种情况具体变化,就看你怎
么想了.



--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.118]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店