首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

組合語言實作:硬碟保護鎖(MBR 級防盜啟動鎖)原理與原始碼深度解析

     編輯:組合語言

前言

這是一個基於 MBR(主開機記錄)的硬碟鎖定程式,包含兩個檔案:hdlock.exe(安裝/管理工具)與 hdlock.dat(寫入 MBR 的 512 位元組開機區程式碼)。其核心思想是攔截開機流程,在作業系統載入前要求輸入密碼,正確則恢復原始 MBR 與分區表繼續開機,錯誤則寫入「江明鎖」(讓擴展分區指向自己造成死循環)徹底鎖死硬碟,甚至無法從軟碟/光碟/USB 開機存取資料。

hdlock.dat:MBR 級核心程式碼(反組譯註釋)

1. 自我搬移至 0000:0600 避免被覆蓋

0F6D:0100 1E PUSH DS
0F6D:0101 06 PUSH ES
0F6D:0102 B90001 MOV CX,0100
0F6D:0105 BF0006 MOV DI,0600
0F6D:0108 B80000 MOV AX,0000
0F6D:010B 8ED8 MOV DS,AX
0F6D:010D 8EC0 MOV ES,AX
0F6D:010F BE007C MOV SI,7C00
0F6D:0112 F2 REPNZ
0F6D:0113 A5 MOVSW
0F6D:0114 EA1A060000 JMP 0000:061A ; 長跳轉至搬移後代碼

2. 螢幕初始化與密碼提示

0F6D:0125 B80006 MOV AX,0600
0F6D:0128 B7F0 MOV BH,F0
0F6D:012A B90000 MOV CX,0000
0F6D:012D BA4F18 MOV DX,184F
0F6D:0130 CD10 INT 10 ; 初始化螢幕(黑前景、灰背景、閃爍)
0F6D:0132 B21A MOV DL,1A
0F6D:0134 BE1C06 MOV SI,061C ; 顯示 "PASSWARD"
...
0f6d:011c db 'PASSWARD'00

3. 密碼輸入與簡易混淆(加 0x23)

0F6D:0160 B90400 MOV CX,0004
0F6D:0163 B80000 MOV AX,0000
0F6D:0166 8EC0 MOV ES,AX
0F6D:0168 BF0108 MOV DI,0801 ; 緩衝區 8 字節
0F6D:016B F3 REPZ
0F6D:016C AB STOSW
0F6D:016D B90900 MOV CX,0009 ; 最多 9 次輸入(含回車)
0F6D:0170 BF0108 MOV DI,0801
0F6D:0173 B223 MOV DL,23
0F6D:0175 B400 MOV AH,00
0F6D:0177 CD16 INT 16 ; 讀鍵盤
0F6D:0179 3C0D CMP AL,0D
0F6D:017B 7479 JZ 01F6 ; 回車 -> 比對密碼
...
0F6D:0195 0423 ADD AL,23 ; 簡易混淆:密碼字元 + 0x23
0F6D:0197 8805 MOV [DI],AL

4. 密碼比對與開機分流

0F6D:01F6 B80000 MOV AX,0000
0F6D:01F9 8EC0 MOV ES,AX
0F6D:01FB 8ED8 MOV DS,AX
0F6D:01FD BEB007 MOV SI,07B0 ; 儲存正確密碼雜湊位置
0F6D:0200 BF0108 MOV DI,0801 ; 輸入密碼緩衝區
0F6D:0203 B90400 MOV CX,0004
0F6D:0206 F3 REPZ
0F6D:0207 A7 CMPSW
0F6D:0208 7404 JZ 020E ; 相同 -> 正確開機
0F6D:020A EB3C JMP 0248 ; 不同 -> 寫入江明鎖並重啟

5. 正確開機:恢復原始 MBR 與分區表

0F6D:020E B80000 MOV AX,0000
0F6D:0211 8EC0 MOV ES,AX
0F6D:0213 B80102 MOV AX,0201
0F6D:0216 B90200 MOV CX,0002
0F6D:0219 BA8000 MOV DX,0080
0F6D:021C BB00F0 MOV BX,F000
0F6D:021F CD13 INT 13 ; 讀第 2 扇區(含正確分區表的備份)
0F6D:0221 B80103 MOV AX,0301
0F6D:0224 B90100 MOV CX,0001
0F6D:0227 BA8000 MOV DX,0080
0F6D:022A CD13 INT 13 ; 寫入第 1 扇區 (MBR) -> 系統正常開機
0F6D:022C B80000 MOV AX,0000
0F6D:022F 8EC0 MOV ES,AX
0F6D:0231 B80102 MOV AX,0201
0F6D:0234 B90300 MOV CX,0003
0F6D:0237 BA8000 MOV DX,0080
0F6D:023A BB007C MOV BX,7C00
0F6D:023D CD13 INT 13 ; 讀第 3 扇區(原始 MBR 備份)至 7C00
0F6D:023F EA007C0000 JMP 0000:7C00 ; 跳轉執行原始 MBR

6. 錯誤處理:寫入江明鎖並熱重啟

0F6D:0248 B80000 MOV AX,0000
0F6D:024B 8EC0 MOV ES,AX
0F6D:024D B80102 MOV AX,0201
0F6D:0250 B90400 MOV CX,0004
0F6D:0253 BA8000 MOV DX,0080
0F6D:0256 BB00F0 MOV BX,F000
0F6D:0259 CD13 INT 13 ; 讀第 4 扇區(含江明鎖邏輯的程式碼)
0F6D:025B B80103 MOV AX,0301
0F6D:025E B90100 MOV CX,0001
0F6D:0261 BA8000 MOV DX,0080
0F6D:0264 CD13 INT 13 ; 寫入第 1 扇區 -> 硬碟被鎖死
0F6D:0266 CD19 INT 19 ; 熱重啟

hdlock.exe:安裝/管理工具核心邏輯

工具提供三大功能:

  1. 安裝:讀取 hdlock.dat,提示輸入兩次密碼驗證一致性,將密碼雜湊(+0x23)寫入程式碼對應位置,依序寫入硬碟第 1、2、3、4 扇區(MBR、正確備份、原始 MBR 備份、江明鎖程式碼)。
  2. 修改密碼:驗證舊密碼後重新寫入新密碼雜湊。
  3. 卸載:驗證密碼後將原始 MBR 從第 3 扇區恢復至第 1 扇區。

安全性缺陷與作者遺留問題

「如果電腦主人上次用正確密碼進入了電腦,而電腦非法使用者一次都不試密碼,就直接用軟盤或光盤或USB盤引導,那麼就可以非法訪問硬碟了」

原因在於:正確密碼開機時,程式將「正確分區表」寫回 MBR,此後硬碟處於解鎖狀態,直到下次開機輸入錯誤密碼才會寫入江明鎖。若使用者離開前未故意輸入錯誤密碼鎖定,攻擊者可用外部啟動媒體繞過鎖定直接讀取資料。作者尋求跨平台(純 DOS/BIOS 層面)解決方案但未果,最終只能在說明書建議使用者「離開前故意輸入錯誤密碼」。

完整 hdlock.exe 原始碼(MASM 格式,節選關鍵段)

DATA SEGMENT
D1 DB 0CDH,0BFH,0D1H,0E5H,0EAH,0CDH ; 特徵碼:判斷是否已安裝
D2 DB 'You had not install the HDLOCK,do you install?(y/n)',0dh,0ah,'$'
D3 DB 'HDLOCK.DAT',00H
D5 DB 'PASSWORD',00H
D6 DB 1EH,06H,0B9H,00H,01H,0BFH,00H,06H,0B8H,00H,00H,8EH,0D8H,8EH,0C0H,0BEH
DB 00H,7CH,0F2H,0A5H,0EAH,1AH,06H,00H,00H,90H,0EBH,09H,50H,41H,53H,53H
DB 57H,4FH,52H,44H,00H,0B8H,00H,06H,0B7H,0F0H,0B9H,00H,00H,0BAH,4FH,18H
DB 0CDH,10H,0B2H,01AH,0BEH,1CH,06H,0B4H,02H,0B6H,10H,0B7H,00H,0CDH,10H,8AH
DB 04H,3CH,00H,74H,1BH,0B4H,09H,0B9H,01H,00H,0B7H,00H,0B3H,70H,0CDH,10H
DB 0FEH,0C2H,46H,0EBH,0E2H,0CDH,20H,4FH,3DH,33H,0CDH,20H,33H,33H,33H,33H
... ; 完整 hdlock.dat 二進制映像內嵌於 D6
D7 DB 'You have been installed HDLOCK,do you remove?(y/n)',0dh,'$'
D8 DB 'PASSWORD ERROR$'
D13 DB 'The HDLOCK had been installed,please remember you PASSWORD!!!$'
D14 DB 'The HDLOCK had been removed.$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
 MOV AX,DATA
 MOV DS,AX
 MOV ES,AX
 ...
NEXT:
 MOV AX,0201H
 MOV CX,0001H
 MOV DX,0080H
 MOV BX,0F000H
 INT 13H ; 讀第 1 扇區至 F000:0000
 MOV AX,0201H
 MOV CX,0001H
 MOV DX,0080H
 MOV BX,0E000H
 INT 13H ; 讀第 1 扇區至 E000:0000
 MOV SI,0F1A0H
 MOV DI,OFFSET D1
 MOV CX,0003H
 REPE CMPSW ; 比對特徵碼判斷是否已安裝
 JNZ INSTALL
 JMP DEL
...
PWENTER PROC NEAR ; 密碼輸入子程式
 PUSH AX
 PUSH BX
 PUSH CX
 PUSH DX
 MOV AX,0600H
 MOV BH,0F0H
 MOV CX,0000H
 MOV DX,184FH
 INT 10H
 MOV DL,1AH
 MOV SI,OFFSET D5
DISPLAY:
 MOV AH,02H
 MOV DH,10H
 MOV BH,00H
 INT 10H
 MOV AL,[SI]
 CMP AL,00H
 JE GETPW
 MOV AH,09H
 MOV CX,01H
 MOV BH,00H
 MOV BL,70H
 INT 10H
 INC DL
 INC SI
 JMP DISPLAY
GETPW:
 MOV CX,0004H
 MOV AH,0000H
 MOV DI,0F1B0H
 REPZ STOSW
 MOV CX,0009H
 MOV DI,0F1B0H
 MOV DL,23H
READKEY:
 MOV AH,00H
 INT 16H
 CMP AL,0DH
 JE OK
 ...
 PWENTER ENDP
CODE ENDS
END START

總結與反思

這個作品展示了組合語言直接操作硬體、實作底層安全機制的強大能力,同時也暴露了單純依賴 MBR 修改的啟動鎖在「冷啟動繞過」面前的脆弱性。現代安全啟動應結合 BIOS/UEFI 密碼、全盤加密(BitLocker/LUKS)、TPM 等多層防護,而非單一 MBR 技巧。但作為學習 MBR 結構、INT 13h 磁碟服務、開機流程攔截、組合語言緊湊編程的教材,它仍具極高價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved