瀏覽量:39次
一·序言不知道你是否曾碰到過從軟盤和硬盤都啟動不了計算機的情形?一般計算機的硬盤分區(qū)表被病毒感染后,若不能啟動機子,通常從軟盤可以啟動。但在嚴重的情形下 ,不但從硬盤不能啟動機子,就是從軟盤也不能啟動。有的惡毒的病毒就能使硬盤被死鎖。筆者一次在自己機子上玩弄硬盤鎖時,就被鎖住過一次。結(jié)果在硬盤下選擇DOS或WIN95模 式啟動機子都死機,在軟盤下用DOS啟動也死機;在COMS中將硬盤類型選擇None,雖然可以從軟盤啟動,但啟動后沒有硬盤,使用軟盤上的FDISK命令,想重新分區(qū)或格式化都沒門。 弄得我一籌莫展。本來,硬盤被鎖住時,可以采用3.0以下的DOS版本啟動機子,機子啟動后雖然也不認硬盤,但其不認的原因在于其管理不了現(xiàn)在的大硬盤,因此可以用Debug修改硬盤 分區(qū)表,修改后可以啟動。但在已進入WINDOWS的年代,3.0以下的DOS實難找到,即使找到,你的機子上恐怕也因沒有5寸軟驅(qū)而不能使用。因此,最好的辦法是編制一個程序來解決 這個問題。筆者通過嘗試和思考,找到一種比較實用的方法,可以輕松解開死鎖的硬盤,當然也把自己的硬盤解開了。下面,我將這種方法介紹出來。二·硬盤鎖住原理硬盤鎖住通常是對硬盤的分區(qū)表做手腳,因此首先應該了解硬盤的分區(qū)表。硬盤分區(qū)表位于0柱面0磁頭1區(qū),這個扇區(qū)的前面200多個字節(jié)是主引導程序,后面從01BEH 開始的64個字節(jié)是分區(qū)表。分區(qū)表共64字節(jié),分為4欄,每欄16字節(jié),用來描述一個分區(qū)。如果是用DOS的FDISK程序分區(qū)后,最多只用兩欄,第一欄描述基本的DOS分區(qū),第二欄描述 擴展的DOS分區(qū)。分區(qū)表一欄的結(jié)構(gòu)與各字節(jié)的含義如下:00H-標志活動字節(jié),活動DOS分區(qū)為80H,其它為00H。01H-本分區(qū)邏輯0扇區(qū)所在的磁頭號。02H-邏輯0扇區(qū)所在柱面中的扇區(qū)號。03H-邏輯0扇區(qū)所在的柱面號。04H-分區(qū)類型標志。05H-本分區(qū)最后一個扇區(qū)的磁頭號。06H-最后一個扇區(qū)的扇區(qū)號。07H-最后一個柱面的柱面號。08H-硬盤上在本分區(qū)之前的扇區(qū)總數(shù),用雙字表示。0CH-本分區(qū)的扇區(qū)總數(shù),從邏輯0扇區(qū)計數(shù),不含隱藏扇區(qū),用雙字表示。在上面的介紹中給出的柱面號與扇區(qū)號雖然各占一個字節(jié),但實際上扇區(qū)號用6位表示,柱面號用10位表示,扇區(qū)號所在字節(jié)的最高兩位實際上是柱面號的最高兩位。分區(qū)表的最后兩個字節(jié)是分區(qū)表的有效標志,如果將其改變,將不能從硬盤啟動,這是一種簡單的鎖住硬盤的方法。解決的辦法是從軟盤啟動,啟動后硬盤仍然可以 使用。用Debug或Noratn中的Diskedit軟件將硬盤該分區(qū)表中的標志恢復,則從硬盤啟動也沒有問題了。鎖住硬盤的另一種方法是對分區(qū)參數(shù)做手腳,如果將分區(qū)參數(shù)全部變?yōu)?,則 啟動時由于找不到分區(qū)參數(shù),從硬盤是沒法啟動,從軟盤啟動后也不認硬盤,如果你敲入盤符C并回車,將出現(xiàn)提示Invaliddriverspecification。但所幸的是,畢竟可以啟動機子,不認硬盤沒關(guān)系,在A盤上用DOS的Debug仍然可以讀出硬盤0柱面0磁頭1扇區(qū)的內(nèi)容,修改后再寫入0柱面0磁頭1扇 區(qū),重新啟動機子又沒問題了。如果將分區(qū)表參數(shù)隨意改為其它參數(shù),則有可能不能用可以安裝DOS的DOS系統(tǒng)盤啟動,按F3退出后將出現(xiàn)內(nèi)存分配錯誤,不能裝載DOS的命令解釋 器COMMAND的提示,系統(tǒng)就死機了,筆者就曾碰見過這種情形。但用一張格式化成系統(tǒng)盤的軟盤則可以順利啟動,只要有Debug,你仍然可以將分區(qū)表參數(shù)修改回去??膳碌氖虑槭?, 如果你不幸將分區(qū)表參數(shù)改成一個循環(huán)鏈,即C盤的下一個分區(qū)指向D驅(qū),D驅(qū)的下一個分區(qū)又指向C區(qū),這樣循環(huán)下去,DOS啟動或WIN95啟動時由于無休止的讀取邏輯驅(qū)動器,就只有 死機的份了。這是只要有硬盤存在,不管你用軟盤還是硬盤都沒法啟動機子了,由于不能啟動是由于硬盤造成的,即使你將硬盤下到其它計算機上,也沒法使用,這樣硬盤就徹底被 鎖死了,筆者所遭遇就是此情形。不信,你只需將硬盤0柱面0磁頭1扇區(qū)的1D0H處改為1(如果你的D驅(qū)開始柱面號不夠大,此處本來就為1),將1D1H處改為0,表示D盤的開始柱面號 跟C盤一樣,看看你的計算機還能不能啟動,不過你在沒有充分的準備前絕不要試。一個完整的硬盤鎖程序,不過是重新改寫0柱面0磁頭1扇區(qū)的引導程序,并將分區(qū)表破壞或故意制造一個循環(huán)分區(qū)表,而將真正的硬盤分區(qū)表參數(shù)和引導程序放在其它 隱藏扇區(qū)并保護起來,如果啟動時口令不對,則不能啟動機子,口令對了則順利啟動。這種硬盤鎖程序,情形好的還可以用軟盤啟動;情形嚴重的就是連軟盤也不能啟動,硬盤真被 鎖住。三·解開硬盤鎖的程序法如果硬盤被鎖死,是否真的就無法解開呢?當然不是。看看問題的癥結(jié)所在,根源在于DOS中的IO.SYS文件,它包含LOADER、IO1、IO2、IO3四個模塊,其中IO1中包含 有一個很關(guān)鍵的程序SysInt_I,它在啟動中很固執(zhí),非要去讀分區(qū)表,而且不把分區(qū)表讀完誓不罷休。如果碰上分區(qū)表是循環(huán)的,它就只有死機了。這是DOS的脆弱性和不完備性。其 實這也不能怪DOS,因為DOS為了獲得硬盤使用權(quán),就必需讀分區(qū)表參數(shù),而且DOS還約定驅(qū)動器號不能超過26,只不過沒有考慮到此等循環(huán)分區(qū)表情形。一句話,機子不能啟動不過是 DOS操作系統(tǒng)造成的,如果另寫一個操作系統(tǒng),或許就能啟動機子。當然這只是說個笑話。明白了病因在于DOS,問題就好辦了。DOS啟動中不是要讀硬盤分區(qū)表嗎?我不讓你讀分區(qū)表甚至連硬盤都不讓你讀,不就可以順利啟動了。的確是這樣的,開硬盤鎖 的程序?qū)崿F(xiàn)方法就是基于這個思想形成的。當然,這只有從軟盤啟動著手了。看看計算機的啟動過程,上電首先進行的多項硬件自測跟我們沒有關(guān)系,我們關(guān)心的只是它最開始和磁盤打交道時是干什么。如果選擇從硬盤啟動,則計算機和磁盤 最開始打交道是將硬盤0柱面0磁頭1扇區(qū)的內(nèi)容讀入內(nèi)存0000:7C00處并跳到0000:7C00處執(zhí)行;如果選擇從軟盤啟動,則計算機和磁盤最開始打交道是將A盤0磁道0磁頭1扇區(qū)的內(nèi)容 讀入內(nèi)存0000:7C00處并跳到0000:7C00處執(zhí)行,在執(zhí)行過程中,計算機并不檢查該扇區(qū)的內(nèi)容是什么,只機械地執(zhí)行讀命令,這使得許多系統(tǒng)型病毒得以生存。但利用這一點,恰 恰使我們的程序解鎖法有了用武之地。如果我們用DOS格式化一張可以啟動機子的系統(tǒng)軟盤,將該軟盤的0磁道0磁頭1扇區(qū)的內(nèi)容移到后面的空白扇區(qū)中,而重新寫一段程序到該軟盤 的0磁道0磁頭1扇區(qū),這樣用軟盤啟動時首先執(zhí)行的是我們所寫的程序了。在這段程序中,具備這樣一些功能:在DOS啟動前搶先攔截INT13H,駐留高端內(nèi)存并監(jiān)視INT13H,判斷是否讀硬盤,如果是讀硬盤就直接返回,這樣就禁止了讀硬盤,也就避免了DOS讀硬盤循環(huán)分區(qū)表造成的死機;同時攔截對軟盤的讀取,如果讀軟盤的0磁道 0磁頭1扇區(qū),就改成讀真正有引導程序和磁盤參數(shù)表的扇區(qū),免得DOS在啟動中找不到軟盤的磁盤參數(shù)表而死機。完成這些任務的同時,還要讀取軟盤真正的引導程序并把控制權(quán)交給 它。該方法可以稱為萬能的,因為它在用軟盤啟動中,始終不與硬盤打交道,這樣不管你硬盤用什么方法加鎖了,對DOS的啟動都沒有影響。當然,這樣啟動的機子是不認 硬盤的,但這沒有關(guān)系。你可在機子啟動后,用Debug調(diào)出駐留高端內(nèi)存的新INT13H程序,將其改為只有一條直接執(zhí)行舊INT 13H的語句,這樣在Debug下可以用INT13H讀取硬盤0柱面0磁頭1扇區(qū)的內(nèi)容,如果你有備份,將分區(qū)表參數(shù)恢復后再寫入0柱面0磁頭1扇區(qū),重新啟動計算機就可以了。如果實在沒有備份,去掉分區(qū)表中的 循環(huán)鏈,用正常DOS啟動盤重啟機子后至少也可以重新對硬盤分區(qū),不至于硬盤被鎖住打不開了。四·程序及說明1·下面是寫入軟盤0磁道0頭1扇區(qū)的源程序key.com,程序用debug輸入。C>debug-a100100 CLI101 XOR AX,AX103 MOV DS,AX105 MOV ES,AX107 MOV SS,AX109 MOV AX,7C0010C MOV SP,AX10E STI10F MOV SI,AX111 MOV DI,7E00114 CLD115 MOV CX,0200118 REPNZ119 MOVSB11A JMP 0000:7E1F11F MOV CX,0003122 PUSH CX123 MOV AX,0201;讀啟動軟盤的引導扇區(qū)126 MOV BX,7C00129 MOV CX,4F0112C MOV DX,010012F INT 13131 POP CX132 DEC CX133 JNZ 0122135 MOV AX,[004C];搶先獲取INT 13H的位置138 MOV [7E88],AX13B MOV AX,[004E]13E MOV [7E8A],AX141 MOV AX,[0413]144 DEC AX145 MOV [0413],AX148 MOV CL,0614A SHL AX,CL14C MOV ES,AX14E XOR AX,AX150 MOV DS,AX152 MOV SI,7E6D;復制改寫的INT 13H程序到高端內(nèi)存155 MOV DI,0000158 MOV CX,003015B REPNZ015C MOVSB015D MOV AX,0000;將新INT 13H位置寫入中斷向量表0160 MOV [004C],AX0163 MOV AX,ES0165 MOV [004E],AX0168 JMP 0000:7C00016D PUSHF;新INT 13H程序016E CMP DX,0080;是否是硬盤0172 JNZ 0176;不是硬盤則繼續(xù)0174 POPF0175 IRET;是硬盤則直接返回0176 CMP DX, 00;是否讀軟盤BOOT區(qū)?0179 JNZ 0186017B CMP CX, 01017E JNZ 01860180 MOV CX,4F01;是則讀79磁道1磁頭1扇區(qū)0183 MOV DX,01000186 POPF0187 JMP 0000:0000;此處跳轉(zhuǎn)去執(zhí)行舊INT 13, ;舊INT 13H的位置由前面程序獲得后寫入。N key.comRCX200WQ2·程序的裝載
在進行下面工作前,先用DOS格式化一張啟動的系統(tǒng)盤,并保證沒有壞扇區(qū),最好進行啟動測試,確保其可以啟動機子。由于現(xiàn)在機子上大多只有3寸軟驅(qū),因此選 擇1.44M的3.5寸軟盤。然后用debugkey.com將程序key.com調(diào)入內(nèi)存偏移地址為100H,同時在400H處寫入一段裝載程序。即:C>debug key.com-a400400 MOV CX,0003403 PUSH CX404 MOV AX,0201;將A盤引導程序讀入內(nèi)存1000H處407 MOV BX,1000;為確保成功,首次采用重復讀3次40A MOV CX,000140D MOV DX,0000410 INT 13412 POP CX413 DEC CX414 JNZ 0403416 MOV AX,0301;將已讀入內(nèi)存的軟盤引導程序?qū)懭胲洷P419 MOV BX,1000;最后一個磁道的首扇區(qū)41C MOV CX,4F0141F MOV DX,0100422 INT 13424 MOV AX,0301;將key.com程序?qū)懭胲洷P0磁道0磁頭1扇區(qū)427 MOV BX,010042A MOV CX,000142D MOV DX,0000430 INT 13432 INT 3為保證萬無一失,最好將軟盤這兩個扇區(qū)的內(nèi)容重新讀出來看一看,以保證寫成功了。做好這一切,保險的還是進行一次測試,即用該軟盤啟動一次機子,看能否成 功,若成功啟動,你就可以用循環(huán)分區(qū)表法鎖住硬盤,看從正常DOS下能否啟動,然后再用此軟盤啟動機子試試,看看功效如何?從該軟盤啟動后,不認硬盤,并且在高端內(nèi)存駐留了新INT13H程序,該段程序?qū)嶋H上是key.com中從16D到187部分。由于有此段程序存在,在debug下也無法讀硬盤,也就沒法恢復硬盤分區(qū)表,因此機子啟動后首先應修改這段 程序?,F(xiàn)在的機子基本內(nèi)存通常都為640K,這樣這段程序就位于內(nèi)存中9FC0:0000處,在debug下,用U9FC0:0顯示這段程序,可以看到位于9FC0:001A處是一條跳轉(zhuǎn)指令,該跳轉(zhuǎn)指 令即轉(zhuǎn)去執(zhí)行最原始的INT13H。由于BIOS版本不一樣,跳轉(zhuǎn)指令指向的位置可能不一樣,如筆者機子上是一條JMPF000:A5D4語句。這時在在debug下編寫這樣一語句:a9FC0:0 JMPF000:A5D4。這樣,對硬盤的禁寫與禁讀都不再起作用了,在debug下用INT13H的2號子功能可以讀出硬盤分區(qū)表,修改恢復后再用3號子功能將數(shù)據(jù)寫回分區(qū)表。退出debug,重新用正常DOS啟動計算機,就可以了。附帶提一下,在正常DOS下,該軟盤由于沒有BOOT區(qū),也就沒有磁盤參數(shù)表,從而不能使用,用DIR A:命令會出現(xiàn)Generalfailure reading drive A提示。不要理睬它,這并不影響它作特殊啟動盤。五·建議為更好的保護你的硬盤,筆者建議你最好將你的硬盤分區(qū)表信息備份起來。備份有兩種方式,一種是以文件形式將硬盤每個邏輯盤的分區(qū)信息存儲起來;另一種是將 分區(qū)信息備份在硬盤隱藏扇區(qū)里。比如可以將0柱面0磁頭1扇區(qū)備份在0柱面0磁頭3扇區(qū),將D盤開始柱面號0磁頭1扇區(qū)備份在該柱面0磁頭3扇區(qū),其它邏輯盤也如此。這種方法簡單、 方便,也很可靠。用NORTAN中的DISKEDI很容易操作和實現(xiàn)。有了備份分區(qū)表信息,就不怕破壞分區(qū)表的病毒了;再加上我給你的程序,即使有人真鎖住了你的硬盤,你也可以輕而易 舉解開了。
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點,本網(wǎng)不承擔此類稿件侵權(quán)行為的連帶責任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們在確認后,會立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776