亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于虛擬機(jī)的信息記錄方法

文檔序號:6383753閱讀:339來源:國知局
專利名稱:一種基于虛擬機(jī)的信息記錄方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信領(lǐng)域,尤指一種基于虛擬機(jī)的信息記錄方法。
背景技術(shù)
目前,記錄程序數(shù)據(jù)改寫和代碼塊等信息的方式主要有兩種第一種是使用調(diào)試器記錄程序運(yùn)行的信息,常用的調(diào)試器有Safforn、PolyUnpack等等,這種方式記錄效率比較高,但是程序可以通過反調(diào)試技術(shù)進(jìn)行對抗,這樣就會導(dǎo)致調(diào)試器崩潰或記錄錯誤的信息;第二種是使用虛擬機(jī)記錄程序運(yùn)行的信息,虛擬機(jī)是指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個完全隔離環(huán)境中的完整計算機(jī)系統(tǒng),常用的虛擬機(jī)有Renovo、Malware Normalization、PandorasBochs等,這種方式可以避開大部分程序的反調(diào)試,但是這種方式需要在記錄文件中記錄執(zhí)行每條指令的信息,無論該條指令信息對后續(xù)信息分析是否有用,都會在記錄文件中記錄,最終得到的記錄文件非常大,這樣就會導(dǎo)致記錄效率低、占用存儲空間多;并且這種方式記錄的信息類型非常有限,這就會不利于后續(xù)進(jìn)行信息分析。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種基于虛擬機(jī)的信息記錄方法,用以解決現(xiàn)有技術(shù)中存在的使用虛擬機(jī)記錄程序運(yùn)行的信息時記錄效率低、占用存儲空間多且不利于后續(xù)進(jìn)行信息分析的問題。一種基于虛擬機(jī)的信息記錄方法,包括虛擬機(jī)運(yùn)行選定程序時,根據(jù)所述選定程序中的跳轉(zhuǎn)指令分割所述選定程序,得到若干代碼塊;以及在執(zhí)行代碼塊的過程中,所述虛擬機(jī)監(jiān)控事件發(fā)生,并按照事件發(fā)生的先后順序記錄事件標(biāo)識和事件信息,所述事件信息包括創(chuàng)建的線程或進(jìn)程信息、加載的模塊信息、進(jìn)程分配的堆信息、進(jìn)程創(chuàng)建的棧信息、數(shù)據(jù)改寫信息、代碼塊信息、循環(huán)次數(shù)信息、新棧頂?shù)奈恢眯畔ⅰ⒑瘮?shù)調(diào)用信息、函數(shù)返回信息、以及中央處理器CPU異常信息中之一或組合。本發(fā)明有益效果如下本發(fā)明實(shí)施例提供了一種基于虛擬機(jī)的信息記錄方法,該方案虛擬機(jī)運(yùn)行選定程序時,根據(jù)所述選定程序中的跳轉(zhuǎn)指令分割所述選定程序,得到若干代碼塊;以及在執(zhí)行代碼塊的過程中,所述虛擬機(jī)監(jiān)控事件發(fā)生,并按照事件發(fā)生的先后順序記錄事件標(biāo)識和事件信息,所述事件信息包括創(chuàng)建的線程或進(jìn)程信息、加載的模塊信息、進(jìn)程分配的堆信息、進(jìn)程創(chuàng)建的棧信息、數(shù)據(jù)改寫信息、代碼塊信息、循環(huán)次數(shù)信息、新棧頂?shù)奈恢眯畔?、函?shù)調(diào)用信息、函數(shù)返回信息、以及中央處理器CPU異常信息中之一或組合。該方案將選定程序分割為若干個代碼塊,程序運(yùn)行過程中,以代碼塊為單位,記錄代碼塊的執(zhí)行信息,這種以代碼塊為單位進(jìn)行信息記錄的方式相對于現(xiàn)有技術(shù)中需要記錄每條執(zhí)行指令的信息的方式,大大提高了記錄效率,并且記錄文件非常小,節(jié)省了存儲空間;并且,還記錄了新棧頂?shù)奈恢眯畔?、?shù)據(jù)改寫信息、代碼塊的信息、函數(shù)調(diào)用標(biāo)識、函數(shù)調(diào)用信息、函數(shù)返回標(biāo)識、函數(shù)返回信息、循環(huán)次數(shù)信息、異常信息,這些信息能夠?yàn)楹罄m(xù)信息分析提供更好的幫助。


圖1為本發(fā)明實(shí)施例中的基于虛擬機(jī)的信息記錄方法的流程圖;圖2為本發(fā)明實(shí)施例中的虛擬機(jī)監(jiān)控事件發(fā)生和記錄事件信息的流程圖。
具體實(shí)施例方式針對現(xiàn)有技術(shù)中存在的使用虛擬機(jī)記錄程序運(yùn)行的信息時記錄效率低、占用存儲空間多且不利于后續(xù)進(jìn)行信息分析的問題,本發(fā)明實(shí)施例提供了一種基于虛擬機(jī)的信息記錄方法,該方法的流程如圖1所示,具體執(zhí)行步驟如下S10:虛擬機(jī)運(yùn)行選定程序時,根據(jù)選定程序中的跳轉(zhuǎn)指令分割選定程序,得到若干代碼塊。Sll :虛擬機(jī)執(zhí)行得到的代碼塊??梢岳脛討B(tài)翻譯技術(shù)來分割選定程序,Sll中執(zhí)行代碼塊的過程和SlO中的分割代碼塊的過程是同時進(jìn)行的,不用等到將程序全部解析完代碼塊后再運(yùn)行,節(jié)省了時間。S12:在執(zhí)行代碼塊的過程中,虛擬機(jī)監(jiān)控事件發(fā)生,并按照事件發(fā)生的先后順序記錄事件標(biāo)識和事件信息。事件信息包括創(chuàng)建的線程或進(jìn)程信息、加載的模塊信息、進(jìn)程分配的堆信息、進(jìn)程創(chuàng)建的棧信息、數(shù)據(jù)改寫信息、代碼塊信息、循環(huán)次數(shù)信息、新棧頂?shù)奈恢眯畔ⅰ⒑瘮?shù)調(diào)用信息、函數(shù)返回信息、以及中央處理器CPU異常信息中之一或組合。要記錄的信息有很多種,為了便于區(qū)分各類信息,以及后續(xù)能快速解析序列化后的日記文件,可以在每個信息前添加用設(shè)定字節(jié)的事件標(biāo)識,在標(biāo)識后緊接事件信息。這些信息的順序是按照事件發(fā)生的先后順序排列的,真實(shí)反應(yīng)了選定程序的流程。當(dāng)選定程序?yàn)?2位時,設(shè)定字節(jié)為4個字節(jié),事件標(biāo)識為4個字節(jié);當(dāng)選定程序?yàn)?4位時,設(shè)定字節(jié)為8個字節(jié),事件標(biāo)識為8個字節(jié)。該方案將選定程序分割為若干個代碼塊,程序運(yùn)行過程中,以代碼塊為單位,記錄代碼塊的執(zhí)行信息,這種以代碼塊為單位進(jìn)行信息記錄的方式相對于現(xiàn)有技術(shù)中需要記錄每條執(zhí)行指令的信息的方式,大大提高了記錄效率,并且記錄文件非常小,節(jié)省了存儲空間;并且,還記錄了新棧頂?shù)奈恢眯畔ⅰ?shù)據(jù)改寫信息、代碼塊的信息、函數(shù)調(diào)用標(biāo)識、函數(shù)調(diào)用信息、函數(shù)返回標(biāo)識、函數(shù)返回信息、循環(huán)次數(shù)信息、異常信息,這些信息能夠?yàn)楹罄m(xù)信息分析提供更好的幫助。具體的,上述S12中的虛擬機(jī)監(jiān)控事件發(fā)生,并按照事件發(fā)生的先后順序記錄事件標(biāo)識和事件信息,如圖2所示,具體包括以下之一或組合S120 :虛擬機(jī)監(jiān)控事件發(fā)生。S121 :若虛擬機(jī)監(jiān)控到線程或進(jìn)程的創(chuàng)建,則在日記文件中記錄創(chuàng)建標(biāo)識和創(chuàng)建的進(jìn)程或線程信息,執(zhí)行S120。S122:若虛擬機(jī)監(jiān)控到模塊加載,則在日記文件中記錄加載標(biāo)識和加載的模塊信息,執(zhí)行S120。
S123 :若虛擬機(jī)監(jiān)控到進(jìn)程分配堆,則在日記文件中記錄加載標(biāo)識和分配的堆信息,執(zhí)行S120。S124:若虛擬機(jī)監(jiān)控到進(jìn)程創(chuàng)建棧,則在日記文件中記錄加載標(biāo)識和創(chuàng)建的棧信息,執(zhí)行S120。S125 :若虛擬機(jī)監(jiān)控到數(shù)據(jù)改寫,則判斷記錄的當(dāng)前信息類型是否是代碼塊信息,若是,則在日記文件中記錄信息類型切換標(biāo)識和數(shù)據(jù)改寫信息;否則,則在日記文件中記錄數(shù)據(jù)改寫信息,執(zhí)行S120。代碼塊的信息和數(shù)據(jù)改寫的信息是程序運(yùn)行后的最常見的信息,會被頻繁記錄,所以在日記文件中大部分都是代碼塊信息和數(shù)據(jù)改寫信息,為了節(jié)省空間,代碼塊信息和數(shù)據(jù)改寫信息不需要使用不同的標(biāo)識,只需要通過信息類型切換標(biāo)識來代表這兩種信息的切換即可。可以維護(hù)一個當(dāng)前信息類型,該當(dāng)前信息類型表征在此之前最后執(zhí)行的是數(shù)據(jù)改寫還是代碼塊,可以根據(jù)當(dāng)前信息類型來確定是否需要記錄信息類型切換標(biāo)識。S126:虛擬機(jī)執(zhí)行完一個代碼塊后,則判斷當(dāng)前信息類型是否是數(shù)據(jù)改寫信息,若是,則在日記文件中記錄信息類型切換標(biāo)識和代碼塊信息;否則,則在日記文件中記錄代碼塊信息,執(zhí)行S120。S127 :虛擬機(jī)執(zhí)行完一個代碼塊后,判斷寄存器的值是否改變,若改變,則在日記文件中記錄棧頂變化標(biāo)識和新棧頂?shù)奈恢眯畔?,?zhí)行S120。每執(zhí)行完每一個代碼塊后,判斷寄存器的值(對于32位選定程序,是esp寄存器;對于64位選定程序則是rsp寄存器)是否改變,若改變,則表示程序棧頂有變化,則記錄棧頂變化標(biāo)識和新棧頂?shù)奈恢眯畔?;所以,棧頂變化的信息不是按照指令粒度的,而是代碼塊粒度的。S128:若執(zhí)行完的代碼塊的最后一個跳轉(zhuǎn)指令為函數(shù)調(diào)用指令,則在日記文件中記錄函數(shù)調(diào)用標(biāo)識,執(zhí)行S120。當(dāng)執(zhí)行完一個代碼塊后,由于每個代碼塊是按跳轉(zhuǎn)指令來分割的,函數(shù)調(diào)用指令也被虛擬機(jī)認(rèn)為是一條跳轉(zhuǎn)指令,因此,可判斷這個代碼塊最后一條指令是否為函數(shù)調(diào)用指令,若是,則記錄函數(shù)調(diào)用標(biāo)識。S129:若最后一個跳轉(zhuǎn)指令為函數(shù)返回指令,則在日記文件中記錄函數(shù)返回標(biāo)識,執(zhí)行S120。當(dāng)執(zhí)行完一個代碼塊后,由于每個代碼塊是按跳轉(zhuǎn)指令來分割,函數(shù)返回指令也被虛擬機(jī)認(rèn)為是一條跳轉(zhuǎn)指令,因此,可判斷這個代碼塊最后一條指令是否為函數(shù)返回指令,若是,則記錄函數(shù)返回標(biāo)識。S130 :若執(zhí)行完的代碼塊與上一個代碼塊的起始地址和終止地址均相同,則在日記文件中記錄循環(huán)標(biāo)識和循環(huán)次數(shù)信息,執(zhí)行S120。由于每個代碼塊是按跳轉(zhuǎn)指令來分割,每執(zhí)行一個代碼塊,都可以判斷該代碼塊和上一個代碼塊的起始地址和結(jié)束地址是否一樣,若一樣,則認(rèn)為是一個循環(huán),記錄循環(huán)次
數(shù)信息。S131 :若虛擬機(jī)監(jiān)控到CPU異常,則在日記文件中記錄異常標(biāo)識和CPU異常信息,執(zhí)行S120。若執(zhí)行完代碼塊發(fā)生CPU異常,則虛擬機(jī)會捕獲到CPU異常,則在日記文件中記錄異常標(biāo)識和CPU異常信息。具體的,上述創(chuàng)建標(biāo)識為VM_THEAD。創(chuàng)建的進(jìn)程信息的結(jié)構(gòu)為設(shè)定字節(jié)的進(jìn)程標(biāo)識(Identification, ID)。創(chuàng)建的線程信息的結(jié)構(gòu)為設(shè)定字節(jié)的線程ID。對于32位選定程序來說,設(shè)定字節(jié)為4個字節(jié),那么,創(chuàng)建的進(jìn)程信息的結(jié)構(gòu)為4個字節(jié)的進(jìn)程ID,創(chuàng)建的線程信息的結(jié)構(gòu)為4個字節(jié)的線程ID,若此時線程尚未創(chuàng)建,可記錄選用的特殊值,例如-1等。對于64位選定程序來說,設(shè)定字節(jié)為8個字節(jié)。具體的,上述加載標(biāo)識為VM_MEM0RY。加載的模塊信息的結(jié)構(gòu)為設(shè)定字節(jié)的進(jìn)程ID、二分之一設(shè)定字節(jié)的模塊名長度、模塊名字符串、設(shè)定字節(jié)的模塊加載的基地址、設(shè)定字節(jié)的模塊映射的內(nèi)存大小、設(shè)定字節(jié)模塊文件的大小、模塊文件的二進(jìn)制數(shù)據(jù)。創(chuàng)建的堆信息的結(jié)構(gòu)為設(shè)定字節(jié)的進(jìn)程ID、二分之一設(shè)定字節(jié)的模塊名長度、設(shè)定字節(jié)的模塊加載的基地址、設(shè)定字節(jié)的堆大小、設(shè)定字節(jié)的無用數(shù)據(jù)。創(chuàng)建的棧信息的結(jié)構(gòu)為設(shè)定字節(jié)的進(jìn)程ID、二分之一設(shè)定字節(jié)的模塊名長度、設(shè)定字節(jié)的模塊加載的基地址、設(shè)定字節(jié)的模塊加載的基地址、設(shè)定字節(jié)的棧大小、設(shè)定字節(jié)的無用數(shù)據(jù)。對于32位選定程序來說,設(shè)定字節(jié)為4個字節(jié),那么,加載的模塊信息的結(jié)構(gòu)為4個字節(jié)的進(jìn)程ID、2個字節(jié)的模塊名長度、模塊名字符串、4個字節(jié)的模塊加載的基地址、4個字節(jié)的模塊映射的內(nèi)存大小、4個字節(jié)模塊文件的大小、模塊文件的二進(jìn)制數(shù)據(jù);其中,模塊名長度的值必不為0,因?yàn)槟K必有名字;模塊名字符串的長度由前面2字節(jié)指定;模塊文件的二進(jìn)制數(shù)據(jù)的長度由前面4字節(jié)指定。創(chuàng)建的堆信息的結(jié)構(gòu)為4個字節(jié)的進(jìn)程ID、2個字節(jié)的模塊名長度、4個字節(jié)的模塊加載的基地址、4個字節(jié)的堆大小、4個字節(jié)的無用數(shù)據(jù);其中,2個字節(jié)的模塊名長度的值必為0,因?yàn)槎褯]有名字,所以可以根據(jù)這點(diǎn)來區(qū)分模塊信息和堆信息;堆的基地址都是按0x1000對齊,例如0x470000,所以最低位必為O ;4個字節(jié)的無用數(shù)據(jù),用于和加載的模
塊的信息結(jié)構(gòu)一致。創(chuàng)建的棧信息的結(jié)構(gòu)為4個字節(jié)的進(jìn)程ID、2個字節(jié)的模塊名長度、4個字節(jié)的模塊加載的基地址、4個字節(jié)的模塊加載的基地址、4個字節(jié)的棧大小、4個字節(jié)的無用數(shù)據(jù)。其中,2個字節(jié)的模塊名長度的值必為0,因?yàn)闂R矝]有名字;4個字節(jié)的模塊加載的基地址,棧的基地址也是按0x1000對齊,但這里為了區(qū)別棧和堆,在最低位標(biāo)志位2,例如0x100002 ;4個字節(jié)的無用數(shù)據(jù),用于和加載的模塊的信息結(jié)構(gòu)一致。對于64位選定程序來說,上述信息結(jié)構(gòu)中的設(shè)定字節(jié)為8個字節(jié),具體的信息結(jié)構(gòu)不再說明。記錄加載的模塊的信息、創(chuàng)建的堆的信息和創(chuàng)建的棧的信息時,使用的是同樣的標(biāo)識,即VM_MEM0RY,之所以三種信息共用一個標(biāo)識,是為了減少日記文件的大小。具體的,上述信息類型切換標(biāo)識為VM_ESCAPE。數(shù)據(jù)改寫信息的結(jié)構(gòu)為設(shè)定字節(jié)的進(jìn)行數(shù)據(jù)改寫指令的地址、設(shè)定字節(jié)的數(shù)據(jù)改寫的起始地址、設(shè)定字節(jié)的記錄長度、記錄的數(shù)據(jù)內(nèi)容。對于32位選定程序來說,設(shè)定字節(jié)為4個字節(jié),數(shù)據(jù)改寫信息的結(jié)構(gòu)為4個字節(jié)的進(jìn)行數(shù)據(jù)改寫指令的地址、4個字節(jié)的數(shù)據(jù)改寫的起始地址、4個字節(jié)的記錄長度、記錄的數(shù)據(jù)內(nèi)容。其中,寫入的數(shù)據(jù)內(nèi)容的長度是由前面4個字節(jié)指定的。對于64位選定程序來說,設(shè)定字節(jié)為8個字節(jié)。具體的,上述異常標(biāo)識為VM_EXCPTI0N。CPU異常信息結(jié)構(gòu)為四分之一設(shè)定字節(jié)的異常類型、二分之一設(shè)定字節(jié)的異常特征位、設(shè)定字節(jié)的程序執(zhí)行地址、設(shè)定字節(jié)的異常訪問地址。對于32位選定程序來說,設(shè)定字節(jié)為4個字節(jié),那么,CPU異常信息結(jié)構(gòu)為I個字節(jié)的異常類型,2個字節(jié)的異常特征位,4個字節(jié)程序執(zhí)行地址,4個字節(jié)異常訪問地址。對于64為選定程序來說,設(shè)定字節(jié)為8個字節(jié)。具體的,上述棧頂變化標(biāo)識為VM_STACK。新棧頂位置信息的結(jié)構(gòu)為設(shè)定字節(jié)的新棧頂位置。對于32位選定程序來說,設(shè)定字節(jié)為4個字節(jié),那么,新棧頂位置信息的結(jié)構(gòu)為4個字節(jié)的新棧頂位置。對于64為選定程序來說,設(shè)定字節(jié)為8個字節(jié)。具體的,上述信息類型切換標(biāo)識為VM_ESCAPE。代碼塊信息的結(jié)構(gòu)為設(shè)定字節(jié)的代碼塊的起始地址、設(shè)定字節(jié)的代碼塊的結(jié)束地址。對于32位選定程序來說,設(shè)定字節(jié)為4個字節(jié),那么,代碼塊信息的結(jié)構(gòu)為4個字節(jié)的代碼塊的起始地址、4個字節(jié)的代碼塊的結(jié)束地址。對于64為選定程序來說,設(shè)定字節(jié)為8個字節(jié)。其中,結(jié)束地址都是一個跳轉(zhuǎn)指令,原因是程序運(yùn)行后,代碼中會有多個跳轉(zhuǎn),而這些跳轉(zhuǎn)可能是一個循環(huán),也可能是一個函數(shù)調(diào)用,以跳轉(zhuǎn)指令來分割程序?yàn)槿舾纱a塊,有利于分析程序流程。而在現(xiàn)有技術(shù)中基于虛擬機(jī)記錄的方式中,都是針對指令來記錄信息,而不是針對代碼塊來記錄記錄,針對指令記錄信息的方式使得日記文件非常大,而本申請中針對代碼塊來記錄信息的方式使得日記文件很小。具體的,上述循環(huán)標(biāo)識為VM_L00P。循環(huán)次數(shù)信息的結(jié)構(gòu)為4個字節(jié)的循環(huán)次數(shù)。對于32位選定程序來說,設(shè)定字節(jié)為4個字節(jié),那么,循環(huán)次數(shù)信息的結(jié)構(gòu)為4個字節(jié)的循環(huán)次數(shù)。對于64為選定程序來說,設(shè)定字節(jié)為8個字節(jié)。當(dāng)記錄上述信息后,研究人員可以解析記錄信息的日記文件,然后分析這些信息,將之應(yīng)用到很多領(lǐng)域,例如利用記錄的日記文件可實(shí)現(xiàn)自動脫殼、進(jìn)行病毒分析、實(shí)行漏洞分析和挖掘等等。該方案中記錄信息的方式較易實(shí)現(xiàn),記錄的信息能夠?yàn)楹罄m(xù)分析提供更好的幫助,并且記錄效率高,節(jié)省了存儲空間。顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種基于虛擬機(jī)的信息記錄方法,其特征在于,包括 虛擬機(jī)運(yùn)行選定程序時,根據(jù)所述選定程序中的跳轉(zhuǎn)指令分割所述選定程序,得到若干代碼塊;以及 在執(zhí)行代碼塊的過程中,所述虛擬機(jī)監(jiān)控事件發(fā)生,并按照事件發(fā)生的先后順序記錄事件標(biāo)識和事件信息,所述事件信息包括創(chuàng)建的線程或進(jìn)程信息、加載的模塊信息、進(jìn)程分配的堆信息、進(jìn)程創(chuàng)建的棧信息、數(shù)據(jù)改寫信息、代碼塊信息、循環(huán)次數(shù)信息、新棧頂?shù)奈恢眯畔?、函?shù)調(diào)用信息、函數(shù)返回信息、以及中央處理器CPU異常信息中之一或組合。
2.如權(quán)利要求1所述的方法,其特征在于,所述虛擬機(jī)監(jiān)控事件發(fā)生,并按照事件發(fā)生的先后順序記錄事件標(biāo)識和事件信息,具體包括 若所述虛擬機(jī)監(jiān)控到線程或進(jìn)程的創(chuàng)建,則在日記文件中記錄創(chuàng)建標(biāo)識和創(chuàng)建的進(jìn)程或線程信息; 若所述虛擬機(jī)監(jiān)控到模塊加載,則在所述日記文件中記錄加載標(biāo)識和加載的模塊信息; 若所述虛擬機(jī)監(jiān)控到進(jìn)程分配堆,則在所述日記文件中記錄所述加載標(biāo)識和分配的堆信息; 若所述虛擬機(jī)監(jiān)控到進(jìn)程創(chuàng)建棧,則在所述日記文件中記錄所述加載標(biāo)識和創(chuàng)建的棧信息; 若所述虛擬機(jī)監(jiān)控到數(shù)據(jù)改寫,則判斷記錄的當(dāng)前信息類型是否是代碼塊信息,若是,則在所述日記文件中記錄信息類型切換標(biāo)識和數(shù)據(jù)改寫信息;否則,則在所述日記文件中記錄數(shù)據(jù)改寫信息; 所述虛擬機(jī)執(zhí)行完一個代碼塊后,則判斷所述當(dāng)前信息類型是否是數(shù)據(jù)改寫信息,若是,則在所述日記文件中記錄所述信息類型切換標(biāo)識和代碼塊信息;否則,則在所述日記文件中記錄代碼塊信息; 所述虛擬機(jī)執(zhí)行完一個代碼塊后,判斷寄存器的值是否改變,若改變,則在所述日記文件中記錄棧頂變化標(biāo)識和新棧頂?shù)奈恢眯畔?;若?zhí)行完的代碼塊的最后一個跳轉(zhuǎn)指令為函數(shù)調(diào)用指令,則在所述日記文件中記錄函數(shù)調(diào)用標(biāo)識;以及,若所述最后一個跳轉(zhuǎn)指令為函數(shù)返回指令,則在所述日記文件中記錄函數(shù)返回標(biāo)識;以及,若執(zhí)行完的代碼塊與上一個代碼塊的起始地址和終止地址均相同,則在所述日記文件中記錄循環(huán)標(biāo)識和循環(huán)次數(shù)信息;若虛擬機(jī)監(jiān)控到CPU異常,則在所述日記文件中記錄異常標(biāo)識和CPU異常信息。
3.如權(quán)利要求2所述的方法,其特征在于,所述創(chuàng)建標(biāo)識為VM_THEAD; 所述創(chuàng)建的進(jìn)程信息的結(jié)構(gòu)為設(shè)定字節(jié)的進(jìn)程標(biāo)識ID ; 所述創(chuàng)建的線程信息的結(jié)構(gòu)為所述設(shè)定字節(jié)的線程ID。
4.如權(quán)利要求2所述的方法,其特征在于,所述加載標(biāo)識為VM_MEMORY; 所述加載的模塊信息的結(jié)構(gòu)為所述設(shè)定字節(jié)的進(jìn)程ID、二分之一所述設(shè)定字節(jié)的模塊名長度、模塊名字符串、所述設(shè)定字節(jié)的模塊加載的基地址、所述設(shè)定字節(jié)的模塊映射的內(nèi)存大小、所述設(shè)定字節(jié)模塊文件的大小、模塊文件的二進(jìn)制數(shù)據(jù); 所述創(chuàng)建的堆信息的結(jié)構(gòu)為所述設(shè)定字節(jié)的進(jìn)程ID、二分之一所述設(shè)定字節(jié)的模塊名長度、所述設(shè)定字節(jié)的模塊加載的基地址、所述設(shè)定字節(jié)的堆大小、所述設(shè)定字節(jié)的無用數(shù)據(jù);所述創(chuàng)建的棧信息的結(jié)構(gòu)為所述設(shè)定字節(jié)的進(jìn)程ID、二分之一所述設(shè)定字節(jié)的模塊名長度、所述設(shè)定字節(jié)的模塊加載的基地址、所述設(shè)定字節(jié)的模塊加載的基地址、所述設(shè)定字節(jié)的棧大小、所述設(shè)定字節(jié)的無用數(shù)據(jù)。
5.如權(quán)利要求2所述的方法,其特征在于,所述信息類型切換標(biāo)識為VM_ESCAPE; 所述數(shù)據(jù)改寫信息的結(jié)構(gòu)為所述設(shè)定字節(jié)的進(jìn)行數(shù)據(jù)改寫指令的地址、所述設(shè)定字節(jié)的數(shù)據(jù)改寫的起始地址、所述設(shè)定字節(jié)的記錄長度、記錄的數(shù)據(jù)內(nèi)容。
6.如權(quán)利要求2所述的方法,其特征在于,所述異常標(biāo)識為VM_EXCPTION,所述CPU異常信息結(jié)構(gòu)為四分之一所述設(shè)定字節(jié)的異常類型、二分之一所述設(shè)定字節(jié)的異常特征位、所述設(shè)定字節(jié)的程序執(zhí)行地址、所述設(shè)定字節(jié)的異常訪問地址。
7.如權(quán)利要求2所述的方法,其特征在于,所述棧頂變化標(biāo)識為VM_STACK; 所述新棧頂位置信息的結(jié)構(gòu)為所述設(shè)定字節(jié)的新棧頂位置。
8.如權(quán)利要求2所述的方法,其特征在于,所述信息類型切換標(biāo)識為VM_ESCAPE; 所述代碼塊信息的結(jié)構(gòu)為所述設(shè)定字節(jié)的代碼塊的起始地址、所述設(shè)定字節(jié)的代碼塊的結(jié)束地址。
9.如權(quán)利要求2所述的方法,其特征在于,所述函數(shù)調(diào)用標(biāo)識為VM_CALL。
10.如權(quán)利要求2所述的方法,其特征在于,所述函數(shù)返回標(biāo)識為VM_RET。
11.如權(quán)利要求2所述的方法,其特征在于,所述循環(huán)標(biāo)識為VM_LOOP;所述循環(huán)次數(shù)信息的結(jié)構(gòu)為4個字節(jié)的循環(huán)次數(shù)。
全文摘要
本發(fā)明公開了一種基于虛擬機(jī)的信息記錄方法,該方法包括虛擬機(jī)運(yùn)行選定程序時,根據(jù)所述選定程序中的跳轉(zhuǎn)指令分割所述選定程序,得到若干代碼塊;以及在執(zhí)行代碼塊的過程中,所述虛擬機(jī)監(jiān)控事件發(fā)生,并按照事件發(fā)生的先后順序記錄事件標(biāo)識和事件信息,所述事件信息包括創(chuàng)建的線程或進(jìn)程信息、加載的模塊信息、進(jìn)程分配的堆信息、進(jìn)程創(chuàng)建的棧信息、數(shù)據(jù)改寫信息、代碼塊信息、循環(huán)次數(shù)信息、新棧頂?shù)奈恢眯畔?、函?shù)調(diào)用信息、函數(shù)返回信息、以及中央處理器CPU異常信息中之一或組合。該方案中記錄信息的方式大大提高了記錄效率,并且記錄文件非常小,節(jié)省了存儲空間;能夠?yàn)楹罄m(xù)信息分析提供更好的幫助。
文檔編號G06F9/455GK102999374SQ20121053048
公開日2013年3月27日 申請日期2012年12月10日 優(yōu)先權(quán)日2012年12月10日
發(fā)明者陳錦, 劉業(yè)欣 申請人:北京神州綠盟信息安全科技股份有限公司, 北京神州綠盟科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1