專利名稱:基于代碼切片的虛擬執行系統與方法
技術領域:
本發明涉及二進制程序虛擬執行系統與方法,特別是指令級虛擬執行環境。本發明用于 對未知二進制程序的動態細粒度自動化分析。
技術背景細粒度二進制程序的動態分析是一項挑戰性的任務,它將提供對構建未知軟件的核心結 構、功能藍圖需要的關鍵信息。當前有關未知二進制程序分析的研究大致可分為靜態分析和 動態分析兩種方法。靜態方法允許詳細的細粒度分析,因為它們不會受到特定運行環境的限制。這種方法可 以允許不運行二進制程序來分析其內部結構和功能,可以確保該程序的二進制代碼永遠不會 被執行,減少了運行時的負擔。靜態分析除了這些強大的特性外,還有一些局限。采用靜態 分析時將面臨的一個問題是,被分析的二進制代碼不是實際運行的代碼,在分析和執行之間 存在很多差異。特別是在某些具有自變異功能的程序,以及可動態生成代碼程序的情況下, 這類問題是十分常見的。另外,由于如間接分支等不可判定性因素,采用靜態分析來確定狀 態是不可能的。更進一步的說,靜態代碼分析在有關迷惑代碼的分析中存在較大的局限性,代碼迷i^術主要是被軟件開發人員用來保護它們自身的程序被分析和檢測。動態分析方法通過運行時分析代碼克服了以上的部分局限,確保了被分析的代碼就是運 行時的真實代碼。雖然有部分關于動態粗粒度二進制代碼分析的方法,但是有關細粒度運行 時分析的研究還很少。當前動態細粒度二進制軟件的分析可以通過調試器來完成。使用調試 器的基本方法就是在標識區域中設置斷點, 一次一條指令的方式追蹤需要査看的代碼流,收 集進一步的信息。然而,這些工具都是需要人工的大量參與,自動化程度非常的低。另外, 可以使用一些自動化的細粒度分析工具架構來自動追蹤代碼流。但是,它們往往都是基于指 令的完全模擬實現的,運行效率非常低。并且,對具有自變異/自校驗的代碼能力非常有限。 因此,當前迫切需要一種新的自動化且髙效的二進制程序指令級虛擬執行環境。同時, 支持對多線程環境的自變異/自校驗代碼的分析,以及支持對采用迷惑技術的變形代碼的有效 分析,并且虛擬執行系統還應該具有很髙的性能。 發明內容有鑒于此,本發明的目的是提供在通用操作系統中對軟件進行動態細粒度分析的系統。 目標是提供一個的髙效、輕便、易用的構架系統,它支持用戶或內核模式下的多線程、自變 異/自校驗代碼和迷惑代碼,同時允許選擇性隔離代碼執行。該架構通過使用精巧的技術,如
基本塊結合以及標準代碼忽略技術來保證執行環境的高效性。通過少量的依賴性檢查,以及 使用內部功能需要的反匯編部件將保證輕松地運行于Windows和UNIX操作系統。這樣使得該架 構能夠輕易地移植到其他操作系統或體系結構平臺上。它提供的API很簡單而強大,使得該構 架十分易用。為了達到上述目的,本發明提供了一種基于代碼切片的虛擬執行系統和方法,其特征在于該引擎包括了下述組成部件動態監控部件動態監控部件的結構組成包括觸發點與釋放點設置模塊,頁錯誤處理 模塊。虛擬執行系統的動態監控部件接受用戶的輸入,以此設置虛擬執行的目標代碼流范圍, 由觸發點定義起始位置,釋放點定義結束位置。觸發點激活后,頁錯誤處理模塊獲取控制權, 通知代碼切片虛擬執行部件,動態監控部件將該段二進制代碼流的執行控制權限轉移給虛擬 執行系統。到達釋放點位置后,虛擬執行系統將控制權返回給原二進制程序,按正常執行模 式繼續運行。反匯編部件虛擬執行系統獲取目標二進制程序的代碼流,由反匯編部件生成對應的匯 編代碼,逐條分析得到的匯編指令。代碼切片虛擬執行部件將目標代碼流分解成多個指令集, 以模擬代碼流正常執行的方式執行基本塊中的每條指令,該過程實現周部代碼執行,而指令 集則組成了虛擬執行的基本塊。每個基本塊是沒有包含分支語句的指令序列,在滿足以下條 件時結束代碼流切片無條件控制轉移指令;條件控制轉移指令;指定數量的非控制轉移指 令。反匯編部件用于動態構建與目標代碼流相一致的虛擬執行基本塊。代碼切片虛擬執行部件代碼切片虛擬執行部件的結構組成包括基本塊生成模塊,基 本塊緩存模塊,基本塊預處理模塊和虛擬執行模塊。基本塊生成模塊調用反匯編部件,對獲 取的二進制代碼流進行分析,生成不包含控制轉移指令的基本塊。這就使得目標代碼流的所 有執行都能夠保持在虛擬執行系統的控制范圍內。為提髙運行效率進行相應的執行預處理, 生成的基本塊經過執行預處理后存放在基本塊緩存內。只有存在于基本塊譯存內的代碼指令 才能執行,原始的目標代碼流不能直接執行。基本塊預處理模塊為了提升系統的運行性能, 采用了基本塊結合技術和標準代碼忽略技術,以此減小運行時的延遲。為了達到上述目的,本發明還提供了一種基于代碼切片的虛擬執行方法,其特征在于 該方法包括了下述操作步驟步驟(l),以調試方式啟動二進制程序;歩驟(2),動態監控部件設置虛擬執行觸發點和釋放點步驟(3),觸發點激活,控制權由動態監控部件轉移給代碼切片虛擬執行部件; 歩驟(4),獲取目標二進制程序的代碼流,由反匯編部件分析指令后,創建基本塊;
步驟(5),將生成的基本塊放入基本塊緩存,執行基本塊預處理; 步驟(6),虛擬執行每個基本塊的指令;步驟(7),到達釋放點后,返回到動態監控部件,恢復二進制程序的正常執行。總之,本發明系統與方法的優點簡述如下自動化且高效的二進制程序指令級虛擬執行環境。支持對多線程環境的自變異/自校驗代碼,以及采用迷惑技術的變形代碼的有效分析。該虛擬執行系統具有很高的性能,允許選擇性隔離代碼執行。
圖I是本發明用于基于代碼切片的虛擬執行方法的流程圖。 圖2是本發明用于基于代碼切片的虛擬執行系統的總體結構框圖。
具體實施方式
為使本發明的目的、技術方案和優點更加清楚,下面結合附圖對本發明作進一步的詳細 描述。參見圖1,初始化虛擬執行系統,這包括對代碼切片虛擬執行部件、反匯編部件和動態 監控部件的安裝和配置。以調試方式啟動被監視程序,該二進制程序可能包含有用戶態代碼, 以及內核態代碼。通過動態監控部件接受用戶的輸入,包括觸發點位置,釋放點位置,基本 塊指令數限制,基本塊結合要求等。將觸發點和釋放點地址對應的內存頁面屬性設置為不存 在。當二進制程序訪問到觸發點時,錯誤異常發生,由動態監控部件的頁錯誤處理模塊獲取 控制權。然后,動態監控部件將控制權轉移給代碼切片虛擬執行部件。代碼切片虛擬執行部 件在獲取目標程序代碼流后,由反匯編部件分析二進制代碼得到對應的每條指令,根據基本 塊生成的長度原則創建基本塊。所有的基本塊內部均不包含有分支語句,保證每個基本塊的 指令代碼未發生控制轉移。代碼切片虛擬執行部件將生成的基本塊放入基本塊緩存,執行基本塊預處理。基本塊的 預處理主要包括基本塊結合與標準代碼忽略兩部分,然后虛擬執行基本塊中的每條指令。執 行完基本塊的每個指令后,控制權返回到代碼切片虛擬執行部件,重新生成新的基本塊。目標代碼流到達釋放點后,控制權返回到動態監控部件,最終恢復二進制程序的正常執行。圖2為基于代碼切片的虛擬執行系統的總體結構框圖。下面將結合附圖2,具體介紹本 發明系統的各個組成部件 反匯編部寸牛反匯編部件分析虛擬執行系統獲取目標二進制程序的代碼流,生成對應的每一條匯編指
令,逐條分析得到的匯編指令。當遇到控制轉移指令,或基本塊的累計指令數目超出用戶定 義的范圍時,設置為該基本塊的結束。反匯編部件用于動態構建與目標代碼流相一致的虛擬 執行基本塊。代碼切片虛擬執行部件將目標代碼流分解成多個指令集,以模擬代碼流正常執行的方式 執行基本塊中的指令。這個過程稱之為局部執行,而指令集被稱為基本塊。 一個基本塊是沒 有包含分支的指令序列,在滿足以下條件發生時結束代碼流切片(1) 無條件控制轉移指令;(2) 條件控制轉移指令;(3) 規定數量的非控制轉移指令。 基本塊生成模塊代碼切片虛擬執行部件在目標代碼流上采用特殊體系的反匯編部件,每次分析一條指令, 并創建相應的基本塊。每個基本塊以系統指定的特殊指令集結束,稱為基本塊結束標志,然后由它將控制權轉 移到代碼切片虛擬執行部件。基本塊結束標志確保被分析的目標代碼流始終處于虛擬執行系 統的控制之下。當一個基本塊執行時,通過基本塊的結束標志在其執行完時獲得控制權,決 定創建新基本塊的目標內存起始地址,動態創建一個相應的新基本塊,并重新執行新建的基 本塊。在沒有虛擬執行系統的控制下,目標代碼流的執行將按照其原始正常的執行方式運行。基本塊生成模塊針對控制流轉換指令采取了特殊處理,以支持自變異/自校驗代碼和其它 任何形式的迷惑代碼。它不必重編譯目標代碼指令流就能很好的工作,完全支持在用戶和內 核模式下的多線程監控,允許根據需要調節細粒度分析級別。基本塊結束標志是虛擬執行系統終止每個基本塊的特殊代碼結構,它可被抽象成僅有一 個參數的函數。該參數是指向基本塊結束標志的索引,它允許虛擬執行系統獲取監控代碼流 的運行時信息,包含創建新塊需要的目標代碼地址。 一個基本塊結束標志替換終止基本塊控 制流的條件或非條件轉換指令。在某些情況下,由于達到預定的非控制流轉換指令數,終止 創建基本塊。自變異/自校驗代碼與迷惑代碼代碼切片虛擬執行系統針對每個條件或非條件控制轉移指令,采用基本塊結束標志模型 使得該系統能夠支持任何形式的迷惑代碼,因為迷惑代碼依賴指令間的條件或非條件分支來 完成它們的功能。每個由代碼切片虛擬執行系統產生的基本塊都在一個確定的控制轉移指令 處終止,并且代碼切片虛擬執行系統可以處理直接和間接的控制轉移,這就保證了創建下一 個基本塊的目標內存地址已經指向了利用反匯編部件得到基本塊創建的有效地址。
代碼切片虛擬執行系統通過特殊方式來處理采用隱式棧的控制轉移指令。例如,在IA-32 及其兼容處理器上,CALL指令無條件地將控制權轉交給一個子程序。該指令將返回地址壓棧, 然后通過一個相應的RET指令彈出恢復調用時的執行。這個特性被絕大多數自變異/自校驗代 碼所采用,它們不使用RET指令,而是將值直接彈出到一個寄存器中,通過它來訪問自己的代 碼。代碼切片虛擬執行系統確保目標代碼流的程序計數器始終在對應指令的基本塊結束標志 中得到反映,以此支持自變異/自校驗代碼。 基本塊預處理模塊一個基本塊中可能包含了一條指令,它將控制轉移到一個標準執行語義處的代碼流,如 系統調用、標準庫函數。局部執行這類標準代碼流將導致更多的運行延遲,并且在絕大多數 環境下運行效率是不允許的。代碼切片虛擬執行系統能夠動態識別這類標準代碼流,并將它們從代碼切片處理中排除 掉,因此將免去因執行一個操作系統調用或標準函數代碼而帶來的延遲。該技術稱之為標準 代碼忽略。標準代碼忽略技術同樣能夠用來排除那些在代碼切片過程中,已經被分析過的代 碼流部分,以此提高運行效率。代碼切片虛擬執行系統基本塊的執行涉及到進入/離開虛擬執行系統的控制權轉移。這些 轉移將導致因系統對處理器寄存器狀態的保存和恢復帶來的延遲。這種情況在代碼流循環執 行過程中特別明顯,因為每次循環都將調用代碼切片虛擬執行部件。系統基本塊組合技術可 以減少因代碼切片引起的延遲。該技術將一組基本塊組合成一個基本塊,避免對代碼切片虛 擬執行部件的多次控制轉移。基本塊組合技術是一個強大的處理機制,它將產生類似于原始代碼流的基本塊,同時可 以確保代碼切片虛擬執行系統對執行代碼流的完全控制,并達到最小的運行延遲。通過用戶 定義的回調函數實現基本塊組合技術,該函數選擇需要的基本塊進行基本塊組合。 虛擬執行模塊局部執行開始于一個用戶定義的目標代碼流起始點,在此稱之為觸發點。觸發點是一個 需要進行細粒度分析的內存地址,通常為操作系統調用或庫函數地址。代碼切片虛擬執行系 統中的觸發點通過動態監控部件來定義。只要執行到一個觸發點,就將調用代碼切片虛擬執 行部件進行細粒度分析,直到遇到一個釋放點。釋放點是在目標代碼流中,代碼切片虛擬執 行部件放棄監控并讓其代碼流返回到正常執行的內存地址。觸發點和對應的釋放點確定了在代碼切片虛擬執行系統下對目標代碼流細粒度分析的范圍,同時也讓其它的代碼流正常執行, 稱之為選擇性隔離執行。在代碼切片虛擬執行系統下,可以對目標代碼流指定多個重疊或非 重疊的觸發點和釋放點。構架系統支持觸發點和釋放點的嵌套,允許釋放點為無限數量。在
這種情況下,包含目標代碼流的整個線程都在代碼切片虛擬執行系統的監控下運行,直到線 程終止或者監控系統停止局部執行。代碼切片虛擬執行部件在忽略目標代碼流執行優先級的情況下,以無優先權模式運行單 獨的基本塊。這將確保代碼切片虛擬執行系統對執行的指令有完全的控制權。虛擬執行系統 可以監視任何對指定內存區域的訪問操作系統內核、資源和動態鏈接庫等。代碼切片虛擬 執行系統采用虛擬內存機制,并結合內存頁屬性處理技術來監控內存訪問。在代碼切片虛擬執行部件中不使用任何特定的操作系統函數。虛擬執行系統使用的反匯 編部件是完全重用的。構架系統為每個線程維持了一個針對基本塊結束標志的參數信息塊, 它不會破壞執行堆棧,這些特性使得虛擬執行系統支持多線程環境。無論基本塊結束標志是 否存在,執行線程的寄存器看起來都是沒有差異的。基本塊結束標志支持進程或操作系統內 核的自動線程監視,這是一個自動將目標進程中代碼流切片的特性。因此,通過將指定進程 創建API作為初始觸發點,允許虛擬執行系統在每個父進程下的新線程或新進程處,自動插入 觸發點,整個進程環境都能在基本塊結束標志的控制下運行。
權利要求
1、基于代碼切片的虛擬執行系統,其特征在于包括如下組成部件動態監控部件虛擬執行系統的動態監控部件接受用戶的輸入,以此設置虛擬執行的目標代碼流范圍,由觸發點定義起始位置,釋放點定義結束位置。觸發點激活后,動態監控部件將該段二進制代碼流的執行控制權限轉移給虛擬執行系統。到達釋放點位置后,虛擬執行系統將控制權返回給原二進制程序,按正常執行模式繼續運行。反匯編部件虛擬執行系統獲取目標二進制程序的代碼流,由反匯編部件生成對應的匯編代碼,逐條分析得到的匯編指令。當遇到控制轉移指令,或基本塊的累計指令數目超出用戶定義的范圍時,設置為該基本塊的結束。反匯編部件用于動態構建與目標代碼流相一致的虛擬執行基本塊。代碼切片虛擬執行部件虛擬執行系統針對反匯編部件生成的不包含控制轉移指令的基本塊,將基本塊存放于內部的執行緩存內,為提高運行效率進行相應的執行預處理,最終虛擬執行基本塊中的每條指令。
2、 根據權利要求l所述的基于代碼切片的虛擬執行系統,其特征在于動態監控部件的 結構組成包括觸發點、釋放點設置模塊,頁錯誤處理模塊。觸發點激活后,頁錯誤處理模 塊獲取控制權,通知代碼切片虛擬執行部件,并將目標代碼流的觸發點位置發送給代碼切片 虛擬執行部件。到達釋放點位置處,動態監控部件將控制權返回給原始二進制程序,繼續按 正常模式執行。
3、 根據權利要求l所述的基于代碼切片的虛擬執行系統,其特征在于代碼切片虛擬執 行部件的結構組成包括基本塊生成模塊,基本塊緩存模塊,基本塊預處理模塊和虛擬執行 模塊。基本塊生成模塊調用反匯編部件,對獲取的二進制代碼流進行分析,生成不包含控制 轉移指令的基本塊。這就使得目標代碼流的所有執行都能夠保持在虛擬執行系統的控制范圍 內。生成的基本塊存放在基本塊緩存內后,經過執行預處理提高運行效率。只有存在于基本 塊緩存內的代碼指令才能執行,原始的目標代碼流不能直接執行。基本塊預處理模塊為了提 升系統的運行性能,采用了基本塊結合技術和標準代碼忽略技術,以此減小運行時的延遲。
4、 根據權利要求1所述的基于代碼切片的虛擬執行方法,其特征在于 步驟(l),以調試方式啟動二進制程序;步驟(2),動態監控部件設置虛擬執行觸發點和釋放點步驟(3),觸發點激活,控制權由動態監控部件轉移給代碼切片虛擬執行部件; 步驟(4),獲取目標二進制程序的代碼流,由反匯編部件分析指令后,創建基本塊; 步驟(5),將生成的基本塊放入基本塊緩存,執行基本塊預處理; 步驟(6),虛擬執行基本塊中的每條指令; 步驟(7),到達釋放點后,返回到動態監控部件,恢復二進制程序的正常執行。
5、根據權利要求4所述的基于代碼切片的虛擬執行方法,其特征在于代碼切片虛擬執行部件將目標代碼流分解成多個指令集,以模擬代碼流正常執行的方式執行基本塊中的每條 指令,該過程實現代碼的局部執行,而指令集則組成了虛擬執行的基本塊。每個基本塊是沒有包含分支語句的指令序列,在滿足以下條件發生時結束代碼流切片無條件控制轉移指令; 條件控制轉移指令;規定數量的非控制轉移指令集。
全文摘要
本發明涉及計算機二進制程序指令的動態虛擬執行系統和方法。該系統由動態監控部件、反匯編部件和代碼切片虛擬執行部件組成。該方法是以調試方式啟動被監視程序,動態監控部件設置觸發點和釋放點。觸發點激活,控制權由動態監控部件轉移給代碼切片虛擬執行部件,在獲取目標程序代碼流后,由反匯編部件分析指令,創建基本塊。將生成的基本塊放入緩存,執行預處理后,虛擬執行基本塊的每條指令。到達釋放點后,返回到動態監控部件,恢復二進制程序的正常執行。本發明適用于對運行時二進制程序的指令級細粒度分析,支持對目標代碼流的局部區域模擬,能有效處理多線程環境下的自變異/自校驗代碼,以及各種迷惑代碼,具有很高的運行效率。
文檔編號G06F21/22GK101162491SQ20071004975
公開日2008年4月16日 申請日期2007年8月14日 優先權日2007年8月14日
發明者躍 曹, 李毅超, 柴方明, 曉 梁, 舒柏程 申請人:電子科技大學