在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法
【專利摘要】本發(fā)明是在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法,包括函數(shù)調(diào)用觸發(fā)器插入算法、觸發(fā)器代碼的構(gòu)造。在需要監(jiān)控的時候,從被監(jiān)控的應(yīng)用程序的函數(shù)的入口地址開始處根據(jù)函數(shù)調(diào)用觸發(fā)器插入算法選擇的位置插入函數(shù)調(diào)用觸發(fā)器代碼,不需要監(jiān)控時可以恢復(fù)原樣,具有動態(tài)性和無侵性。優(yōu)點:可在任何一個被監(jiān)控函數(shù)的入口處開始尋找一個7字節(jié)或者9字節(jié)的位置,在這個位置根據(jù)這個位置原來的代碼的情況選擇長度分別為7字節(jié)和9字節(jié)兩種函數(shù)調(diào)用觸發(fā)代碼之一進(jìn)行插入。
【專利說明】
在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及的是一種在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法,能夠監(jiān)控任何一個用戶進(jìn)程中任何一個函數(shù)的調(diào)用。監(jiān)控行為是可以動態(tài)設(shè)置的,只有在管理者需要的時候才在被監(jiān)控的應(yīng)用程序的被調(diào)用函數(shù)中插入函數(shù)調(diào)用觸發(fā)器,函數(shù)調(diào)用觸發(fā)器插入后一旦需要被監(jiān)控的函數(shù)被調(diào)用,則函數(shù)調(diào)用觸發(fā)器觸發(fā)異常、陷入虛擬機管理器;在應(yīng)用程序中的函數(shù)不需要被監(jiān)控時,這個函數(shù)的代碼保持原樣。因此,該監(jiān)控方法是動態(tài)的和無侵的,屬于計算機應(yīng)用技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]現(xiàn)有的監(jiān)控方法有的采用對注冊的函數(shù)指針表進(jìn)行修改,使得函數(shù)被調(diào)用的時候能跳轉(zhuǎn)到監(jiān)控函數(shù)處進(jìn)行監(jiān)控,這樣的方法對沒有注冊的函數(shù)就無法監(jiān)控;有的監(jiān)控方法采用在函數(shù)調(diào)用處插入監(jiān)控代碼,這樣的方法難以實現(xiàn)動態(tài)地進(jìn)行配置,對應(yīng)用程序要進(jìn)行修改、編譯等,不是無侵的。
[0003]在軟件行為監(jiān)控、軟件測試中需要一種動態(tài)無侵的函數(shù)調(diào)用監(jiān)控方法,本發(fā)明正是提供了這樣一種方法。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提出的是一種在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法,可在任何一個被監(jiān)控函數(shù)的入口處開始尋找一個7字節(jié)或者9字節(jié)的位置,在這個位置根據(jù)這個位置原來的代碼的情況選擇長度分別為7字節(jié)
和9字節(jié)兩種函數(shù)調(diào)用觸發(fā)代碼之一進(jìn)行插入。
[0005]本發(fā)明的技術(shù)解決方案:在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法,其特征是包括函數(shù)調(diào)用觸發(fā)器插入算法、觸發(fā)器代碼的構(gòu)造,在需要監(jiān)控的時候,從被監(jiān)控的應(yīng)用程序的函數(shù)的入口地址開始處根據(jù)函數(shù)調(diào)用觸發(fā)器插入算法選擇的位置插入函數(shù)調(diào)用觸發(fā)器代碼,不需要監(jiān)控時可以恢復(fù)原樣,具有動態(tài)性和無侵性。
[0006]本發(fā)明的優(yōu)點:
1)虛擬化機制用于觸發(fā)器中的某些代碼在具有硬件虛擬化機制的CRJ上一定可以產(chǎn)生異常進(jìn)而陷入虛擬機管理器中,不會被旁路;
2)動態(tài)無侵的監(jiān)控方法可以只在管理者需要的時候才在被監(jiān)控的應(yīng)用程序的被調(diào)用函數(shù)中插入函數(shù)調(diào)用觸發(fā)器。在應(yīng)用程序中的函數(shù)不需要被監(jiān)控時,這個函數(shù)的代碼可以恢復(fù)到原樣;
3)插入函數(shù)調(diào)用觸發(fā)器后,一旦需要被監(jiān)控的函數(shù)被調(diào)用,則觸發(fā)器觸發(fā)異常、陷入虛擬機管理器;在虛擬機管理器中進(jìn)行分析與控制,具有更高的安全性;
4)函數(shù)調(diào)用觸發(fā)器插入位置的選擇是在被監(jiān)控的函數(shù)的開始的一段代碼中選擇若干可以的被覆蓋字節(jié)用于插入函數(shù)調(diào)用觸發(fā)器,并且在虛擬機管理器中準(zhǔn)確地模擬運行這些被覆蓋的代碼; 5)觸發(fā)器代碼的構(gòu)造包括通常的產(chǎn)生陷入虛擬機管理器的代碼和相關(guān)寄存器保存與恢復(fù)。這樣可以保持應(yīng)用程序的功能不收到任何影響,實現(xiàn)了無侵性;
6)可在任何一個被監(jiān)控函數(shù)的入口處開始尋找一個7字節(jié)或者9字節(jié)的位置,在這個位置根據(jù)這個位置原來的代碼的情況選擇長度分別為7字節(jié)和9字節(jié)兩種函數(shù)調(diào)用觸發(fā)代碼之一進(jìn)行插入。
【具體實施方式】
[0007]在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法,包括函數(shù)調(diào)用觸發(fā)器插入算法、觸發(fā)器代碼的構(gòu)造,在需要監(jiān)控的時候,從被監(jiān)控的應(yīng)用程序的函數(shù)的入口地址開始處根據(jù)函數(shù)調(diào)用觸發(fā)器插入算法選擇的位置插入函數(shù)調(diào)用觸發(fā)器代碼,不需要監(jiān)控時可以恢復(fù)原樣,具有動態(tài)性和無侵性。
[0008]在需要監(jiān)控的時候,從被監(jiān)控的應(yīng)用程序的函數(shù)的入口地址開始處根據(jù)函數(shù)調(diào)用觸發(fā)器插入算法選擇的位置插入函數(shù)調(diào)用觸發(fā)器代碼,不需要監(jiān)控時可以恢復(fù)原樣,具有動態(tài)性和無侵性。
[0009]所述的函數(shù)調(diào)用觸發(fā)器代碼如下:
(1)如果在被監(jiān)控的函數(shù)的入口代碼到函數(shù)調(diào)用觸發(fā)器代碼插入點之前寄存器eax沒有被改寫,則觸發(fā)器代碼codeA為:
mo V eax,constant;
cpuid
(2)在被監(jiān)控的函數(shù)的入口代碼到函數(shù)調(diào)用觸發(fā)器代碼插入點之前寄存器eax被改寫,觸發(fā)器代碼codeB如下,其中register是從觸發(fā)器插入點開始沒有被改寫過的一個通用寄存器:
moV register, eax
moV eax,constant
cpuid
moV eax,register 0
[0010]所述的函數(shù)調(diào)用觸發(fā)器插入算法:
1)令插入點位置a=0,下一條被檢查指令位置b=0,檢查通過的指令長度L=O,狀態(tài)S=O,插入點之前被改寫過的通用寄存器集合RW=0,在插入點之前沒有被該寫過可以用來保存eax原來的值的通用寄存器集合R={ eax, ebx, ecx, edx, esi , edi };
2)在b處讀取一條指令,設(shè)指令的長度為k,指令中的作為源操作數(shù)的通用寄存器的集合為:rr,作為目的操作數(shù)的通用寄存器的集合為rw;L + k — L,b + k — b,Rff U rw^Rff;
3)如果rrΠ R關(guān)Φ轉(zhuǎn)VI
4)如果L2 7并且eax e R,則令S=1轉(zhuǎn)IX;
5)如果L2 9則令s=2轉(zhuǎn)IX;否則轉(zhuǎn)II;
6)R\ ( rr U Rff ) ^ R;
7)如果R在Φ,則轉(zhuǎn)II;
8)L= O, a = b,轉(zhuǎn)II; 9)如果s=l則報警代碼為代碼序列codeA;如果s=2則報警代碼為代碼序列codeB;報警代碼插入位置a。
[0011 ]工作時,函數(shù)調(diào)用觸發(fā)代碼插入后,一旦這個函數(shù)被調(diào)用,函數(shù)調(diào)用觸發(fā)代碼就被執(zhí)行,繼而產(chǎn)生異常陷入虛擬機監(jiān)控器,在虛擬機監(jiān)控器中對函數(shù)被調(diào)用的情況進(jìn)行分析與控制。同時,在返回前,為被監(jiān)控的應(yīng)用進(jìn)程模擬執(zhí)行被覆蓋的相應(yīng)的代碼,使得應(yīng)用進(jìn)程在功能上與未被監(jiān)控的情況完全一樣。函數(shù)調(diào)用觸發(fā)代碼的插入可以進(jìn)行動態(tài)地管理,在管理者發(fā)出監(jiān)控命令時,執(zhí)行函數(shù)調(diào)用觸發(fā)代碼插入算法,插入相應(yīng)的函數(shù)調(diào)用觸發(fā)代碼。在管理者發(fā)出停止監(jiān)控命令時,可以撤銷插入的函數(shù)調(diào)用觸發(fā)代碼,被監(jiān)控的函數(shù)的原樣。
[0012]函數(shù)調(diào)用觸發(fā)代碼插入算法:
令插入點位置a=0,下一條被檢查指令位置b=0,檢查通過的指令長度L=O,狀態(tài)S=O,插入點之前被改寫過的通用寄存器集合RW=0,在插入點之前沒有被該寫過可以用來保存eax原來的值的通用寄存器集合R={ eax, ebx, ecx, edx, esi, edi };
在b處讀取一條指令,設(shè)指令的長度為k,指令中的作為源操作數(shù)的通用寄存器的集合為:rr,作為目的操作數(shù)的通用寄存器的集合為rw;L + k — L,b + k — b,Rff U rw ^Rff ;
如果rr Π R關(guān)Φ轉(zhuǎn)VI
如果L 2 7并且eax e R,則令s=l轉(zhuǎn)IX;
如果L 2 9則令s=2轉(zhuǎn)IX;否則轉(zhuǎn)II;
R \ ( rr U Rff ) ^ R;
如果R關(guān)Φ,則轉(zhuǎn)II;
L = O, a = b,轉(zhuǎn)II;
如果S=I則報警代碼為代碼序列codeA;如果s=2則報警代碼為代碼序列codeB;報警代碼插入位置a。
[0013]函數(shù)調(diào)用觸發(fā)代碼codeA: mo V eax,constant; cupid
函數(shù)調(diào)用觸發(fā)代碼codeB: moV register, eax moV eax,constant
cupid
mo V eax,register
【主權(quán)項】
1.在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法,其特征是包括函數(shù)調(diào)用觸發(fā)器插入算法、觸發(fā)器代碼的構(gòu)造,在需要監(jiān)控的時候,從被監(jiān)控的應(yīng)用程序的函數(shù)的入口地址開始處根據(jù)函數(shù)調(diào)用觸發(fā)器插入算法選擇的位置插入函數(shù)調(diào)用觸發(fā)器代碼,不需要監(jiān)控時可以恢復(fù)原樣,具有動態(tài)性和無侵性。2.根據(jù)權(quán)利要求1所述的在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法,其特征是所述的函數(shù)調(diào)用觸發(fā)器代碼如下: (1)如果在被監(jiān)控的函數(shù)的入口代碼到函數(shù)調(diào)用觸發(fā)器代碼插入點之前寄存器eax沒有被改寫,則觸發(fā)器代碼codeA為: moV eax, constant; cpuid (2)如果在被監(jiān)控的函數(shù)的入口代碼到函數(shù)調(diào)用觸發(fā)器代碼插入點之前寄存器eax被改寫,觸發(fā)器代碼codeB如下,其中register是從觸發(fā)器插入點開始沒有被改寫過的一個通用寄存器: moV register, eax moV eax, constant cpuid moV eax, register 03.根據(jù)權(quán)利要求1所述的在虛擬機管理器中動態(tài)無侵的應(yīng)用進(jìn)程函數(shù)調(diào)用監(jiān)控方法,其特征是所述的函數(shù)調(diào)用觸發(fā)器插入算法: 1)令插入點位置a=0,下一條被檢查指令位置b=0,檢查通過的指令長度L=O,狀態(tài)S=O,插入點之前被改寫過的通用寄存器集合RW=0,在插入點之前沒有被該寫過可以用來保存eax原來的值的通用寄存器集合R={ eax, ebx, ecx, edx, esi , edi }; 2)在b處讀取一條指令,設(shè)指令的長度為k,指令中的作為源操作數(shù)的通用寄存器的集合為:rr,作為目的操作數(shù)的通用寄存器的集合為rw; L + k — L,b + k — b,Rff U rw^Rff; 3)如果rrΠ R關(guān)Φ轉(zhuǎn)VI 4)如果L2 7并且eax e R,則令S=1轉(zhuǎn)IX; 5)如果L2 9則令s=2轉(zhuǎn)IX;否則轉(zhuǎn)II; 6)R\ ( rr U Rff ) ^ R; 7)如果R在Φ,則轉(zhuǎn)II; 8)L= O, a = b,轉(zhuǎn)II; 9)如果s=l則報警代碼為代碼序列codeA;如果s=2則報警代碼為代碼序列codeB;報警代碼插入位置a。
【文檔編號】G06F9/455GK105843667SQ201610117437
【公開日】2016年8月10日
【申請日】2016年3月2日
【發(fā)明人】黃皓, 余勁
【申請人】南京大學(xué)