欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一種可以穿透還原卡和還原軟件的代碼

 更新時(shí)間:2007年01月16日 00:00:00   作者:  
一種可以穿透還原卡和還原軟件的代碼 
CVC/GB  風(fēng)般的男人 
還原卡和還原軟件被廣泛運(yùn)用于各種公共場(chǎng)合的電腦上,比如學(xué)校機(jī)房和網(wǎng)吧。這些還原卡和還原軟件(以下我簡(jiǎn)稱(chēng)為虛擬還原技術(shù))能夠記錄下一切對(duì)硬盤(pán)的寫(xiě)操作,不論您對(duì)硬盤(pán)進(jìn)行拷貝還是移動(dòng)刪除甚至是格式化分區(qū)等操作,只要一重新啟動(dòng),一切都會(huì)恢復(fù)到這個(gè)操作之前的情況,因此有些虛擬還原廠商還會(huì)在廣告詞中加上一句“可以防范一切電腦病毒”。這種虛擬還原的方法在大部分時(shí)候的確可以對(duì)公共機(jī)房的電腦起到很好的保護(hù)作用,難道真的沒(méi)有一種方法能夠穿透這種保護(hù)機(jī)制么?答案是否定的,下面請(qǐng)聽(tīng)我一一道來(lái)。 
一、虛擬還原技術(shù)的原理 
本文所說(shuō)的是一種普遍運(yùn)用于還原卡或還原軟件上的技術(shù),當(dāng)然,不同品牌不同廠商生產(chǎn)的可能不盡相同,但原理卻是相通的。 
首先,還原卡和還原軟件會(huì)搶先奪取引導(dǎo)權(quán),將原來(lái)的0頭0道1扇保存在一個(gè)其他的扇區(qū),(具體備份到那個(gè)扇區(qū)是不一定的),將自己的代碼寫(xiě)入0頭0道1扇,從而能在操作系統(tǒng)之前得到執(zhí)行權(quán),這一點(diǎn)類(lèi)似于一個(gè)引導(dǎo)型病毒;然后,我們來(lái)看看虛擬還原技術(shù)在操作系統(tǒng)之前都做了些什么: 
1.將中斷向量表中的INT13H的入口地址保存; 
2.把自己用于代替INT13H的代碼寫(xiě)入內(nèi)存,并記住入口地址,當(dāng)然這種“寫(xiě)入內(nèi)存”并不是普通的“寫(xiě)”,而是一種我們稱(chēng)為“常駐”的方法,有關(guān)“常駐程序”的實(shí)現(xiàn)方法我們不另外花篇幅來(lái)描述了,如果你還不了解的話請(qǐng)自己找有關(guān)資料,也可以到www.hackart.org或www.lsky.net找風(fēng)般的男人交流; 
3.將中斷向量表中INT13H的入口地址改為這段常駐程序的入口地址。補(bǔ)充一點(diǎn),虛擬還原程序在修改INT13H的入口后往往都會(huì)修改一些其他中斷入口,當(dāng)然也是通過(guò)常駐程序來(lái)實(shí)現(xiàn)的,這些中斷用來(lái)實(shí)現(xiàn)對(duì)中斷向量表中INT13H入口地址監(jiān)控,一旦發(fā)現(xiàn)被修改,就馬上把它改回,這樣做同樣是用來(lái)防止被有心人破解。 
好了,你已經(jīng)看出來(lái)了,這段用來(lái)替代BIOS提供的INT13H的代碼才是虛擬還原技術(shù)的關(guān)鍵,那么這段代碼到底實(shí)現(xiàn)了些什么了,以下是本人對(duì)此拙淺的理解: 
1.?dāng)r截所有INT13H中對(duì)硬盤(pán)0頭0道1扇的操作 
這些包括讀寫(xiě)操作,把所有的對(duì)0頭0道1扇的操作改為對(duì)虛擬還原程序備份的那個(gè)扇區(qū)的操作,這樣做的目的是保護(hù)虛擬還原代碼不被破壞,并且不能被有心人讀出進(jìn)行破解,即使你用扇區(qū)編輯工具查看主引導(dǎo)區(qū),實(shí)際上你看到的是這個(gè)備份的主引導(dǎo)區(qū)。 
2.?dāng)r截所有INT13H中的寫(xiě)硬盤(pán)操作 
這里包括對(duì)8G以下的硬盤(pán)的普通通過(guò)磁頭、磁道、扇區(qū)定位的INT13H中的寫(xiě)操作,和擴(kuò)展INT13H中基于扇區(qū)地址方式的對(duì)大硬盤(pán)的寫(xiě)操作,甚至包括擴(kuò)展INT13H中對(duì)一些非IDE接口的硬盤(pán)的寫(xiě)操作。 
至于攔截后做什么是虛擬還原技術(shù)實(shí)現(xiàn)的關(guān)鍵,在早期的DOS系統(tǒng)當(dāng)中完全可以“什么都不做”,也就是說(shuō)當(dāng)用戶(hù)寫(xiě)硬盤(pán)時(shí)實(shí)際上是什么都沒(méi)做,但現(xiàn)在的操作系統(tǒng)都要對(duì)硬盤(pán)進(jìn)行一些必要的寫(xiě)操作,比如對(duì)虛擬內(nèi)存的寫(xiě)操作。眾所周知,虛擬內(nèi)存實(shí)際上就是硬盤(pán),而如果禁止操作系統(tǒng)寫(xiě)硬盤(pán)的話顯然后果是不堪設(shè)想的。所以,大多數(shù)虛擬還原廠商用的方法是占用一些硬盤(pán)空間,把硬盤(pán)所進(jìn)行的寫(xiě)操作做一個(gè)記錄,等系統(tǒng)重新啟動(dòng)后還原這一記錄,但是怎樣科學(xué)記錄硬盤(pán)的寫(xiě)操作,是我一直沒(méi)想通的問(wèn)題,這種“科學(xué)”應(yīng)該體現(xiàn)在時(shí)間上和硬盤(pán)空間的占用量上的,也就是說(shuō)怎么樣用最少的時(shí)間和最少的硬盤(pán)空間來(lái)記錄硬盤(pán)的寫(xiě)操作是實(shí)現(xiàn)關(guān)鍵,如果有這方面想法的朋友歡迎和我交流; 
3.備份端口70H,71H中的內(nèi)容,并把最后一次執(zhí)行時(shí)端口70H,71H的內(nèi)容和備份的內(nèi)容做比較,不一樣就提示BIOS被修改,是否還原,并通過(guò)密碼驗(yàn)證修改BIOS是否合法。 

二、PC機(jī)的中斷機(jī)制 
中斷提供了最基本的硬件和軟件的接口,它使得程序員不必了解硬件系統(tǒng)的細(xì)節(jié),只要直接調(diào)用系統(tǒng)提供的中斷服務(wù)子程序,就可以完成相應(yīng)功能,這樣能使得程序設(shè)計(jì)更為方便。其實(shí)現(xiàn)機(jī)制如下:當(dāng)某一中斷源發(fā)出中斷請(qǐng)求時(shí),CPU能夠決定是否響應(yīng)這一中斷請(qǐng)求(當(dāng)CPU在執(zhí)行更為重要的工作時(shí),可以暫不響應(yīng)),如果允許響應(yīng)該中斷,CPU會(huì)在現(xiàn)行的指令執(zhí)行完后,把斷點(diǎn)處的下一條指令地址和各寄存器的內(nèi)容和標(biāo)志位的狀態(tài),推入堆棧進(jìn)行保護(hù),然后轉(zhuǎn)到中斷源服務(wù)程序的入口,進(jìn)行中斷處理,當(dāng)中斷處理完成后,再恢復(fù)被保留的各寄存器、標(biāo)志位狀態(tài)和指令指針,使CPU返回?cái)帱c(diǎn),繼續(xù)執(zhí)行下一條指令。 
為了區(qū)別各個(gè)中斷,CPC系統(tǒng)給每個(gè)中斷都分配了一個(gè)中斷號(hào)N,比如INT 3H是斷點(diǎn)中斷,INT 10H是顯示中斷,我們今天要討論的主要是INT 13H磁盤(pán)讀寫(xiě)中斷。 
要說(shuō)清楚PC機(jī)上的中斷機(jī)制,用這一點(diǎn)篇幅是完全不夠的,這里我所說(shuō)的只是一個(gè)大概,如果你不清楚的話,請(qǐng)查閱一些資料或和我交流,我們今天重要要說(shuō)的就是以INT13H為例看看BIOS提供給我們的中斷到底都是在做什么?所謂BIOS中斷簡(jiǎn)單說(shuō)就是你機(jī)器上的BIOS提供的中斷,那么在BIOS中斷的后面,到底是些什么呢?實(shí)際上是一些對(duì)端口的輸入輸出操作,PC的每個(gè)端口都實(shí)現(xiàn)特定的功能,我們完全可以不調(diào)用BIOS提供的中斷而直接用輸入輸出指令對(duì)這些端口進(jìn)行操作,從而可以實(shí)現(xiàn)象調(diào)用BIOS中斷一樣的功能,但是一個(gè)前提是你必須對(duì)這些端口有詳細(xì)的了解。反過(guò)來(lái)說(shuō),PC的中斷系統(tǒng)的一大好處就是能夠讓程序員無(wú)須了解系統(tǒng)底層的硬件知識(shí)的而能夠編程,從這點(diǎn)看,中斷有點(diǎn)象我們平時(shí)所說(shuō)的“封裝”,我不知道這樣說(shuō)對(duì)不對(duì),但的確中斷為我們“封裝”了許多系統(tǒng)底層的細(xì)節(jié)。 

三、硬盤(pán)讀寫(xiě)端口的具體含義 
   對(duì)硬盤(pán)進(jìn)行操作的常用端口是1f0h~1f7h號(hào)端口,各端口含義如下: 
端口號(hào)     讀還是寫(xiě)   具體含義 
1F0H       讀/寫(xiě)      用來(lái)傳送讀/寫(xiě)的數(shù)據(jù)(其內(nèi)容是正在傳輸?shù)囊粋€(gè)字節(jié)的數(shù)據(jù)) 
1F1H       讀         用來(lái)讀取錯(cuò)誤碼 
1F2H       讀/寫(xiě)      用來(lái)放入要讀寫(xiě)的扇區(qū)數(shù)量 
1F3H       讀/寫(xiě)      用來(lái)放入要讀寫(xiě)的扇區(qū)號(hào)碼 
1F4H       讀/寫(xiě)      用來(lái)存放讀寫(xiě)柱面的低8位字節(jié) 
1F5H       讀/寫(xiě)      用來(lái)存放讀寫(xiě)柱面的高2位字節(jié)(其高6位恒為0) 
1F6H       讀/寫(xiě)      用來(lái)存放要讀/寫(xiě)的磁盤(pán)號(hào)及磁頭號(hào) 
                     第7位     恒為1 
                     第6位     恒為0 
                     第5位     恒為1 
                     第4位     為0代表第一塊硬盤(pán)、為1代表第二塊硬盤(pán) 
                     第3~0位    用來(lái)存放要讀/寫(xiě)的磁頭號(hào) 
1f7H       讀         用來(lái)存放讀操作后的狀態(tài) 
                     第7位     控制器忙碌 
                     第6位     磁盤(pán)驅(qū)動(dòng)器準(zhǔn)備好了 
                     第5位     寫(xiě)入錯(cuò)誤 
                     第4位     搜索完成 
                     第3位     為1時(shí)扇區(qū)緩沖區(qū)沒(méi)有準(zhǔn)備好 
                     第2位     是否正確讀取磁盤(pán)數(shù)據(jù) 
                     第1位     磁盤(pán)每轉(zhuǎn)一周將此位設(shè)為1, 
                     第0位     之前的命令因發(fā)生錯(cuò)誤而結(jié)束 
          寫(xiě)         該位端口為命令端口,用來(lái)發(fā)出指定命令 
                     為50h     格式化磁道 
                     為20h     嘗試讀取扇區(qū) 
                     為21h     無(wú)須驗(yàn)證扇區(qū)是否準(zhǔn)備好而直接讀扇區(qū) 
                     為22h     嘗試讀取長(zhǎng)扇區(qū)(用于早期的硬盤(pán),每扇可能不是512字節(jié),而是128字節(jié)到1024之間的值) 
                     為23h     無(wú)須驗(yàn)證扇區(qū)是否準(zhǔn)備好而直接讀長(zhǎng)扇區(qū) 
                     為30h     嘗試寫(xiě)扇區(qū) 
                     為31h     無(wú)須驗(yàn)證扇區(qū)是否準(zhǔn)備好而直接寫(xiě)扇區(qū) 
                     為32h     嘗試寫(xiě)長(zhǎng)扇區(qū) 
                     為33h     無(wú)須驗(yàn)證扇區(qū)是否準(zhǔn)備好而直接寫(xiě)長(zhǎng)扇區(qū) 
注:當(dāng)然看完這個(gè)表你會(huì)發(fā)現(xiàn),這種讀寫(xiě)端口的方法其實(shí)是基于磁頭、柱面、扇區(qū)的硬盤(pán)讀寫(xiě)方法,不過(guò)大于8G的硬盤(pán)的讀寫(xiě)方法也是通過(guò)端口1F0H~1F7H來(lái)實(shí)現(xiàn)的^_^ 


四、一個(gè)通過(guò)對(duì)硬盤(pán)輸入輸出端口操作來(lái)讀寫(xiě)硬盤(pán)的實(shí)例 
讓我們來(lái)看一個(gè)關(guān)于INT13H讀寫(xiě)硬盤(pán)程序?qū)嵗?。在例子中詳?xì)說(shuō)明了硬盤(pán)的讀寫(xiě)操作所用到的端口,并且把通過(guò)INT13H讀出的主引導(dǎo)區(qū)得到的數(shù)據(jù)和通過(guò)輸入輸出讀主引導(dǎo)區(qū)得到的數(shù)據(jù)進(jìn)行比較,從而證實(shí)這兩種操作功能相同,程序片段如下: 

mov     dx,1f6h         ; 要讀入的磁盤(pán)號(hào)及磁頭號(hào) 
mov     al,0a0h         ;磁盤(pán)0,磁頭0    
out      dx,al 

mov     dx,1f2h         ;要讀入的扇區(qū)數(shù)量 
mov     al,1            ;讀一個(gè)扇區(qū)     
out      dx,al  

mov     dx,1f3h         ;要讀的扇區(qū)號(hào)  
mov     al,1            ;扇區(qū)號(hào)為1 
out      dx,al 

mov     dx,1f4h         ;要讀的柱面的低8位 
mov     al,0            ; 柱面低8位為0  
out     dx,al 

mov     dx,1f5h         ; 柱面高2位   
mov     al,0            ; 柱面高2位為0(通過(guò)1F4H和1F5H端口我們可以確定 
; 用來(lái)讀的柱面號(hào)是0) 
out      dx,al 

mov     dx,1f7h         ;命令端口 
mov     al,20h          ; 嘗試讀取扇區(qū) 
out      dx,al 
still_going: 
in      al,dx 
test     al,8            ;扇區(qū)緩沖是否準(zhǔn)備好 
jz     still_going     ;如果扇區(qū)緩沖沒(méi)有準(zhǔn)備好的話則跳轉(zhuǎn),直到準(zhǔn)備好才向下執(zhí)行。 

mov     cx,512/2        ;設(shè)置循環(huán)次數(shù)(512/2次) 
mov     di,offset buffer 
mov     dx,1f0h         ;將要傳輸?shù)囊粋€(gè)字節(jié)的數(shù)據(jù) 
rep      insw            ;傳輸數(shù)據(jù) 

;   ------ 

mov     ax,201h         ;以下是用INT13H讀硬盤(pán)的0磁頭、0柱面、1扇區(qū) 
mov     dx,80h 
mov     cx,1 
mov     bx,offset buffer2 
int       13h 

mov     cx,512         ;以下部分用來(lái)比較2種方法讀出的硬盤(pán)數(shù)據(jù) 
mov     si,offset buffer 
mov     di,offset buffer2 
repe     cmpsb 
jne      failure 
mov     ah,9 
mov     dx,offset readmsg 
int      21h 
jmp     good_exit 
failure: 
mov     ah,9 
mov     dx,offset failmsg 
int       21h 
good_exit:              ;以下部分用來(lái)結(jié)束程序 
mov      ax,4c00h        ;退出程序 
int      21h 

readmsg db      'The buffers match.  Hard disk read using ports. 

相關(guān)文章

最新評(píng)論