亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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


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

mov     dx,1f6h         ; 要讀入的磁盤號(hào)及磁頭號(hào) 
mov     al,0a0h         ;磁盤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(通過1F4H和1F5H端口我們可以確定 
; 用來讀的柱面號(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ū)緩沖沒有準(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讀硬盤的0磁頭、0柱面、1扇區(qū) 
mov     dx,80h 
mov     cx,1 
mov     bx,offset buffer2 
int       13h 

mov     cx,512         ;以下部分用來比較2種方法讀出的硬盤數(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:              ;以下部分用來結(jié)束程序 
mov      ax,4c00h        ;退出程序 
int      21h 

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

相關(guān)文章

最新評論