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

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

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

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

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


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

mov     dx,1f6h         ; 要讀入的磁盤號及磁頭號 
mov     al,0a0h         ;磁盤0,磁頭0    
out      dx,al 

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

mov     dx,1f3h         ;要讀的扇區(qū)號  
mov     al,1            ;扇區(qū)號為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端口我們可以確定 
; 用來讀的柱面號是0) 
out      dx,al 

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

mov     cx,512/2        ;設(shè)置循環(huán)次數(shù)(512/2次) 
mov     di,offset buffer 
mov     dx,1f0h         ;將要傳輸?shù)囊粋€字節(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)文章

最新評論