專利名稱:一種用于對文件進行脫殼的裝置和方法
技術領域:
本發(fā)明涉及計算機病毒殺毒,尤其涉及一種用于對文件進行脫殼 的裝置和方法。
背景技術:
計算機及網(wǎng)絡技術的迅猛發(fā)展極大地促進了信息交互。與此同 時,計算機病毒也伴隨技術的發(fā)展而不斷地演化更新,從初期的惡作 劇游戲發(fā)展到今日,計算機病毒已經(jīng)嚴重威脅到了人們對計算機的正 常使用。由此,如何防范病毒侵襲已然成為人們關注的一個焦點。
防范病毒侵襲的一個重要步驟是在病毒運行之前識別出帶有病 毒的文件,即查毒,從而采取相應的措施遏制其侵害計算機系統(tǒng)。目 前的殺毒軟件普遍使用的查毒方法為匹配特征串方法。也就是說,利 用從病毒樣本中提取出來的特征串(一段或多段特定的二進制碼流) 在被查文件中進行匹配搜索。這種方法能夠比較有效地識別出具有固 定特征串的病毒,但是病毒作者為了躲避殺毒軟件的查殺,除了自身 的在代碼上有所改進以外,更多的是利用對文件進行加殼處理。
加殼是利用特定壓縮算法或加密算法,對病毒代碼進行壓縮和加 密處理,改變病毒樣本在靜態(tài)狀態(tài)下的二進制代碼,從而躲避殺毒軟 件的靜態(tài)掃描,實現(xiàn)免殺。
通過對100多萬病毒文件的測試,結果表明,90%以上的病毒文 件被加殼處理過。在被加殼處理的病毒文件中,又有50%以上的病毒 文件是被多種加殼工具處理過的,這些經(jīng)過加殼處理過的病毒文件給 殺毒軟件靜態(tài)掃描病毒帶來了巨大的困難。
為了解決加殼處理給査毒帶來的困難,現(xiàn)在通常使用虛擬機來對 加殼的文件進行脫殼處理,然后再對脫殼的文件進行査毒。
然而,常規(guī)的虛擬機在對己加殼的病毒文件進行脫殼時經(jīng)常面臨以下兩大問題。
第一, 一些病毒文件通常由復雜而執(zhí)行費時的壓縮算法或加密算 法進行加殼處理,所以常規(guī)的虛擬機在對這樣的已加殼病毒文件進行 脫殼處理時,需要花費大量的時間來解壓縮或解密數(shù)據(jù),導致脫殼的
執(zhí)行時間較長,影響了整個査毒過程。以LZPack殼為例,由于其在 加殼時使用壓縮率比較大的LZMA算法來壓縮文件,所以當虛擬機 對加了LZPack殼的文件進行脫殼時,解壓縮300K數(shù)據(jù)(解壓縮以 后大概是1MB左右)大約需要12-15秒的時間,這將會大大影響整 個查毒過程。
第二, 一些比較復雜的殼在其脫殼程序中經(jīng)常插入一些諸如API 斷點檢測、調(diào)試器檢測和單步異常檢測這樣的檢測調(diào)試器的代碼。由 于虛擬機本質上就是一個調(diào)試器,而虛擬機對加殼文件進行脫殼的過 程實質上就是調(diào)試過程,所以當這樣脫殼程序在執(zhí)行過程中檢測到是 在虛擬機中脫殼時,其就會退出脫殼過程,這就增加了虛擬機脫殼的 難度。
發(fā)明內(nèi)容
考慮到上述問題,本發(fā)明的一個目的在于提供一種用于對文件進 行脫殼的裝置和方法,其能夠對文件進行快速脫殼。
本發(fā)明的另一目的在于提供一種用于對文件進行脫殼的裝置和 方法,其能夠在虛擬計算機中成功地對文件進行脫殼。
為了實現(xiàn)本發(fā)明的目的,按照本發(fā)明的一種用于對文件進行脫殼 的裝置,包括
虛擬機,用于模擬真實計算機;
控制器,用于檢測所述文件的殼類型;以及
脫殼模塊,用于基于所述檢測的殼類型,確定所述文件的脫殼程 序中需要在所述真實計算機中執(zhí)行的代碼,
其中,所述虛擬機執(zhí)行所述文件的脫殼程序中除了所述確定的代 碼之外的其余代碼,以及所述脫殼模塊在所述真實計算機中執(zhí)rf所述確定的代碼。
為了實現(xiàn)本發(fā)明的目的,按照本發(fā)明的一種用于對文件進行脫殼 的方法,包括
(A) 檢測所述文件的殼類型;
(B) 基于所述檢測的殼類型,確定所述文件的脫殼程序中需要 在真實計算機中執(zhí)行的代碼;以及
(c)在虛擬計算機中執(zhí)行所述文件的脫殼程序中除了所述確定
的代碼之外的其余代碼,而在所述真實計算機中執(zhí)行所述確定的代 碼。
圖1示出了本發(fā)明一個實施例的用于對文件進行脫殼的裝置的 架構示意圖。
圖2示出了本發(fā)明一個實施例的虛擬機的架構示意圖。 圖3示出了本發(fā)明第一實施例的用于對文件進行脫殼的方法的 流程示意圖。
圖4示出了本發(fā)明第二實施例的用于對文件進行脫殼的方法的 流程示意圖。
優(yōu)選實施方式
本發(fā)明的核心思想是首先檢測己被加殼的文件的殼類型,然后 根據(jù)所檢測的殼類型,確定用于對該文件進行脫殼的脫殼程序中需要 在真實計算機中執(zhí)行的代碼(例如,利用執(zhí)行費時的壓縮算法或加密 算法來解壓縮或解密數(shù)據(jù)的代碼)、以及需要虛擬機跳過不執(zhí)行的或 者虛擬機執(zhí)行但修改執(zhí)行結果以表示該脫殼程序在真實計算機上執(zhí) 行的特定代碼(例如,檢測調(diào)試器的代碼不支持的特性和功能等), 最后,在真實計算機中執(zhí)行該確定的需要在真實計算機中執(zhí)行的代碼 和在虛擬計算機上執(zhí)行該脫殼程序中除了該確定的需要在真實計算 機中執(zhí)行的代碼之外的其余代碼,以及,在虛擬機中跳過該脫殼輕序中需要虛擬機跳過不執(zhí)行的特定代碼或者在虛擬機中執(zhí)行該特定代 碼,然后修改該特定代碼的執(zhí)行結果以表示該脫殼程序在真實計算機 上執(zhí)行。
圖1示出了本發(fā)明一個實施例的用于對文件進行脫殼的裝置的
架構示意圖。如圖1所示,脫殼裝置1包括控制器10、虛擬機20和 脫殼模塊30,其中,控制器10檢測已被加殼的文件的殼類型,脫殼 模塊30根據(jù)控制器10檢測到的殼類型,確定該文件的脫殼程序中需 要在真實計算機中執(zhí)行的代碼、以及需要虛擬機跳過不執(zhí)行的或者虛 擬機執(zhí)行但修改執(zhí)行結果以表示該脫殼程序在真實計算機上執(zhí)行的 特定代碼,并且在真實計算機中執(zhí)行該確定的需要在真實計算機中執(zhí) 行的代碼,以及,虛擬機20是一個模擬真實計算機環(huán)境的虛擬計算 機,其執(zhí)行該脫殼程序中除了該確定的需要在真實計算機中執(zhí)行的代 碼之外的其余代碼,以及,跳過不需要執(zhí)行的特定代碼或者執(zhí)行該特 定代碼,然后修改該特定代碼的執(zhí)行結果以表示該脫殼程序在真實計 算機上執(zhí)行。
本發(fā)明的用于對文件進行脫殼的裝置通常用軟件來實現(xiàn),但是也 可以硬件或軟硬件結合的方式來實現(xiàn)。
圖2示出了本發(fā)明一個實施例的虛擬機的架構示意圖。如圖2所 示,虛擬機20包括虛擬CPU 201、虛擬機內(nèi)存管理模塊203、虛擬 機環(huán)境管理模塊205,其中,虛擬CPU201模擬實現(xiàn)真實計算機中的 CPU,虛擬機內(nèi)存管理模塊203管理虛擬機中的內(nèi)存,虛擬機環(huán)境管 理模塊205模擬真實計算機的環(huán)境。
圖3示出了本發(fā)明第一實施例的用于對文件進行脫殼的方法的 流程示意圖。其中,本實施例是以對加了LZPack殼的文件進行脫殼 為例來說明的。
如圖3所示,首先,控制器10向虛擬機20發(fā)送一個加載文件通 知,以通知虛擬機20加載一個待脫殼的文件(步驟SIO)。虛擬機20收到加載文件通知后,加載該文件(步驟S15)。然后,虛擬機20向 控制器IO發(fā)送表明文件加載成功的加載結果消息(步驟S20)。
接著,控制器10檢測該文件的殼類型(步驟S25)。在本實施例 中,該文件的殼類型為LZPack殼。
控制器10向脫殼模塊30發(fā)送一個殼類型通知,以告知脫殼模塊 30該文件的殼類型(步驟S30)。
脫殼模塊30收到該殼類型通知后,基于該殼類型通知所告知的 殼類型,知道該文件的脫殼程序包括有利用復雜的壓縮算法(即 LZMA算法)來解壓縮數(shù)據(jù)的代碼,因此將這樣的代碼確定為需要在 真實計算機中執(zhí)行的代碼(步驟S35)。
然后,脫殼模塊30向控制器10發(fā)送一個斷點設置通知,以通知 控制器10在該文件的脫殼程序中利用LZMA算法來解壓縮數(shù)據(jù)的代 碼處設置斷點(步驟S40)。
控制器10從脫殼模塊30中收到的該斷點設置通知后,在虛擬機 中設置該斷點,并向虛擬機20發(fā)送一個運行指令,以通知虛擬機20 執(zhí)行到該文件的脫殼程序中利用LZMA算法來解壓縮數(shù)據(jù)的代碼處 就停止(步驟S45)。
虛擬機20收到控制器10發(fā)送的運行指令后,執(zhí)行該文件的脫殼 程序直到該運行指令所指定的代碼處(步驟S50)。
然后,虛擬機20將其當前狀態(tài)信息發(fā)送給控制器IO(步驟S55), 其中,該當前狀態(tài)信息主要包括虛擬機30中的虛擬CPU的寄存器信 息。控制器10將收到的虛擬機20的狀態(tài)信息轉發(fā)給脫殼模塊30 (步 驟S60)。
脫殼模塊30收到控制器10轉發(fā)的虛擬機20的狀態(tài)信息后,根 據(jù)該虛擬機20的狀態(tài)信息所包括的寄存器信息,確定脫殼程序中利 用LZMA算法來解壓縮數(shù)據(jù)的代碼將要處理的數(shù)據(jù)在虛擬機30的虛 擬內(nèi)存中的存儲位置(步驟S65)。
接著,脫殼模塊30向控制器10發(fā)送一個讀虛擬機內(nèi)存通知,以 通知虛擬機20從其內(nèi)存中讀取該將要處理的數(shù)據(jù)(步驟S70)??刂?器10將從脫殼模塊30中收到的讀虛擬機內(nèi)存通知轉發(fā)給虛擬機20(步驟S75)。
虛擬機20收到控制器IO轉發(fā)的讀虛擬機內(nèi)存通知后,通過其虛 擬機內(nèi)存管理模塊203從其內(nèi)存中所確定的存儲位置處讀出該將要 處理的數(shù)據(jù)(步驟S80),然后將該讀出的將要處理的數(shù)據(jù)發(fā)送給控 制器IO (步驟S85)??刂破?0將從虛擬機20中收到的該將要處理 的數(shù)據(jù)轉發(fā)給脫殼模塊30 (步驟S90)。
脫殼模塊30收到控制器10轉發(fā)的該將要處理的數(shù)據(jù)后,在真實 計算機上執(zhí)行脫殼程序中利用LZMA算法來解壓縮數(shù)據(jù)的代碼,以 對該收到的數(shù)據(jù)進行解壓縮,得到已解壓縮的數(shù)據(jù)(步驟S95)。
在得到解壓縮的數(shù)據(jù)后,脫殼模塊30基于在步驟S65中收到的 虛擬機20狀態(tài)信息所包括的寄存器信息,確定該解壓縮的數(shù)據(jù)在虛 擬機20的內(nèi)存中的存儲位置(步驟SIOO)。
然后,脫殼模塊30向控制器10發(fā)送一個包括已解壓縮的數(shù)據(jù)的 寫虛擬機內(nèi)存通知,以告知虛擬機20將該已解壓縮的數(shù)據(jù)寫入其內(nèi) 存中(步驟S105)??刂破?0將從脫殼模塊30中收到的寫虛擬機內(nèi) 存通知轉發(fā)給虛擬機20 (步驟SllO)。
虛擬機20收到控制器10轉發(fā)的寫虛擬機內(nèi)存通知后,將該寫虛 擬機內(nèi)存通知中所包括的已解壓縮的數(shù)據(jù)通過其虛擬機內(nèi)存管理模 塊203寫入到其內(nèi)存中所確定的存儲位置處(步驟S115),然后向控 制器10發(fā)送一個表明寫虛擬機內(nèi)存成功的寫虛擬機內(nèi)存結果消息 (步驟S120)??刂破?0將從虛擬機20中收到的寫虛擬機內(nèi)存結果 消息轉發(fā)給脫殼模塊30 (步驟S125)。
脫殼模塊30收到控制器10轉發(fā)的寫虛擬機內(nèi)存結果消息后,確 定出該文件的原始入口 (步驟S155),然后向控制器10發(fā)送一個斷 點設置通知,以通知控制器IO在該文件的原始入口處設置斷點(步 驟S160)。控制器10從脫殼模塊30中收到斷點設置通知后,在虛擬 機中設置該斷點,并向虛擬機20發(fā)送一個運行指令,以通知虛擬機 20執(zhí)行到該文件的原始入口處就停止(步驟S165 )。
虛擬機20收到控制器10發(fā)送的運行指令后,執(zhí)行脫殼程序直到 該運行指令所指定代碼處(步驟S175)。 '然后,虛擬機20向控制器10發(fā)送其當前狀態(tài)信息(步驟S180), 其中,該當前狀態(tài)信息主要包括虛擬機30中的虛擬CPU的寄存器信 息,控制器10將從虛擬機20中收到的虛擬機20的狀態(tài)信息轉發(fā)給 脫殼模塊30 (步驟S185)。
脫殼模塊30收到控制器10轉發(fā)的虛擬機20的狀態(tài)信息后,知 道脫殼程序己經(jīng)執(zhí)行所設定的斷點,因此向控制器10發(fā)送脫殼完成 通知(步驟S190),同時,虛擬機20也向控制器10發(fā)送脫殼完成通 知(步驟S195)。
雖然在第一實施例中,以其脫殼程序中包含有利用LZMA算法 來解壓縮數(shù)據(jù)的代碼的LZPack殼為例來說明本發(fā)明,然而本發(fā)明并 不局限于此。事實上,本發(fā)明可以應用于其脫殼程序中包含有實現(xiàn)執(zhí) 行費時的功能的代碼的任何殼,該執(zhí)行費時的功能例如是利用復雜的 壓縮算法或加密算法來解壓縮或解密數(shù)據(jù)。
此外,雖然在第一實施例中,由脫殼模塊來控制虛擬機的執(zhí)行過 程,然而,本發(fā)明并不局限于此。事實上,在本發(fā)明中,也可以由脫 殼模塊告知虛擬機確定的需要在真實計算機上執(zhí)行的代碼,然后虛擬 機自己監(jiān)控脫殼程序的執(zhí)行;當監(jiān)控發(fā)現(xiàn)執(zhí)行到該確定的代碼時,虛 擬機根據(jù)其CPU的寄存器信息主動將存儲在內(nèi)存中的該確定的代碼 將要處理的數(shù)據(jù)發(fā)送給脫殼模塊;當脫殼模塊在真實計算機上執(zhí)行該 確定的代碼對該數(shù)據(jù)進行處理得到結果數(shù)據(jù)并返回給虛擬機后,虛擬 機根據(jù)其CPU的寄存器信息確定該結果數(shù)據(jù)的存儲位置并存儲該結 果數(shù)據(jù),然后虛擬機繼續(xù)執(zhí)行該脫殼程序中在該確定的代碼之后的代 碼。
圖4示出了本發(fā)明第二實施例的用于對文件進行脫殼的方法的 流程示意圖。其中,本實施例是以對加了 TeLock殼的文件進行脫殼 為例來說明的。 ,
如圖4所示,首先,控制器10向虛擬機20發(fā)送一個加載文{|通知,以通知虛擬機20加載一個待脫殼的文件(步驟S210)。虛擬機 20收到加載文件通知后,加載該文件(步驟S215)。然后,虛擬機 20向控制器10發(fā)送表明文件加載成功的加載結果消息(步驟S220)。
接著,控制器10檢測該文件的殼類型(步驟S225)。在本實施 例中,該文件的殼類型為TeLock殼。
控制器10向脫殼模塊30發(fā)送一個殼類型通知,以告知脫殼模塊 30該文件的殼類型(步驟S230)。
脫殼模塊30收到該殼類型通知后,基于該殼類型通知所告知的 殼類型,確定該文件的脫殼程序中存在有API斷點檢測、調(diào)試器檢測 和/或單步異常檢測的代碼(步驟S235)。
然后,脫殼模塊30向控制器10發(fā)送一個斷點設置通知,以通知 控制器10在該文件的脫殼程序中API斷點檢測、調(diào)試器檢測和單步 異常檢測的代碼處設置斷點(步驟S240)。
控制器10從脫殼模塊30中收到該斷點設置通知后,在虛擬機中 設置斷點,并向虛擬機20發(fā)送一個運行指令,以通知虛擬機20執(zhí)行 到該文件的脫殼程序中API斷點檢測、調(diào)試器檢測和單步異常檢測的 代碼處就停止(步驟S245)。
虛擬機20收到控制器10轉發(fā)的運行指令后,執(zhí)行該文件的脫殼 程序直到該運行指令所指定的代碼處(步驟S250)。
然后,虛擬機20將其當前狀態(tài)信息發(fā)送給控制器10(步驟S255 ), 其中,該當前狀態(tài)信息主要包括虛擬機30中的虛擬CPU的寄存器信 息??刂破?0將收到的虛擬機20的狀態(tài)信息轉發(fā)給脫殼模塊30 (步 驟S260)。
脫殼模塊30收到控制器10轉發(fā)的虛擬機20的狀態(tài)信息后,首 先基于該收到的虛擬機20狀態(tài)信息所包括的寄存器信息知道虛擬機 20已經(jīng)執(zhí)行所設置的斷點,因而,向控制器10發(fā)送一個特殊執(zhí)行命 令,以通知虛擬機20跳過接下來的API斷點檢測、調(diào)試器檢測和單 步異常檢測的代碼或者繼續(xù)執(zhí)行接下來的API斷點檢測、調(diào)試器檢測 和單步異常檢測的代碼但修改該代碼的執(zhí)行結果以表示此脫殼程序 在真實計算機中執(zhí)行(步驟S275)??刂破?0將從脫殼模塊30中收到的特殊執(zhí)行命令轉發(fā)給虛擬機 20 (步驟S280)。
虛擬機20收到控制器10轉發(fā)的特殊執(zhí)行命令后,根據(jù)該收到的 特殊執(zhí)行命令,跳過接下來的API斷點檢測、調(diào)試器檢測和單步異常 檢測的代碼或者繼續(xù)執(zhí)行接下來的API斷點檢測、調(diào)試器檢測和單步 異常檢測的代碼但修改該代碼的執(zhí)行結果以表示此脫殼程序在真實 計算機中執(zhí)行(步驟S285)。然后,虛擬機20向控制器10發(fā)送一個 執(zhí)行成功的執(zhí)行結果消息(步驟S290),控制器10將從虛擬機20中 收到的結果消息轉發(fā)給脫殼模塊30 (步驟S295)。
虛擬機20收到控制器10轉發(fā)的執(zhí)行結果消息后,確定出該文件 的原始入口 (步驟S300),然后向控制器10發(fā)送一個斷點設置通知, 以通知控制器10在該文件的原始入口處設置斷點(步驟S305)???制器10從脫殼模塊30中收到斷點設置通知后,在虛擬機中設置斷點, 并向虛擬機20發(fā)送一個運行指令,以通知虛擬機20執(zhí)行到該文件的 原始入口處就停止(步驟S310)。
虛擬機20收到控制器10發(fā)送的運行指令后,執(zhí)行脫殼程序直到 該運行指令所指定的代碼處(步驟S320)。
然后,虛擬機20向控制器10發(fā)送其當前狀態(tài)信息(步驟S330), 控制器10將從虛擬機20中收到的虛擬機20的狀態(tài)信息轉發(fā)給脫殼 模塊30 (步驟S335)。
脫殼模塊30收到控制器10轉發(fā)的虛擬機20的狀態(tài)信息后,知 道脫殼程序已經(jīng)執(zhí)行完畢,因此向控制器10發(fā)送脫殼完成通知(步 驟S340),同時,虛擬機20也向控制器10發(fā)送脫殼完成通知(步驟 S345)。
雖然在第二實施例中,以其脫殼程序中包含有API斷點檢測、調(diào) 試器檢測和單步異常檢測的代碼的TeLock殼為例來說明本發(fā)明,然 而本發(fā)明并不局限于此。事實上,本發(fā)明可以應用于其脫殼程序—中包 含有檢測調(diào)試器的任何代碼的殼。
此外,雖然在第二實施例中,由脫殼模塊來控制虛擬機的執(zhí)行過程,然而,本發(fā)明并不局限于此。事實上,在本發(fā)明中,也可以由脫 殼模塊告知虛擬機確定的需跳過而不執(zhí)行或需要修改其執(zhí)行結果的 代碼,然后虛擬機自己監(jiān)控脫殼程序的執(zhí)行;當監(jiān)控發(fā)現(xiàn)執(zhí)行到該確 定的代碼時,虛擬機跳過該確定的代碼并執(zhí)行該脫殼程序中在該確定 的代碼之后的代碼,或者執(zhí)行該確定的代碼得到執(zhí)行結果,接著按照 要求修改該執(zhí)行結果,然后虛擬機繼續(xù)執(zhí)行該脫殼程序中在該確定的 代碼之后的代碼。
此外,雖然在第一和第二實施例中,虛擬機20和脫殼模塊30通 過控制器10來交互信息和數(shù)據(jù),但是本發(fā)明并不局限于此。事實上, 在本發(fā)明的其他實施例中,虛擬機20和脫殼模塊30可以不通過控制 器10而直接交互信息和數(shù)據(jù)。
本領域技術人員應當理解,本發(fā)明所公開的用于對文件進行脫殼 的裝置和方法可以在不偏離本發(fā)明實質的情況下做出各種改變和變 形,因此,本發(fā)明的保護范圍由所附的權利要求書來限定。
權利要求
1、一種用于對文件進行脫殼的裝置,包括虛擬機,用于模擬真實計算機;控制器,用于檢測所述文件的殼類型;以及脫殼模塊,用于基于所述檢測的殼類型,確定所述文件的脫殼程序中需要在所述真實計算機中執(zhí)行的代碼,其中,所述虛擬機執(zhí)行所述文件的脫殼程序中除了所述確定的代碼之外的其余代碼,以及所述脫殼模塊在所述真實計算機中執(zhí)行所述確定的代碼。
2、如權利要求l所述的脫殼裝置,進一步包括所述虛擬機執(zhí)行所述脫殼程序到所述確定的代碼處即停止,然后 向所述脫殼模塊發(fā)送所述確定的代碼將要處理的數(shù)據(jù),所述脫殼模塊在真實計算機上執(zhí)行所述確定的代碼對所述數(shù)據(jù) 進行處理,以得到結果數(shù)據(jù)并發(fā)送給所述虛擬機,以及所述虛擬機將所述結果數(shù)據(jù)存儲在內(nèi)存中并執(zhí)行所述脫殼程序 中在所述確定的代碼之后的代碼。
3、如權利要求1或2所述的脫殼裝置,其中,所述確定的代碼 是實現(xiàn)執(zhí)行費時的功能的代碼。
4、 如權利要求l所述的脫殼裝置,其中,還包括-所述脫殼模塊基于所述檢測的殼類型,確定所述文件的脫殼程序中需跳過不執(zhí)行的代碼,以及當執(zhí)行所述脫殼程序到所述確定的代碼時,所述虛擬機跳過所述 確定的代碼以執(zhí)行所述脫殼程序中在所述確定的代碼之后的代碼。
5、 如權利要求1所述的脫殼裝置,其中,還包括 所述脫殼模塊基于所述檢測的殼類型,確定所述文件的脫殼程序中其執(zhí)行結果需要修改的代碼,以及當執(zhí)行所述脫殼程序到所述確定的代碼時,所述虛擬機執(zhí)行所述 確定的代碼得到執(zhí)行結果并修改所述執(zhí)行結果,然后執(zhí)行所述脫殼程 序中在所述確定的代碼之后的代碼。
6、 如權利要求4或5所述的脫殼裝置,其中,所述確定的代碼 是檢測調(diào)試器的代碼。
7、 一種用于對文件進行脫殼的方法,包括(A) 檢測所述文件的殼類型;(B) 基于所述檢測的殼類型,確定所述文件的脫殼程序中需要 在真實計算機中執(zhí)行的代碼;以及(C) 在虛擬計算機中執(zhí)行所述文件的脫殼程序中除了所述確定 的代碼之外的其余代碼,而在所述真實計算機中執(zhí)行所述確定的代 碼。
8、 如權利要求1所述的方法,其中,所述步驟(C)進一步包括在所述虛擬計算機中執(zhí)行所述脫殼程序到所述確定的代碼處即 停止;將所述確定的代碼將要處理的數(shù)據(jù)從所述虛擬計算機中發(fā)送給 所述真實計算機;在所述真實計算機中執(zhí)行所述確定的代碼對所述數(shù)據(jù)進行處理, 以得到結果數(shù)據(jù)并發(fā)送給所述虛擬計算機;在所述虛擬計算機的內(nèi)存中存儲所述結果數(shù)據(jù);以及在所述虛擬計算機中執(zhí)行所述脫殼程序中在所述確定的代碼之 后的代碼。
9、 如權利要求7或8所述的方法,其中,所述確定的代碼是實 現(xiàn)執(zhí)行費時的功能的代碼。
10、 如權利要求7所述的方法,其中,還包括步驟 基于所述檢測的殼類型,確定所述文件的脫殼程序中需跳過不執(zhí)行的代碼,以及當在所述虛擬計算機中執(zhí)行所述脫殼程序到所述確定的代碼時, 跳過所述確定的代碼以執(zhí)行所述脫殼程序中在所述確定的代碼之后 的代碼。
11、 如權利要求7所述的方法,其中,還包括步驟 基于所述檢測的殼類型,確定所述文件的脫殼程序中其執(zhí)行結果需要修改的代碼;當在所述虛擬計算機中執(zhí)行所述脫殼程序到所述確定的代碼時,執(zhí)行所述確定的代碼得到執(zhí)行結果; 修改所述執(zhí)行結果;以及執(zhí)行所述脫殼程序中在所述確定的代碼之后的代碼。
12、 如權利要求10或11所述的方法,其中,所述確定的代碼是 檢測調(diào)試器的代碼。
全文摘要
本發(fā)明涉及一種,用于對文件進行脫殼的裝置和方法,該裝置包括虛擬機,用于模擬真實計算機;控制器,用于檢測所述文件的殼類型;以及,脫殼模塊,用于基于所述檢測的殼類型,確定所述文件的脫殼程序中需要在所述真實計算機中執(zhí)行的代碼,其中,所述虛擬機執(zhí)行所述文件的脫殼程序中除了所述確定的代碼之外的其余代碼,以及所述脫殼模塊在所述真實計算機中執(zhí)行所述確定的代碼。利用該裝置和方法,能夠對文件進行快速脫殼。
文檔編號G06F21/00GK101414328SQ20071016243
公開日2009年4月22日 申請日期2007年10月15日 優(yōu)先權日2007年10月15日
發(fā)明者白子潘 申請人:北京瑞星國際軟件有限公司