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