程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 再論制硬盤邏輯鎖

再論制硬盤邏輯鎖

編輯:關於C語言
 

一、序言

由於教學工作需要,本人在參看了貴刊98年第4期《硬盤邏輯鎖技術研究及應用》與99年第3期《解開硬盤邏輯死鎖的一種有效方法》的文章之後,決定以同類方法嘗試一下,結果未獲得成功,又“苦於”沒有KV300 L++ 版,不得不自己做一個硬盤邏輯鎖。在制作過程中發現,僅僅只做循環鏈表是不夠的,並不能鎖住硬盤。以下是本人經過多次實驗後,總結出的一套加鎖和解鎖的方法,(本文所述均在本機上獲得通過!)以供大家參考。硬盤邏輯鎖的原理請參見以上文章。


二、制作前的准備:

先將本硬盤(筆者使用的是Quantum SE 3.2G硬盤,C盤2.1G,D盤1.1G)的主引導程序(即0磁頭0柱面1扇區的內容)備份到軟盤中,這裡是保存在軟盤0磁頭0柱面2扇區中,以便萬一做不成功時,進行恢復。

C:/DOS>DEBUG

-a 100

mov ax,201

mov bx,200

mov cx,1

mov dx,80

int 13 ;讀硬盤0磁頭0柱面1扇區的內容到ES:200處

mov ax,301

mov bx,200

mov cx,2

mov dx, 0

int 13 ;寫ES:200處內容到軟盤0磁頭0柱面2扇區

int 3

-g=100

;然後制作一張“啟動盤1” :

-a 200

mov ax,201

mov bx,2000

mov cx,2

mov dx,0

int 13 ;讀軟盤0磁頭0柱面2扇區的內容到ES:2000處

jb 200

mov ax,301

mov bx,2000

mov cx,1

mov dx,80

int 13

jmp ffff:0000

-w 200 0 0 1 ;執行此命令之前插入上述軟盤,將這一段起引導作用的程序寫到軟盤的0磁頭0柱面1扇區,使之成為一張特殊的“啟動盤1”。


三、制作硬盤鎖

我們先看一看硬盤分區表的信息(下述為實例,讀者在操作中,顯示的段地址不一定是1186):

C:/DOS>DEBUG

-a100

1186:0100 mov ax,201

1186:0103 mov bx,200

1186:0106 mov cx,1

1186:0109 mov dx,80

1186:010C int 13

1186:010E int 3

1186:010F ↙

-g=100


-d 3b0 L 50

1186:03B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01

起始磁頭號

起始柱面號(01的高2位並上00)

1186:03C0 01 00 06 7F BF 07 3F 00-00 00 C1 FB 3F 00 00 00

結束磁頭號、扇區號、柱面號(格式同前)

起始扇區號(01的低6位)

1186:03D0 81 08 05 7F FF 0C 00 FC-3F 00 80 1D 20 00 00 00

1186:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

1186:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA


-e 3c2

02 ; 將分區類型 06 改為 02,即XENIX,該字節含義如下:

0-無效分區

1-DOS 12位FAT

2-XENIX

4-DOS 16位FAT 分區容量<32M

5-擴展DOS分區

6-DOS 16位FAT 分區容量>32M

-e3d0

01 00 ;將D區的起始扇區號和柱面號改為與C區相同的起始扇區號和柱面號,形成循環鏈表

-a 100

1186:0100 mov ax,301

1186:0103 ↙


-g=100

;將改後的內容寫入硬盤主引導扇區

-a 100

1186:0100 mov ax,201

1186:0103 ↙


-g=100

;再次讀出硬盤主引導扇區內容

-d 3b0 L 50


1186:03B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01

1186:03C0 01 00 02 7F BF 07 3F 00-00 00 C1 FB 3F 00 00 00

1186:03D0 01 00 05 7F FF 0C 00 FC-3F 00 80 1D 20 00 00 00

1186:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

1186:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA


;顯示表明以上分區表內容已改好

-q

;退出DEBUG,重新啟動系統,一切OK!Haha,軟盤、硬盤都不能啟動系統了!


四、症狀說明:

1.只修改C盤的分區類型,即將分區類型06改為02後,硬盤不能啟動,A盤可以啟動。

2.只做循環鏈表,Win95/98不能啟動,但DOS 6.22可正常啟動,啟動後將有相同容量、相同數據的24個邏輯驅動器(從C盤到Z盤),啟動時提示如下錯誤信息:

Warning:Logical drives past Z exist and will be ignored

筆者在多年前就做過循環分區鏈表,它對DOS 6.22 的啟動可以說無效,但對付DOS 6.22 的FDISK命令很管用,一運行就“死機”(同 Win95/98 啟動一樣,因循環檢查分區鏈表而呈死機狀)。

3.以上兩條都修改後,C盤、A盤的DOS 6.22 都不能啟動,但可用 A 盤的DOS 3.3啟動,啟動後可以運行FDISK命令,也可用DEBUG等工具修改分區表(無需顧及C盤容量是否超過33M)。

由此可見,硬盤邏輯鎖只針對DOS高版本有效,對DOS 3.3根本不起作用,循環鏈表對Win95/98 的DOS 即已經有效。


五、解開硬盤鎖的方法:

采用貴刊98年第4期《硬盤邏輯鎖技術研究及應用》文中所述修改CMOS的方法也無法啟動系統,也就無法解開此邏輯鎖,需在另一台機器上制作一張“啟動盤2”,具體過程如下:


C:/DOS>DEBUG

-a 100

mov ax,201

mov bx,2000

mov cx,1

mov dx,80

int 13

mov al,06 ; C的分區類型改為06

mov [21c2],al

mov al,0

mov [21d2],al ; D的分區類型改為0 ,屏蔽其它分區

mov [21e2],al ; E的分區類型改為0 目的在於破壞循環鏈

mov [21f2],al ; F的分區類型改為0

mov ax,301

mov bx,2000

mov cx,1

mov dx,80

int 13

jmp ffff:0000

-w 100 0 0 1 ;將本段程序寫到軟盤的邏輯0扇區,使之成為引導程序

-q

用作好的“啟動盤2”啟動死鎖機器,然後取出該“啟動盤2”,再次開機切換到DOS 6.22系統,此時用 Norton 的 DISKEDIT.EXE 等工具或直接用 DEBUG 即可修復分區表。

如果按照前面講的將原主引導備份到軟盤物理第二扇,也可以用“啟動盤1”恢復主引導扇區的內容,一啟動即告成功恢復。

 

通訊地址: 430062 湖北大學經濟學院 雷必武
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved