對硬碟的一種簡單加密----在分割槽表上做手腳. (轉)
//以下適用平臺為/,或者更高版本不支援對直接讀寫操作。
我們都有知道硬碟的分割槽表位於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
-e150 "Unlock Succesully!$"
-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均不去支援對硬碟的直接讀寫操作,在這種情況下,如果要對硬碟某一扇區進行讀寫操作,就需要用來進行程式設計,如CreateFile,ReadFile,WriteFile等API。
再有一點我要宣告的是:上面的程式碼是隨手寫出來的,其中LOCK,ERROR,END這三處在實際應用中應該換成偏移地址,這裡為了敘述方便用LABEL。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992470/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 硬碟分割槽表詳解(轉)硬碟
- Solaris硬碟分割槽簡介(轉)硬碟
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- 硬碟簡單加密. (轉)硬碟加密
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響索引
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響(1)索引
- SSD固態硬碟要分割槽嗎?SSD固態硬碟分割槽與不分割槽的效能對比硬碟
- FreeBSD 的硬碟分割槽策略(轉)硬碟
- 使用split對分割槽表再分割槽
- 對一條基於分割槽的簡單SQL的優化SQL優化
- 範圍分割槽表和INTERVAL分割槽表對於SPLIT分割槽的區別
- Linux與硬碟分割槽(轉)Linux硬碟
- 《RHEL6硬碟的分割槽和swap分割槽管理》——硬碟分割槽的大總結硬碟
- 將一個非分割槽錶轉換為分割槽表
- 電腦硬碟分割槽表損壞怎麼修復?電腦硬碟分割槽表損壞的修復方法硬碟
- 在範圍分割槽表上分割槽維護操作對全域性及本地索引狀態的影響(2)索引
- win10硬碟分割槽怎麼分_win10系統如何對硬碟分割槽Win10硬碟
- 大容量硬碟典型分割槽方案(轉)硬碟
- 普通錶轉換成分割槽表的四種方法
- split 分割槽的簡單研究
- 【分割槽】如何將一個普通錶轉換為分割槽表
- 非分割槽錶轉換成分割槽表
- 對刪除分割槽的分割槽表執行TSPITR
- 對分割槽表的部分分割槽執行TSPITR
- zabbix上對mysql資料庫做分割槽表MySql資料庫
- Linux下硬碟分割槽的最佳方案 (轉)Linux硬碟
- 深入理解硬碟的 Linux 分割槽(轉)硬碟Linux
- Linux下硬碟分割槽的最佳方案(轉)Linux硬碟
- 對oracle分割槽表的理解整理Oracle
- 將非分割槽錶轉換為分割槽表
- MySQL表的四種分割槽型別MySql型別
- 分割槽表PARTITION table(轉)
- ORACLE分割槽表管理[轉]Oracle
- linux硬碟分割槽Linux硬碟
- 將mysql非分割槽錶轉換為分割槽表MySql
- (轉)ORACLE 分割槽表的設計Oracle
- 如何查詢分割槽表的分割槽及子分割槽
- oracle分割槽表和分割槽表exchangeOracle