這是一個基於 MBR(主開機記錄)的硬碟鎖定程式,包含兩個檔案:hdlock.exe(安裝/管理工具)與 hdlock.dat(寫入 MBR 的 512 位元組開機區程式碼)。其核心思想是攔截開機流程,在作業系統載入前要求輸入密碼,正確則恢復原始 MBR 與分區表繼續開機,錯誤則寫入「江明鎖」(讓擴展分區指向自己造成死循環)徹底鎖死硬碟,甚至無法從軟碟/光碟/USB 開機存取資料。
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 ; 長跳轉至搬移後代碼
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
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
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 ; 不同 -> 寫入江明鎖並重啟
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
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.dat,提示輸入兩次密碼驗證一致性,將密碼雜湊(+0x23)寫入程式碼對應位置,依序寫入硬碟第 1、2、3、4 扇區(MBR、正確備份、原始 MBR 備份、江明鎖程式碼)。「如果電腦主人上次用正確密碼進入了電腦,而電腦非法使用者一次都不試密碼,就直接用軟盤或光盤或USB盤引導,那麼就可以非法訪問硬碟了」
原因在於:正確密碼開機時,程式將「正確分區表」寫回 MBR,此後硬碟處於解鎖狀態,直到下次開機輸入錯誤密碼才會寫入江明鎖。若使用者離開前未故意輸入錯誤密碼鎖定,攻擊者可用外部啟動媒體繞過鎖定直接讀取資料。作者尋求跨平台(純 DOS/BIOS 層面)解決方案但未果,最終只能在說明書建議使用者「離開前故意輸入錯誤密碼」。
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 磁碟服務、開機流程攔截、組合語言緊湊編程的教材,它仍具極高價值。