深 入 剖 析 CMOS (含源代码)

类别:VC语言 点击:0 评论:0 推荐:

 

                                         CMOS密码的破解

                                                                                             

有关CMOS密码的破解,我们已看到了很多文章,多数破解方法如下:

在dos下输入debug命令
-o 70 1
-o 71 1
-q

   但这实际上只是针对比较老的386,486机器,而对于现在586,686的机器可以说基本上无效,不信你可以在你的机器上试一试.
   在这里我首先必须谈一谈有关CMOS密码破解的原理.基于IBM PC的机器分配了70H和71H端口给CMOS,通过这两个端口我们可以访问或者修改CMOS的配置信息.首先通过访问70H,确定访问CMOS的地址(0H-80H),然后通过向确定后的CMOS地址输入适当的数据,来达到破坏CMOS校验和的目的.在这里我必须还要说明一下,大多数AWARD BIOS在CMOS地址38H-3DH保存经过HASH算法加密的密码,但这并不一定,所以我们不需要确定CMOS保存密码的地址,只需破坏CMOS校验和,即可达到CMOS密码的破解,下面我给出破解程序:
在dos下输入debug命令
-A 100
-15D2:0100 MOV AL,10 (此处为0-100的任意值)
-15D2:0102 OUT 70,AL (直接访问I/O端口必须通过AL寄存器)
-15D2:0104 OUT 71,AL (破坏校验和)
-15D2:0106 INT 20 (结束程序)
-15D2:0108 (回车)
-G=0100 (执行程序)
-Q
    此程序在多台AWARD或AMI机器上通过.请注意:在windowsNT,windows2000下,很多破解程序都无法使用,原因在于WindowsNT的DOS是模拟的,禁止对CMOS写入.

                                 


CMOS的备份和恢复

    CMOS设置对于一般的电脑使用者是一件比较头疼的事,别人帮你把CMOS设置好,但当突然停电或者忘记了密码,需要重新设置CMOS,对于初学者是一件比较头疼的事,只好又去求教别人.正是基于此,为什么不能将配置好的CMOS保存起来,当需要重新设置时,再运行程序恢复即可,就可免去了重新配置之苦.当然我们还可从读出cmos的信息文件中得到我们想要的"东东".
CMOS是一个128字节大小的储存区, 它存放了有关机器BIOS配置的重要信息,而BIOS内有CMOS的设置程序.基于IBM PC的机器分配了70H和71H端口给CMOS,通过这两个端口我们可以访问或者修改CMOS的配置信息.访问70H,确定访问CMOS的地址(0H-80H),然后通过向已确定后的CMOS地址来访问71H数据端口,从而达到访问或者修改CMOS内数据的目的.而汇编程序正是对CMOS访问或者修改的最佳选择,以下两个程序cmos.exe和restore.exe即是用汇编语言写出来的,cmos.exe是备份你的cmos配置程序,restore.exe是恢复你所备份cmos的程序.

;***********************************************
;this is cmos asm file,it could backup your cmos
;***********************************************
title first
data segment
na db 'cmos.dat',0
buffer db 80H dup(?)
handle dw ?
data ends
code segment
assume ds:data,cs:code
main proc far
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov cx,0
lea bx,buffer
mov ax,0
get: out 70H,al ;get your cmos configuration(得到你的cmos配置信息)
in al,71H
mov [bx],al
inc cx
inc bx
mov ax,cx
cmp cx,80H
jb get 
mov ah,3cH ;create a new file(调用int21H新建一个文件)
lea dx,na
mov cx,20H
int 21H 
mov handle,ax
mov ah,40H ;write to the new file(调用int21H向这个文件写cmos的配置信息)
mov bx,handle
lea dx,buffer
mov cx,80H
int 21H
ret
main endp
code ends
end start 



;***************************************************
;this is restore asm file,it could restore your cmos
;***************************************************
title restore
data segment
na db "cmos.dat",0
buffers db 80H dup(?)
data ends
code segment
assume cs:code,ds:data
main proc far
begin: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea dx,na ;get the file handle and open the file(得到cmos.dat文件的文件号后,打开该文件)
mov al,0
mov ah,3dH
int 21H
mov bx,ax ;read the file(读文件内容)
mov cx,80H 
mov ah,3fH
lea dx,buffers
int 21H
mov cx,0
mov ax,0
lea bx,buffers
write: out 70H,al ;restore cmos (恢复cmos的配置)
mov ax,[bx]
out 71H,al
inc cx
inc bx
mov ax,cx
cmp cx,80H
jb write
ret
main endp
code ends
end begin

    这两个程序在我的AWARD BIOS的机上调试通过,支持目前大多数IBM兼容PC机.我用masm编译器得到了cmos.exe,restore.exe两个可执行文件.必须注意的是,当你运行cmos.exe之后,在程序所在的目录下得到了一个128字节的cmos.dat文件,这个文件既是CMOS的配置文件,这个文件是个二进制文件,需要用二进制编辑器如winhex来查看,可以很方便得查看cmos的配置.运行恢复程序restore.exe程序时,需要将cmos.dat文件拷贝到restore.exe程序所在的目录.如果大家没有汇编编辑器可以到我的网站去下载(http://owlbird.xiloo.com/download.htm),提供了汇编编辑器及已编译好的程序. 请注意:在windowsNT,windows2000下,很多直接访问cmos程序都无法使用,原因在于WindowsNT的DOS是模拟的,禁止对CMOS写入.






owlbird工作室版权所有,若要转载请务必与我们联系

本文地址:http://com.8s8s.com/it/it2234.htm