小牧童的方法(借用王江民的方法):用UEDIT打开C:\IO.SYS,查找 b9 01 00 cd 13 (msdos6.22只有一处,98有
2 处 ),改为 b9 10 00 cd 13.
自己的分析(可能不正确):
sub bx,bx
mov ax,201h
xor dh,dh
mov cx,1 ;原为读取第1个扇区,改为读第10H个扇区,这样就不会出现死循环了.
int 13h
push es
pop ds
jb TryAgain
cmp word ptr [bx][1fe],0aa55h ;Magict Code
.
.
.
通常硬盘分区表被锁住以后,形成一个闭合的循环链,IO.SYS从链头读起,试图读取所有分区的信息,从而形成死循环。如果修改IO.SYS文件,这样读的第十个扇区结尾处不是0aa55h,就认为不是一个逻辑分区的主引导记录,停止读盘,跳出死循环链。不过据我测试,这样即使硬盘分区表是完好的,启动后也不认硬盘。所以修改IO.SYS以后,如果要正常访问硬盘还要将IO.SYS恢复原状。
以下是源程序。
;==================================================================
; 如果你的硬盘被老王的逻辑锁给锁住了,把这个小工具复制到你的引导盘上,
; 运行它Modify一下,然后用它来引导被锁的机器。一切OK。谢谢小牧童的提示。
; 注意修复硬盘后Restore回来。当然你运行它时,软驱要打开写保护啦:)
;==================================================================
.286
.model tiny
.code
org 100h
start:
jmp Entry
FileName db "io.sys",0
Prompt db 10,9,"I can MODIFY/RESTORE IO.SYS when it is locked by THE LOGIC
LOCK.",13,10
db 9,9,9,"--- By WenXinJY ---",13,10
db "Restore|Modify|Cancel(R/M/C)?$"
Error db "M/R Error!$"
OK db "M/R OK!$"
ModiData db 1
Entry:
mov ah,9
lea dx,Prompt
int 21h
mov ah,0
int 16h
cmp ah,13h ;R/r
jnz Next1
mov dl,1
jmp ModiIt
Next1:
cmp ah,32h ;M/m ;C/c:2Eh
jnz Exit
mov dl,10h
ModiIt:
mov ModiData,dl
mov ax,4301h
mov dx,offset FileName
xor cx,cx
int 21h
jc Err
mov ax,3d02h
lea dx,FileName
int 21h
mov bx,ax
jc Err
mov ax,4200h
xor cx,cx
mov dx,1858h
int 21h
jc Err
mov ax,4000h
mov cx,1
mov dx,offset ModiData
int 21h
jc Err
mov ax,4200h
xor cx,cx
mov dx,18c3h
int 21h
jc Err
mov ax,4000h
mov cx,1
mov dx,offset ModiData
int 21h
jc Err
mov ah,3eh
int 21h
lea dx,OK
jmp DispMsg
Err:
lea dx,Error
DispMsg:
mov ah,9
int 21h
Exit:
mov ah,4ch
int 21h
end start
- 标 题:有台机器被逻辑锁锁住了。修改IO.SYS就可以。编了一个小程序实现使之更简单。 (2千字)
- 作 者:WenXinJY
- 时 间:2001-12-7 17:46:16
- 链 接:http://bbs.pediy.com