Reader's Digest

Digest your Internet

用debug消除CMOS密码

Written By: dch1 - May• 01•08
关于用debug消除CMOS密码,本版以前有帖子谈过,但无外乎只是写出语句,没有讲明原因。为了让大家知其所以然,我把原理讲一下。

首先是CMOS,它只储藏了256字节的信息。但却包括时间、密码、硬盘参数、和BIOS设置值等信息。具体每种数据所对应的CMOS地址,许多DOS时代的编程爱好者或许知道HELPPC,我就是在那里查到的。除了前面几位地址存储的时间外,后面的数据都加了校验。一旦用非正规方式改变其值后(如用DEBUG强行写入、改硬盘的IDE口、病毒破坏等)。校验出错会使其自动读取BIOS默认值,因而达到清除密码和恢复CPU默认频率的作用。知道这些后,编程就是件小事了。
  如:
  debug
  -o 70 10 “往CMOS的地址为10的字节写数据”
  -o 71 11 “写入11H”
  -q
  现在我们能理解70、71端口的意思了吧,后面的11可以换为任意数值。而10可以换为除00到08还是0A的任意数值(因为这几位都是存放的时间,可惜我忘了究竟是几位了)。
现在我们也可以编一个10字节的程序来实现该功能:
  debug
  -a
  xxxx:0100 mov al,33
  xxxx:0102 out 70,al
  xxxx:0104 mov al,44
  xxxx:0106 out 71,al
  xxxx:0108 int 20
  xxxx:010A
  -r cx
  cx 0000:0a
  -n decmos.com
  -w
  -q
  一个小程序就完成了。同样使用就使用IN语句可以实现读取时间、CMOS密码(我试过,读出的只是编码后的码而已)等功能。这就是70、71的端口的作用。大家都可以来试试,有什么不明白的尽管提出来。另外,这是我大二的事了,很多地方已记不太清楚,有错的地方还希望大家来指正! 当然从汇编上考虑,可以去掉mov al,44一句把文件变成8个字节,在纯DOS环境还可以加上jmp FFFF:0000 重启。

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.