硬碟簡單加密. (轉)

worldblog發表於2007-12-13
硬碟簡單加密. (轉)[@more@]

//以下適用平臺為/,或者更高版本不支援對直接讀寫操作。
  我們都有知道硬碟的分割槽表位於0柱0面1扇區,在偏移地址1BE至1FD處就是硬碟的分割槽表內容,通常我們看硬碟分割槽表,只需用DE即可,即是說:
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個位元組,主機上的口或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
-N AKING.COM
-RCX
:200
-W100
-Q

至此,我們已將上述程式碼存成檔案AKING.COM。你可以將AKING.COM這個檔案COPY到,從軟盤啟動,第一次執行AKING.COM硬碟被鎖住,再一次執行硬碟解鎖。

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


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992471/,如需轉載,請註明出處,否則將追究法律責任。

相關文章