硬盤(pán)加密的幾種方法
一、修改硬盤(pán)分區(qū)表信息
硬盤(pán)分區(qū)表信息對(duì)硬盤(pán)的啟動(dòng)至關(guān)重要,如果找不到有效的分區(qū)表,將不能從硬盤(pán)啟動(dòng)或即使從軟盤(pán)啟動(dòng)也找不到硬盤(pán)。通常,第一個(gè)分區(qū)表項(xiàng)的第0子節(jié)為80H,表示C盤(pán)為活動(dòng)DOS分區(qū),硬盤(pán)能否自舉就依*它。若將該字節(jié)改為00H,則不能從硬盤(pán)啟動(dòng),但從軟盤(pán)啟動(dòng)后,硬盤(pán)仍然可以訪(fǎng)問(wèn)。分區(qū)表的第4字節(jié)是分區(qū)類(lèi)型標(biāo)志,第一分區(qū)的此處通常為06H,表示C盤(pán)為活動(dòng)DOS分區(qū),若對(duì)第一分區(qū)的此處進(jìn)行修改可對(duì)硬盤(pán)起到一定加密作用。
具體表現(xiàn)在:
1.若將該字節(jié)改為0,則表示該分區(qū)未使用,當(dāng)然不能再?gòu)腃盤(pán)啟動(dòng)了。從軟盤(pán)啟動(dòng)后,原來(lái)的C盤(pán)不見(jiàn)了,你看到的C盤(pán)是原來(lái)的D盤(pán),D盤(pán)是原來(lái)的E盤(pán),依此類(lèi)推。
2. 若將此處字節(jié)改為05H,則不但不能從硬盤(pán)啟動(dòng),即使從軟盤(pán)啟動(dòng),硬盤(pán)的每個(gè)邏輯盤(pán)都不可訪(fǎng)問(wèn),這樣等于整個(gè)硬盤(pán)被加密了。另外,硬盤(pán)主引導(dǎo)記錄的有效標(biāo)志是該扇區(qū)的最后兩字節(jié)為55AAH。若將這兩字節(jié)變?yōu)?,也可以實(shí)現(xiàn)對(duì)整個(gè)硬盤(pán)加鎖而不能被訪(fǎng)問(wèn)。硬盤(pán)分區(qū)表在物理0柱面0磁頭1扇區(qū),可以用 Norton for Win95中的Diskedit直接將該扇區(qū)調(diào)出并修改后存盤(pán)。或者在Debug下用INT 13H的02H子功能將0柱面0磁頭1扇區(qū)讀到內(nèi)存,在相應(yīng)位置進(jìn)行修改,再用INT 13H的03H子功能寫(xiě)入0柱面0磁頭1扇區(qū)就可以了。
上面的加密處理,對(duì)一般用戶(hù)來(lái)講已足夠了。但對(duì)有經(jīng)驗(yàn)的用戶(hù),即使硬盤(pán)不可訪(fǎng)問(wèn),也可以用INT 13H的02H子功能將0柱面0磁頭1扇區(qū)讀出,根據(jù)經(jīng)驗(yàn)將相應(yīng)位置數(shù)據(jù)進(jìn)行修改,可以實(shí)現(xiàn)對(duì)硬盤(pán)解鎖,因?yàn)檫@些位置的數(shù)據(jù)通常是固定的或有限的幾種情形。另外一種保險(xiǎn)但顯得笨拙的方法是將硬盤(pán)的分區(qū)表項(xiàng)備份起來(lái),然后將其全部變?yōu)?,這樣別人由于不知道分區(qū)信息,就無(wú)法對(duì)硬盤(pán)解鎖和訪(fǎng)問(wèn)硬盤(pán)了。
二、對(duì)硬盤(pán)啟動(dòng)加口令
我們知道,在CMOS中可以設(shè)置系統(tǒng)口令,使非法用戶(hù)無(wú)法啟動(dòng)計(jì)算機(jī),當(dāng)然也就無(wú)法使用硬盤(pán)了。但這并未真正鎖住硬盤(pán),因?yàn)橹灰獙⒂脖P(pán)掛在別的計(jì)算機(jī)上,硬盤(pán)上的數(shù)據(jù)和軟件仍可使用。要對(duì)硬盤(pán)啟動(dòng)加口令,可以首先將硬盤(pán)0柱面0磁頭1扇區(qū)的主引導(dǎo)記錄和分區(qū)信息都儲(chǔ)存在硬盤(pán)并不使用的隱含扇區(qū),比如0柱面0 磁頭3扇區(qū)。然后用Debug重寫(xiě)一個(gè)不超過(guò)512字節(jié)的程序(實(shí)際上100多字節(jié)足矣)裝載到硬盤(pán)0柱面0磁頭1扇區(qū)。該程序的功能是執(zhí)行它時(shí)首先需要輸入口令,若口令不對(duì)則進(jìn)入死循環(huán);若口令正確則讀取硬盤(pán)上存有主引導(dǎo)記錄和分區(qū)信息的隱含扇區(qū)(0柱面0磁頭3扇區(qū)),并轉(zhuǎn)去執(zhí)行主引導(dǎo)記錄。
由于硬盤(pán)啟動(dòng)時(shí)首先是BIOS調(diào)用自舉程序INT 19H將主硬盤(pán)的0柱面0磁頭1扇區(qū)的主引導(dǎo)記錄讀入內(nèi)存0000:7C00H處執(zhí)行,而我們已經(jīng)偷梁換柱,將0柱面0磁頭1扇區(qū)變?yōu)槲覀冏约涸O(shè)計(jì)的程序。這樣從硬盤(pán)啟動(dòng)時(shí),首先執(zhí)行的不是主引導(dǎo)程序,而是我們?cè)O(shè)計(jì)的程序。在執(zhí)行我們?cè)O(shè)計(jì)的程序時(shí),口令若不對(duì)則無(wú)法繼續(xù)執(zhí)行,也就無(wú)法啟動(dòng)了。即使從軟盤(pán)啟動(dòng),由于0柱面0磁頭1扇區(qū)不再有分區(qū)信息,硬盤(pán)也不能被訪(fǎng)問(wèn)了。當(dāng)然還可以將我們?cè)O(shè)計(jì)的程序像病毒一樣,將其中一部分駐留在高端內(nèi)存,監(jiān)視INT 13H的使用,防止0柱面0磁頭1扇區(qū)被改寫(xiě)。
三、對(duì)硬盤(pán)實(shí)現(xiàn)用戶(hù)加密管理
UNIX操作系統(tǒng)可以實(shí)現(xiàn)多用戶(hù)管理,在DOS系統(tǒng)下,將硬盤(pán)管理系統(tǒng)進(jìn)行改進(jìn),也可實(shí)現(xiàn)類(lèi)似功能的多用戶(hù)管理。該管理系統(tǒng)可以滿(mǎn)足這樣一些要求: 1.將硬盤(pán)分為公用分區(qū)C和若干專(zhuān)用分區(qū)D。其中“超級(jí)用戶(hù)”來(lái)管理C區(qū),可以對(duì)C區(qū)進(jìn)行讀寫(xiě)和更新系統(tǒng);“特別用戶(hù)”(如機(jī)房?jī)?nèi)部人員)通過(guò)口令使用自己的分區(qū),以保護(hù)自己的文件和數(shù)據(jù);“一般用戶(hù)”(如到機(jī)房上機(jī)的普通人員)任意使用劃定的公用分區(qū)。后兩種用戶(hù)都不能對(duì)C盤(pán)進(jìn)行寫(xiě)操作,這樣如果把操作系統(tǒng)和大量應(yīng)用軟件裝在C盤(pán),就能防止在公共機(jī)房中其他人有意或無(wú)意地對(duì)系統(tǒng)和軟件的破壞,保證了系統(tǒng)的安全性和穩(wěn)定性。 2.在系統(tǒng)啟動(dòng)時(shí),需要使用軟盤(pán)鑰匙盤(pán)才能啟動(dòng)系統(tǒng),否則硬盤(pán)被鎖住,不能被使用。此方法的實(shí)現(xiàn)可通過(guò)利用硬盤(pán)分區(qū)表中各邏輯盤(pán)的分區(qū)鏈表結(jié)構(gòu),采用匯編編程來(lái)實(shí)現(xiàn)。
四、對(duì)某個(gè)邏輯盤(pán)實(shí)現(xiàn)寫(xiě)保護(hù)
我們知道,軟盤(pán)上有寫(xiě)保護(hù)缺口,在對(duì)軟盤(pán)進(jìn)行寫(xiě)操作前,BIOS要檢查軟盤(pán)狀態(tài),如果寫(xiě)保護(hù)缺口被封住,則不能進(jìn)行寫(xiě)操作。而寫(xiě)保護(hù)功能對(duì)硬盤(pán)而言,在硬件上無(wú)法進(jìn)行,但可通過(guò)軟件來(lái)實(shí)現(xiàn)。在DOS系統(tǒng)下,磁盤(pán)的寫(xiě)操作包括幾種情況:①在COMMAND.COM支持下的寫(xiě)操作,如MD、RD、COPY等;②在DOS功能調(diào)用中的一些子功能如功能號(hào)為10H、13H、3EH、5BH等可以對(duì)硬盤(pán)進(jìn)行寫(xiě)操作;③通過(guò)INT 26H將邏輯扇區(qū)轉(zhuǎn)換為絕對(duì)扇區(qū)進(jìn)行寫(xiě);④通過(guò)INT 13H的子功能號(hào)03H、05H等對(duì)磁盤(pán)進(jìn)行寫(xiě)操作。 但每一種寫(xiě)操作最后都要調(diào)用INT 13H的子功能去實(shí)現(xiàn)。
因此,如果對(duì)INT 13H進(jìn)行攔截,可以實(shí)現(xiàn)禁止對(duì)硬盤(pán)特定邏輯盤(pán)的寫(xiě)操作。由于磁盤(pán)上文件的寫(xiě)操作是通過(guò)INT 13H的03H子功能進(jìn)行寫(xiě),調(diào)用此子功能時(shí),寄存器CL表示起始扇區(qū)號(hào)(實(shí)際上只用到低6位);CH表示磁道號(hào),在硬盤(pán)即為柱面號(hào),該柱面號(hào)用10位表示,其最高兩位放在CL的最高兩位。對(duì)硬盤(pán)進(jìn)行分區(qū)時(shí)可以將硬盤(pán)分為多個(gè)邏輯驅(qū)動(dòng)器,而每個(gè)邏輯驅(qū)動(dòng)器都是從某一個(gè)完整的柱面開(kāi)始。如筆者的硬盤(pán)為 2.5GB,分為C、D、E、F、G五個(gè)盤(pán)。其中C盤(pán)起始柱面號(hào)為00H,D盤(pán)起始柱面號(hào)為66H,E盤(pán)起始柱面號(hào)為E5H,F(xiàn)盤(pán)起始柱面號(hào)為164H, G盤(pán)起始柱面號(hào)為26BH。如果對(duì)INT 13H進(jìn)行攔截,當(dāng)AH=03H,并且由CL高兩位和CH共同表示的柱面號(hào)大于E4H并小于164H,就什么也不做就返回,這樣就可以實(shí)現(xiàn)對(duì)E盤(pán)禁止寫(xiě)。