關於滴水的VT調試器 by 海風月影

論壇上今天吵的比較火熱,主要是關於滴水的VT調試器,很多人不瞭解這個東西,我對Intel的VT技術略有了解,所以我來簡單的介紹一下。


第一,什麼是VT技術

VT是Intel的硬件虛擬化技術,説到VT,就不得不提虛擬機(例如VMWare)。在硬件還沒有支持VT前,系統級的虛擬機其實是很難做的,要考慮的東西非常多(主要是效率問題,因為用軟件模擬東西資源開銷比較大)。VT技術主要就是為了解決這個問題而誕生的,有了VT後,可以減少非常多的資源開銷,讓虛擬機的速度接近於真機速度。


OK,那麼VT到底是個什麼技術呢?

首先要説一下VMM(Virtual Machine Monitor),這個是虛擬機的監控器,監控着虛擬機的運行。比如虛擬機想執行一條指令:cpuid,這個時候被VMM捕捉到,然後VMM去模擬執行這條指令,然後返回給虛擬機,完成了一次vm exit。因為VMM需要執行ring0的指令,所以VMM需要運行在ring0下。

而VT使得CPU進入了一個全新的特殊模式(VMX模式),在這個模式下,CPU可以處於VMX root狀態或者VMX non-root狀態。處於VMX non-root操作狀態下的CPU行為受到了某些方面的限制,關鍵的共享資源必須運行於VMX root操作狀態的監控器的控制之下,並且,對於VMX non-root狀態中的任何CPU特權都有效(只要處於VMX

non-root狀態,ring0 - ring3 都被監控)。因此,將VMM運行於VMX root操作狀態,可以輕鬆監控管理客户操作系統(就是安裝在虛擬機裏面的操作系統)和客户應用程序(虛擬機裏面操作系統裏面安裝的軟件)。


大家可能被繞暈了,我舉個例子簡單解釋一下上面最後一句話

比如:

一個虛擬機,裏面裝了winxp系統,系統裏面有一個記事本程序

OK,winxp內核肯定要運行於ring0,而記事本肯定要運行於ring3,那麼VMM怎麼高效得管理這兩個特權呢?

比如,POPFD這條指令,可以修改EFLAGS的IF位,即中斷允許位,但是,在ring3下,是無法修改的。所以,VMM需要先判斷客户機處於哪個特權級別(ring0?ring3?),如果ring0就可以修改,如果ring3就拒絕修改。這樣的過程就有開銷。而VMX non-root狀態對任何CPU特權都支持,因此,VMM可以讓客户機完全在真實CPU上執行這條指令,不需要考慮這條指令執行後結果會不會出現問題。


簡單的説:VT是為了減少虛擬化技術帶來的性能開銷而開發的硬件虛擬化技術,儘量消除關鍵指令和關鍵共享資源(比如內存的訪問)的影響。而全新的VMX模式,可以使CPU運行於一個受監控的VMX non-root狀態。


具體的VT技術的實現非常複雜,這裏就不説了



第二,VT技術和調試技術

首先簡單介紹一下調試技術

SoftICE通過給軟件代碼寫入CC(int 3指令),使軟件觸發BP異常,CPU會調用INT 3中斷,而SoftICE hook了系統的INT 3中斷,在第一時刻捕獲到了BP異常,引發了中斷。

單步的話也是改EFLAGS中的TF位,執行後,CPU會調用INT 1中斷,而SoftICE hook了系統的INT 1中斷,引發了中斷。同理還有DRx的設置,引發硬件斷點。


有這些中斷,SoftICE在中斷後可以捕捉當前CPU狀態,顯示內存內容,就可以進行調試了。


OD的調試就比SoftICE簡單多了,OD使用windows的調試功能,最終還是要用到INT 1 / INT 3中斷。



所以説,調試功能中,INT 1 / INT 3中斷是很重要的。檢查一下INT 1 / INT 3可以檢測到SoftICE。直接hook掉,OD / SoftICE都用不了了。


然後是VT,上面已經説了VMX non-root模式在任何特權下都可以被VMM監控,其中包括了異常部分。

比如説,在VMX non-root模式,軟件觸發BP異常,(在VMCS設置了的情況下),CPU不會去執行INT 3中斷,而是引發vm exit,即把控制權交給了VMM,VMM就可以像SoftICE一樣處理異常,然後再返回到VMX non-root狀態,CPU根據設置執行(如果沒有設置,CPU會去執行INT 3中斷)。同樣INT

1也是這樣。


這樣的好處顯而易見,在觸發了BP異常後,CPU的第一時間控制權是在VMM手中,而不是INT 3中斷上面。所以可以無視hook或者檢測。由此,可以達到調試的目的。



第三,DT調試器的基本原理

DT調試器目前是雙機的,Host用的是VSICE,Target是自己的驅動(即VMM),兩者進行通信,達到調試的目的。



第四,關於ANTI DEBUG

前面對VMM部分説的還算清晰,因此,目前看來基於VT的調試器可以躲過市面上所有的anti,這點大家不用懷疑了,不用再去叫作者測試什麼什麼了,沒有難度的。



=============================================================================================================================================

上面説的是一些基本的概念,下面説一下我對DT調試器的看法

=============================================================================================================================================


這裏説的都是我的個人觀點


首先,不可否認,這個東西很新穎,基於的調試原理點非常底層,反ANTI能力非常強大。

但VT技術用到調試器上並不是無敵的,畢竟,開了VMX的機器還是可以用比較猥瑣的方法檢測的,想滅掉所有猥瑣檢測方法是要下很大的功夫的,DT調試器1.1版本我拖到IDA裏面簡單看了一下,是可以被anti的,1.3不知道有沒有修復掉。這裏我不公開anti方法,因為公開了,作者就可以修復,而且作者花了大工夫,是可以處理掉的。


但是,作者有些東西沒有告訴大家,這裏我説一下:

VT技術最早從2004年就公開了,這個技術一直到今天,一直還在研發。為了兼容性,Intel給VT技術加了一個版本號,大家可以參考Intel的手冊,對於不同版本的CPU,支持VT的技術多少是不一樣的。

我舉個例子,VT裏面可以監控下面這條指令(也就是説VMX non-root狀態執行了這條指令,就會被VMM監控到)


SIDT (這條指令是讀取IDT向量地址的,要隱藏IDT HOOK,監控這條指令是非常方便的吧 ^_^ )


但是,不是所有CPU都支持這條指令的監控,這個需要檢查一下CPU是否支持這個功能,才能夠使用。


這樣看來,低版本的CPU即使開了VT,也不一定有一些強大功能,尤其是內存部分的監控功能,強大的內存監控部分需要的VT版本號比較高。


所以説,隨着以後DT調試器功能越來越多,你也必須跟着升級CPU,否則,某些功能很可能無法使用。




然後,以個人觀點説一下DT調試器的前景

1,會用雙機調試的人很少,而且雙機中需要有帶VT的CPU也是比較少的,所以,雙機調試沒有單機調試來的普及。

2,買了一個DT調試器,用的卻是VSICE的界面,心理爽不爽呢?

3,DT調試器的亮點是反ANTI。哪些東西的ANTI比較強大?ring3的程序,可以説ANTI基本上都被滅了,因此,當前情況下,網絡遊戲的保護系統就是ANTI最強的東西。所以,DT調試器直接對口的人羣是涉及網遊的人。


涉及網遊的人有這幾部分:

1,能對付網遊保護系統的,這部分人對付網遊保護系統的方法一般都是非公開的,因此,研究出方法可以用很長很長時間。反ANTI這個功能對這部分人來説沒有什麼太大誘惑

2,對付不了網遊保護系統的,這部分人一般都是做外掛的(反外掛的人如果調試自己公司遊戲對付不了,可以申請剝離保護系統版本去調試,如果是調試其他公司遊戲,可以歸到做外掛部分中),而成熟的做外掛的團隊,對於各個保護系統都是非常熟悉的,所以這部分人肯定不是專業團隊,是散户,散户的特點是技術還不夠強大,資金比較少,那麼DT這種雙機調試器,即使買來了也不一定用得很好,所以就會出現觀望,或者由於資金問題不買。


所以,DT調試器可能賣給上面第二部分的人或者第一部分人嫌麻煩了,直接買一套。


上面我説到了VT調試器的反ANTI能力很強大,但是不是無敵的,尤其和CPU型號關係非常大,所以,為了過ANTI買調試器的人會考慮到,做網遊保護系統的人也可能研究這部分技術,想辦法來anti,那

麼自己買的東西未必能100%解決問題,這樣就加大了觀望態度。





最後,我自己YY一下,VT技術本身不是用來調試的,未來Intel公司有可能加入檢測VMX模式的功能?這樣VT調試器的反ANTI功能直接就沒有意義了。