因教學需求,筆者參閱了《電腦報》98年第4期《硬碟邏輯鎖技術研究及應用》與99年第3期《解開硬碟邏輯死鎖的一種有效方法》兩篇文章,嘗試以同類方法實作,但未獲成功。又苦於手邊沒有 KV300 L++ 版工具,只能自行設計一套硬碟邏輯鎖。經多次實驗發現,單純建立循環鏈表並不足以鎖住硬碟,必須結合分區類型修改才能生效。以下總結一套經實測可行的加鎖與解鎖流程,供參考。硬碟邏輯鎖的基本原理請參考上述文章。
首先備份硬碟的主引導記錄(MBR,即 0 磁頭 0 柱面 1 扇區)到軟碟,以便失敗時恢復。筆者使用的是 Quantum SE 3.2GB 硬碟(C 槽 2.1GB,D 槽 1.1GB),將 MBR 存放在軟碟的 0 磁頭 0 柱面 2 扇區。
C:/DOS> DEBUG -a 100 mov ax,201 mov bx,200 mov cx,1 mov dx,80 int 13 ; 讀硬碟 MBR 到 ES:200 mov ax,301 mov bx,200 mov cx,2 mov dx,0 int 13 ; 寫入軟碟第 2 扇區 int 3
接著製作一張「啟動盤 1」,用於日後恢復 MBR:
-a 200 mov ax,201 mov bx,2000 mov cx,2 mov dx,0 int 13 ; 讀軟碟備份內容到 ES:2000 jb 200 mov ax,301 mov bx,2000 mov cx,1 mov dx,80 int 13 ; 寫回硬碟 MBR jmp ffff:0000 ; 重啟 -w 200 0 0 1 ; 寫入軟碟 0 磁頭 0 柱面 1 扇區,成為啟動盤 1
先查看硬碟分區表資訊(以下為實例,實際段地址可能不同):
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 -g=100 -d 3b0 L 50
分區表關鍵字節說明:
修改步驟:
-e 3c2 02-e 3d0 01 00-a 100 / mov ax,301 / -g=100-d 3b0 L 50 確認 03C2 已變 02,且 D 槽起始位址與 C 槽一致。重啟後,軟碟、硬碟均無法啟動系統,鎖定成功。
結論:硬碟邏輯鎖僅針對高版本 DOS/Windows 有效,對 DOS 3.3 無效;循環鏈表對 Win95/98 的 DOS 已生效。
修改 CMOS 參數無法解開此鎖,需在另一台電腦製作「啟動盤 2」:
C:/DOS> DEBUG -a 100 mov ax,201 mov bx,2000 mov cx,1 mov dx,80 int 13 ; 讀硬碟 MBR 到 ES:2000 mov al,06 mov [21c2],al ; 將 C 槽分區類型改回 06 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 扇區,成為啟動盤 2
用啟動盤 2 啟動被鎖電腦,取出軟碟後再啟動 DOS 6.22,即可用 Norton DiskEdit 或 DEBUG 修復分區表。若有啟動盤 1(備份 MBR),直接啟動即可一鍵恢復。
通訊地址:430062 湖北大學經濟學院 雷必武