對硬盤的一種簡單加密----在分區表上做手腳.

//以下程序適用平臺爲WIN98/WINME,WIN2000或者更高版本不支持對硬盤直接讀寫操作。
     我們都有知道硬盤的分區表位於0柱0面1扇區,在偏移地址1BE至1FD處就是硬盤的分區表內容,通常我們看硬盤分區表,只需用DEBUG即可,即是說:
C:/>DEBUG
-A100
 MOV AX,0201
 MOV BX,0200
 MOV CX,0001
 MOV DX,0080
 INT 13
 INT 20
-G=100
-D3BE 3FF
//SAVE PARTITION DATA INTO FILE AKING.DAT
-N AKING.DAT
-RCX
:200
-W200
執行完上述指令,我們將會看到66個字節,其中最後兩個字節必定爲55AA,這是硬盤的主引導標誌(也稱自舉標誌),如果這兩個字節不爲55AA,那麼你的硬盤將不能啓動,因爲電腦識別不了硬盤。而且在偏移地址1BE處一定是80H,否則在啓動時會提示操作系統丟失。除去硬盤的自舉標誌,總共剩下達64個字節,每個硬盤佔用16個字節,主機上的IDE口或EIDE口總共可以掛4個硬盤(外掛的不算),通常爲安全起見我們可以將硬盤這重要的66個字節信息或多或少512個字節信息保存到一個文件中。每一個硬盤分區表的16個字節都有其對應的含義:
第一個字節:如果是引導分區,就是80H,如果不是,就是00H
第二個字節到第四個字節:是該分區的起始扇區號
第五個字節:標誌字節,比如05表示擴展分區
第六個字節到第八個字節:該分區的終止扇區號
第九個字節到第十二個字節:該分區已使用的扇區數
第十三個字到第十六個字節:該分區總共佔用的扇區數
     在瞭解完上述架構後,寫出簡單的加密程序就很簡單了,比如說我對硬盤的自舉標誌55AA作一個異或XOR運算,第一次執行程序時硬盤被鎖起,第二次執行時硬盤又被解鎖,第三次執行時硬盤又被鎖起。。。。除了對自舉標誌之外,我還可以對其它重要標誌作異或運算,比如說對引導分區的標誌字節80作異或運算,比如說隱藏某個擴展分等都可以實現。下面我用DEBUG寫出彙編程序,在這裏我以加鎖/解鎖自舉標誌來寫程序。以上我已經聲明如果你要使用我的這個程序請注意先做一張啓動盤,將硬盤分區表先以一個文件的形式保存到FLOPPY DISK中,以防萬一,請看程序:
C:/>DEBUG
-A100
MOV AX,0201
MOV BX,0200
MOV CX,0001
MOV DX,0080
INT 13
JB ERROR
MOV SI,03FE
MOV BP,AA55
XOR [SI],BP
MOV AX,0301
MOV BX,0200
MOV CX,0001
MOV DX,0080
INT 13
JB ERROR
CMP [SI],BP
JNZ LOCK
MOV DX,0150
MOV AH,9
INT 21
JMP END
LOCK:
  MOV DX,0165
  MOV AH,9
  INT 21
  JMP END
ERROR:
  MOV DX,0180
  MOV AH,9
  INT 21
END:
  MOV AH,4CH
  INT 21H

-e150 "Unlock Successfully!$"
-e165 "Lock Successfully!$"
-e180 "HardDisk I/O Error!$"
-N AKING.COM
-RCX
:200
-W100
-Q

至此,我們已將上述代碼存成文件AKING.COM。你可以將AKING.COM這個文件COPY到軟盤,從軟盤啓動計算機,第一次執行AKING.COM硬盤被鎖住,再一次執行硬盤解鎖。

以前讀書時就對彙編以及如何用匯編對硬盤編程就很感興趣,前兩天偶然聽到朋友問如何對硬盤加密,我想這是一種較爲簡單的方法,而且NT和2000以及XP均不去支持對硬盤的直接讀寫操作,在這種情況下,如果要對硬盤某一扇區進行讀寫操作,就需要用API來進行編程,如CreateFile,ReadFile,WriteFile等API函數。
再有一點我要聲明的是:上面的代碼是隨手寫出來的,其中LOCK,ERROR,END這三處在實際應用中應該換成偏移地址,這裏爲了敘述方便用LABEL。


 

發佈了24 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章