一種基于函數(shù)特征的惡意程序檢測方法
【專利摘要】一種基于函數(shù)特征的惡意程序檢測方法,步驟如下:(1)惡意程序的功能函數(shù)選擇:通過對惡意程序樣本的選取,經(jīng)反匯編和人工分析,指定與惡意行為緊密關(guān)聯(lián)的函數(shù)為功能函數(shù);(2)函數(shù)特征的提?。簩εc惡意行為緊密關(guān)聯(lián)函數(shù)的函數(shù)體代碼進行處理,去除干擾指令,識別條件判斷語句、循環(huán)語句,轉(zhuǎn)換為其等價的表示形式,作為函數(shù)特征;(3)惡意程序特征庫的建立:利用惡意程序樣本庫,將提取到的各惡意程序樣本的功能函數(shù)的函數(shù)特征,建立一個作為惡意程序模型的惡意程序特征庫;(4)惡意程序檢測:依據(jù)惡意程序特征庫,對待測程序分析其所有函數(shù)的函數(shù)特征集合,判斷是否與惡意程序特征庫中特征模型相一致,以識別待測程序是否惡意程序。
【專利說明】一種基于函數(shù)特征的惡意程序檢測方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及惡意程序的識別和檢測,特別涉及一種基于函數(shù)語義特征的惡意程序檢測方法。
【背景技術(shù)】
[0002]目前惡意程序檢測大多采用了基于行為的檢測方法,利用API相關(guān)的數(shù)據(jù)流和控制流關(guān)系識別惡意行為。然而Windows的DLL加載機制使得動態(tài)庫可以被輕易替代。DLL文件的完整性驗證不夠充分和Hooking技術(shù)的出現(xiàn),更使得對DLL的篡改變得異常簡單。并且,當惡意程序運行于操作系統(tǒng)內(nèi)核中時,可以隨意篡改函數(shù)內(nèi)容,甚至是系統(tǒng)調(diào)用的實現(xiàn)。即使不改變調(diào)用規(guī)則,程序?qū)嶋H執(zhí)行的代碼已經(jīng)改變。因此,基于API的檢測機制不再有效,導(dǎo)致檢測結(jié)果錯誤,造成漏報。
【發(fā)明內(nèi)容】
[0003]本發(fā)明目的是:提出一種基于函數(shù)特征的惡意程序檢測方法,在函數(shù)二進制代碼的基礎(chǔ)上,抽取與功能相關(guān)的指令,構(gòu)建具有魯棒性的函數(shù)語義特征。由于函數(shù)特征從語義層面產(chǎn)生,具有一定的抽象性,抗混淆和穩(wěn)定性比較好。函數(shù)語義的提取來自于程序?qū)嶋H執(zhí)行的代碼,為字節(jié)粒度的特征表示,是較為可靠的程序特征。特征的提取與系統(tǒng)無關(guān),解脫了對應(yīng)用程序接口甚至是系統(tǒng)調(diào)用的依賴,不會受到篡改系統(tǒng)調(diào)用或API的干擾。因此,本方法有利于更為準確地檢測和識別惡意程序,減少檢測漏報,以提高系統(tǒng)安全性。
[0004]本發(fā)明提供一種基于函數(shù)特征的惡意程序檢測方法,其特征是步驟如下:
[0005](I)惡意程序的功能函數(shù)選擇:通過對惡意程序樣本的選取,經(jīng)反匯編和人工分析,指定與惡意行為緊密關(guān)聯(lián)的函數(shù)為功能函數(shù);
[0006](2)函數(shù)特征的提取:對與惡意行為緊密關(guān)聯(lián)函數(shù)的函數(shù)體代碼進行處理,去除干擾指令,識別條件判斷語句、循環(huán)語句,轉(zhuǎn)換為其等價的表示形式,作為函數(shù)特征;
[0007](3)惡意程序特征庫的建立:利用惡意程序樣本庫,將提取到的各惡意程序樣本的功能函數(shù)的函數(shù)特征,建立一個作為惡意程序模型的惡意程序特征庫;
[0008](4)惡意程序檢測:依據(jù)惡意程序特征庫,對待測程序分析其所有函數(shù)的函數(shù)特征集合,判斷是否與惡意程序特征庫中特征模型相一致,以識別待測程序是否惡意程序。
[0009]本發(fā)明的有益效果,通過提取惡意程序具有魯棒性的的函數(shù)特征,將惡意程序的功能具體化表示,進而建立惡意程序特征庫。對于待檢測程序,提取其函數(shù)特征,通過與惡意程序特征庫中惡意程序特征的比對,判斷是否為惡意程序。從而實現(xiàn)本發(fā)明所述目的。
【專利附圖】
【附圖說明】
[0010]圖1表示基于函數(shù)特征的惡意程序檢測系統(tǒng)結(jié)構(gòu)示意圖;
[0011]圖2表示惡意程序特征庫建立流程圖;
[0012]圖3惡意程序功能函數(shù)選擇流程圖;[0013]圖4表示函數(shù)的特征提取流程圖;
[0014]圖5表示函數(shù)代碼預(yù)處理流程圖;
[0015]圖6表示函數(shù)代碼去混淆處理流程圖;
[0016]圖7表示函數(shù)代碼條件語句處理流程圖;
[0017]圖8表示循環(huán)語句處理流程圖;
[0018]圖9表示提取嵌套調(diào)用的函數(shù)特征流程圖;
[0019]圖10表示惡意程序檢測過程流程圖。
【具體實施方式】
[0020]下面結(jié)合附圖對本發(fā)明進行詳細說明。
[0021]圖1所示為本方法實施的整體流程和工作原理。惡意程序樣本是已收集的用于訓練的惡意程序樣本集合,并經(jīng)過了規(guī)范命名和區(qū)分種類。待檢程序是待判定的未知應(yīng)用程序。從惡意程序樣本集中選取惡意程序樣本,通過人工選取功能函數(shù)、對功能函數(shù)提取函數(shù)特征,并加入特征庫。在訓練過程結(jié)束后,建立惡意程序特征庫。對于待檢程序,提取所有函數(shù)。這些函數(shù)經(jīng)過預(yù)處理、去混淆、條件語句和循環(huán)語句處理、嵌套調(diào)用處理后,獲取其函數(shù)特征集合。將各函數(shù)的函數(shù)特征與惡意程序特征庫比對,判定待檢程序是否是惡意程序。在本方法中,利用了反匯編軟件objdump和IDA (實現(xiàn)語言為IDC和IDA python)對惡意程序樣本的選取。惡意程序特征庫中的內(nèi)容是特征經(jīng)過SHA-1計算后的結(jié)果,即每個特征互不相同,都表示為40位長度的字符串。
[0022]圖2表示建立惡意程序特征庫過程的流程。具體流程如下。步驟20是開始狀態(tài)。步驟21從惡意程序樣本集合中取惡意程序樣本,步驟22判斷惡意程序樣本是否取到,若取到轉(zhuǎn)步驟23,否則轉(zhuǎn)步驟26。步驟23選擇惡意程序的功能函數(shù),具體處理流程如圖3所示。通過人工選取功能函數(shù)、對功能函數(shù)提取函數(shù)特征;步驟24判斷是否取到功能函數(shù),若取到,轉(zhuǎn)步驟25,否則返回步驟21。步驟25功能函數(shù)的函數(shù)特征提取,具體處理流程如圖4所示。步驟26將生成的函數(shù)特征計算SHA-1哈希值,存入惡意程序特征庫中。步驟27是結(jié)束狀態(tài)。
[0023]圖3表示獲取一個惡意程序樣本的功能函數(shù)流程。功能函數(shù)指對惡意行為起主要作用的函數(shù),由分析人員指定。從惡意程序樣本庫中取一個惡意程序樣本,經(jīng)過反匯編得到惡意程序樣本的匯編程序。為保證反匯編結(jié)果的質(zhì)量,選用2個反匯編工具分別處理,當結(jié)果一致時,該樣本為有效樣本。選取其中的功能函數(shù)提取程序特征,進入惡意程序特征庫。具體流程如下。步驟30是初始動作。步驟31使用objdump對取得的惡意程序樣本反匯編。執(zhí)行命令“ob jdump-M intel-d惡意程序樣本名>obj.0ut.txt”,所得反匯編結(jié)果保存obj.0ut.txt文件中。步驟32,打開IDA pro工具,將惡意程序樣本拖拽入工程區(qū),選取默認的二進制形式,等待IDA自動處理完成后,將顯示的反匯編保存到ida.0ut.txt中。步驟33,以兩個工具生成的代碼體為字符串,比較這兩個字符串是否相同,是則轉(zhuǎn)步驟35,否則轉(zhuǎn)步驟34。步驟34設(shè)置返回值為Nofunc (取值為0,表示沒取到功能函數(shù)),轉(zhuǎn)步驟37。步驟35,指定選好的功能函數(shù)的函數(shù)體代碼。步驟36,設(shè)置返回值為Okfunc (取值為1,表示取到功能函數(shù))。步驟37是結(jié)束狀態(tài)。
[0024]圖4為函數(shù)特征提取過程的流程圖。對于需提取特征的函數(shù),經(jīng)過預(yù)處理、去混淆、條件語句和循環(huán)語句處理、嵌套調(diào)用的函數(shù)處理等,獲取函數(shù)特征。具體流程如下。步驟40開始動作。步驟41對待提取特征的函數(shù)進行預(yù)處理,生成預(yù)處理后的函數(shù)代碼。具體處理流程如圖5所示。步驟42對預(yù)處理后的函數(shù)代碼去混淆處理,生成去混淆的精簡代碼。具體處理流程如圖6所示。步驟43對去混淆的精簡處理條件語句,生成去條件語句的精簡代碼。具體處理流程如圖7所示。步驟44對去條件語句的函數(shù)代碼處理其中的循環(huán)語句,生成去循環(huán)語句的精簡代碼。具體處理流程如圖8所示。步驟45處理函數(shù)之間的調(diào)用,具體處理流程如圖9所示。步驟46為結(jié)束狀態(tài)。
[0025]圖5表示函數(shù)代碼預(yù)處理的流程。目的是對于所選取的函數(shù),進行初始化和去干擾。本過程中,有效指令指對函數(shù)特征有影響的指令集合,有效指令集合的取值為{“add”,“call”,“cmp”,“int”,“ jmp”,“l(fā)ea”,“mov”,“inc” }。具體流程如下。步驟 50 是初始動作。步驟51在功能函數(shù)的函數(shù)體中取一條指令。步驟52判斷是否取到指令,是則轉(zhuǎn)步驟53,否則轉(zhuǎn)步驟57。步驟53判斷取得的指令是否在有效指令集合中,是則轉(zhuǎn)步驟55,否則轉(zhuǎn)步驟54。步驟54是將該指令以NOP代替。步驟55對指令執(zhí)行去混淆操作,具體處理流程如圖6所示。步驟56執(zhí)行指令壓縮,去掉所有的NOP指令。步驟57為結(jié)束狀態(tài),執(zhí)行至此,初始化過程結(jié)束,生成精簡代碼。
[0026]圖6表示函數(shù)代碼去混淆處理(或指令執(zhí)行去混淆操作)的流程圖。目的在于處理樣本代碼中簡單的混淆技術(shù),將可能出現(xiàn)的等價指令經(jīng)過替換處理實現(xiàn)統(tǒng)一表示,從而消除混淆造成的代碼差異。替換處理基于替換表進行,處理兩類替換:I)指令若在去混淆替換表(表1所示)中,則按照去混淆替換表進行替換。2) xor指令后緊跟一條je指令,將兩條指令用“ JMP”符號替換。處理過程通過遍歷精簡代碼,按照規(guī)則執(zhí)行替換,生成去混淆的精簡代碼。具體流程如下。步驟60是初始動作。步驟61從精簡代碼中取一條指令代碼。步驟62判斷指令是 否取到,是則轉(zhuǎn)步驟63,否則轉(zhuǎn)步驟64。步驟63判斷取得的指令是否在替換表中,是則轉(zhuǎn)步驟65,否則轉(zhuǎn)步驟66。步驟65查替換表按替換值進行替換。步驟66判斷取到的指令是否xor,是則轉(zhuǎn)步驟67,否則轉(zhuǎn)步驟61。步驟67取得下一條精簡代碼。步驟68判斷取得的指令是否je。是則轉(zhuǎn)步驟69,否則轉(zhuǎn)步驟61。步驟69刪除上一條代碼。步驟6a將當前代碼用JMP符號代替。步驟64是結(jié)束狀態(tài),執(zhí)行至此,生成去混淆的精簡代碼。
[0027]
【權(quán)利要求】
1.一種基于函數(shù)特征的惡意程序檢測方法,其特征是步驟如下: (1)惡意程序的功能函數(shù)選擇:通過對惡意程序樣本的選取,經(jīng)反匯編和人工分析,指定與惡意行為緊密關(guān)聯(lián)的函數(shù)為功能函數(shù); (2)函數(shù)特征的提取:對與惡意行為緊密關(guān)聯(lián)函數(shù)的函數(shù)體代碼進行處理,去除干擾指令,識別條件判斷語句、循環(huán)語句,轉(zhuǎn)換為其等價的表示形式,作為函數(shù)特征; (3)惡意程序特征庫的建立:利用惡意程序樣本庫,將提取到的各惡意程序樣本的功能函數(shù)的函數(shù)特征,建立一個作為惡意程序模型的惡意程序特征庫; (4)惡意程序檢測:依據(jù)惡意程序特征庫,對待測程序分析其所有函數(shù)的函數(shù)特征集合,判斷是否與惡意程序特征庫中特征模型相一致,以識別待測程序是否惡意程序。
2.根據(jù)權(quán)利要求1所述的基于函數(shù)特征的惡意程序檢測方法,其特征是惡意程序特征庫的建立的程序是:步驟20是開始狀態(tài),步驟21從惡意程序樣本集合中取惡意程序樣本,步驟22判斷惡意程序樣本是否取到,若取到轉(zhuǎn)步驟23,否則轉(zhuǎn)步驟26 ; 步驟23選擇惡意程序的功能函數(shù),通過人工選取功能函數(shù)、對功能函數(shù)提取函數(shù)特征;具體處理流程如下:功能函數(shù)指對惡意行為起主要作用的函數(shù),由分析人員指定;從惡意程序樣本庫中取一個惡意程序樣本,經(jīng)過反匯編得到惡意程序樣本的匯編程序;為保證反匯編結(jié)果的質(zhì)量,選用2個反匯編工具分別處理,當結(jié)果一致時,該樣本為有效樣本;選取其中的功能函數(shù)提取程序特征,進入惡意程序特征庫;具體流程如下:步驟30是初始動作,步驟31使用objdump對取得的惡意程序樣本反匯編;執(zhí)行命令“objdump-M intel-d惡意程序樣本名>obj.0ut.txt”,所得反匯編結(jié)果保存obj.0ut.txt文件中;步驟32,打開IDA pro工具,將惡意程序樣本拖拽入工程區(qū),選取默認的二進制形式,等待IDA自動處理完成后,將顯示的反匯編保存到ida.0ut.txt中;步驟33,以上述兩個工具生成的代碼體為字符串,比較這兩個字符串是否相同,是則轉(zhuǎn)步驟35,否則轉(zhuǎn)步驟34 ;步驟34設(shè)置返回值為Nofunc,取值為O、表示沒取到功能函數(shù),轉(zhuǎn)步驟37 ;步驟35,指定選好的功能函數(shù)的函數(shù)體代碼;步驟36,設(shè)置返回值為Okfunc,取值為I,表示取到功能函數(shù);步驟37是結(jié)束狀態(tài); 步驟24判斷是否取到惡意程序的功能函數(shù),若取到,轉(zhuǎn)步驟25,否則返回步驟21 ; 步驟25功能函數(shù)的函數(shù)特征提取,具體處理流程如下,對于需提取特征的函數(shù),經(jīng)過預(yù)處理、去混淆、條件語句和循環(huán)語句處理、嵌套調(diào)用的函數(shù)處理等,獲取函數(shù)特征;步驟40開始動作;步驟41對待提取特征的函數(shù)進行預(yù)處理,生成預(yù)處理后的函數(shù)代碼;步驟42對預(yù)處理后的函數(shù)代碼去混淆處理,生成去混淆的精簡代碼;步驟43對去混淆的精簡處理條件語句,生成去條件語句的精簡代碼;步驟44對去條件語句的函數(shù)代碼處理其中的循環(huán)語句,生成去循環(huán)語句的精簡代碼;步驟45處理函數(shù)之間的調(diào)用;步驟46為結(jié)束狀態(tài); 步驟26將生成的函數(shù)特征計算SHA-1哈希值,存入惡意程序特征庫中;步驟27是結(jié)束狀態(tài)。
3.根據(jù)權(quán)利要求2所述的基于函數(shù)特征的惡意程序檢測方法,其特征是步驟41對待提取特征的函數(shù)進行預(yù)處理,生成預(yù)處理后的函數(shù)代碼:步驟50是初始動作;步驟51在功能函數(shù)的函數(shù)體中取一條指令;步驟52判斷是否取到指令,是則轉(zhuǎn)步驟53,否則轉(zhuǎn)步驟57 ;步驟53判斷取得的指令是否在有效指令集合中,是則轉(zhuǎn)步驟55,否則轉(zhuǎn)步驟54 ;步驟54是將該指令以NOP代替;步驟55對指令執(zhí)行去混淆操作;步驟56執(zhí)行指令壓縮,去掉所有的NOP指令;步驟57為結(jié)束狀態(tài),執(zhí)行至此,初始化過程結(jié)束,生成精簡代碼。
4.根據(jù)權(quán)利要求2所述的基于函數(shù)特征的惡意程序檢測方法,其特征是步驟42中對預(yù)處理后的函數(shù)代碼去混淆處理或?qū)χ噶顖?zhí)行去混淆操作,生成去混淆的精簡代碼:處理惡意程序樣本代碼中混淆技術(shù),將可能出現(xiàn)的等價指令經(jīng)過替換處理實現(xiàn)統(tǒng)一表示,從而消除混淆造成的代碼差異;替換處理基于替換表進行,處理兩類替換:1)指令若在下述去混淆替換表中,則按照去混淆替換表進行替換;2) xor指令后緊跟一條je指令,將兩條指令用“ JMP”符號替換;處理過程通過遍歷精簡代碼,按照規(guī)則執(zhí)行替換,生成去混淆的精簡代碼; 步驟60是初始動作;步驟61從精簡代碼中取一條指令代碼;步驟62判斷指令代碼是否取到,是則轉(zhuǎn)步驟63,否則轉(zhuǎn)步驟64;步驟63判斷取得的指令是否在去混淆替換表中,是則轉(zhuǎn)步驟65,否則轉(zhuǎn)步驟66 ;步驟65查去混淆替換表按替換值進行替換;步驟66判斷取到的指令是否xor,是則轉(zhuǎn)步驟67,否則轉(zhuǎn)步驟61 ;步驟67取得下一條精簡代碼;步驟68判斷取得的指令是否je ;是則轉(zhuǎn)步驟69,否則轉(zhuǎn)步驟61 ;步驟69刪除上一條代碼;步驟6a將當前代碼用JMP符號代替;步驟64是結(jié)束狀態(tài),執(zhí)行至此,生成去混淆的精簡代碼。
5.根據(jù)權(quán)利要求2所述的基于函數(shù)特征的惡意程序檢測方法,其特征是步驟43對去混淆的精簡處理條件語句,生成去條件語句的精簡代碼處理流程;將去混淆的精簡代碼中的條件語句以“C0MP”符號表示,[]符號的內(nèi)容為跳轉(zhuǎn)地址,最后生成去條件語句的精簡代碼;本過程用到的數(shù)據(jù)結(jié)構(gòu)是比較指令集合;比較指令集合的取值為{“je”,“jne”,“jle”,“jbe”};具體流程如下: 步驟70是開始動作;步驟71讀入比較指令集合;步驟72從待處理中取一條代碼,標記為A ;步驟73判斷是否取到指令,若取到則轉(zhuǎn)步驟74,否則轉(zhuǎn)步驟79 ;步驟74判斷A是否在替換表中,若在轉(zhuǎn)步驟75,否則返回步驟72 ;步驟75從待處理中取下一條代碼B ;步驟76判斷B已取到并且不為空,若滿足條件轉(zhuǎn)步驟77,否則轉(zhuǎn)步驟72 ;步驟77用符號“C0MP [”代替A指令;步驟78在A指令的末尾加入“]”符號,與步驟77結(jié)果共同構(gòu)成跳轉(zhuǎn)目標;步驟79是結(jié)束狀態(tài)。
6.根據(jù)權(quán)利要求2所述的基于函數(shù)特征的惡意程序檢測方法,其特征是步驟44對去條件語句的函數(shù)代碼處理其中的循環(huán)語句,生成去循環(huán)語句的精簡代碼;對于去條件語句的精簡代碼、為帶標簽的指令文本,識別出指令中的循環(huán)語義;對于do-while、while、for三種循環(huán)語句,分別按照三種模式的規(guī)則對循環(huán)語句進行判定;最終識別出的循環(huán)以LOOPH符號標記,其中H內(nèi)容為循環(huán)體指令;由于使用的是IDA反匯編結(jié)果,每個跳轉(zhuǎn)指令前都自帶標簽,標簽也是字符串;具體流程如下: 步驟80為起始狀態(tài);步驟81從步驟43對去混淆的精簡處理條件語句,生成去條件語句的精簡代碼處理流程結(jié)果中取一條代碼,記為A ;步驟82判斷A是否取到,若是轉(zhuǎn)步驟.84,否則轉(zhuǎn)步驟83 ;步驟84判斷A是否帶標簽,若是轉(zhuǎn)步驟85,否則轉(zhuǎn)步驟8f ;步驟85是找到下一條MOV指令B,期間遇到不是MOV的指令,直接跳過;步驟86判斷B是否找到,若找到轉(zhuǎn)步驟87,否則返回步驟81 ;步驟87取得B的下一條代碼C ;步驟88判斷C是否取到并且C是COMP指令,若條件滿足,轉(zhuǎn)步驟89,否則轉(zhuǎn)步驟8b ;步驟89將A用“LOOP {”表示;步驟8a在指令B后添加閉括號符號“}”,此時{}內(nèi)部表示的指令為A,B之間的指令段,是do-while模式的循環(huán)體;步驟Sb取得C的下一條指令D ;步驟Sc判斷D是否取得并且D是一條COMP指令,若是轉(zhuǎn)步驟8d,否則返回步驟81 ;步驟8d將A指令標記為“LOOP {”,{}內(nèi)容為A、D指令之間的內(nèi)容;步驟8e在D指令后補充閉括號“} ”符號,完成while循環(huán)體的標示;步驟8f判斷指令A(yù)是否是MOV指令,若是轉(zhuǎn)步驟8g,否則轉(zhuǎn)步驟81 ;步驟8g取得A的下一條代碼B ;步驟8h判斷B存在并且B是JMP指令,若條件滿足轉(zhuǎn)步驟Si,否則返回.81執(zhí)行;步驟Si取得B的下一條代碼C ;步驟8j判斷已經(jīng)取得C并且C帶標簽,條件滿足轉(zhuǎn)步驟8k,否知返回81繼續(xù)執(zhí)行;步驟8k取得下一條是MOV的指令D ;步驟81判斷D是否取到,取到轉(zhuǎn)步驟8m否則返回步驟81 ;步驟Sm取得D下一條指令E,步驟Sn判斷取到E并且E是COMP指令,且E的標簽與C指令的標簽相同,若滿足條件執(zhí)行80,否知返回81步驟;8ο步驟將A用“LOOP {”表示,{}內(nèi)容為A、E指令之間的內(nèi)容;步驟8p在E指令后補充符號“} ”,完成for循環(huán)體的識別;步驟83為結(jié)束狀態(tài)。
7.根據(jù)權(quán)利要求2所述 的基于函數(shù)特征的惡意程序檢測方法,其特征是步驟45處理函數(shù)之間的調(diào)用,步驟90為初始動作;步驟91初始化指令隊列為空;步驟92初始化待處理函數(shù)棧,將待處理函數(shù)體逆序壓棧;步驟93從待處理棧頂取指令;步驟94判斷是否取得指令,若是轉(zhuǎn)步驟98,否則轉(zhuǎn)步驟95 ;步驟95判斷當前隊列是否空,若是轉(zhuǎn)步驟9c ;否轉(zhuǎn)步驟96 ;步驟96計算當前隊列中的指令的特征;步驟97將計算的特征輸出;步驟98判斷取得的指令是否是CALL指令,若是轉(zhuǎn)步驟99,否則轉(zhuǎn)步驟9b ;步驟99取得嵌套函數(shù)體的代碼;步驟9a將取得的函數(shù)體代碼逆序壓入待處理函數(shù)棧;步驟9b將當前指令加入隊列;步驟9c為結(jié)束動作;至此輸出的特征為嵌套函數(shù)的功能特征。
8.根據(jù)權(quán)利要求1所述的基于函數(shù)特征的惡意程序檢測方法,其特征是惡意程序檢測過程要參考惡意程序特征庫,惡意程序特征庫已在惡意程序特征庫建立階段建立完成;本過程中對待檢程序,提取其所有函數(shù)的特征,并逐一與惡意程序特征庫中的特征做比較,判斷是否與惡意樣本的特征一致;在IDA中,利用Functions()遍歷函數(shù),并返回函數(shù)的起始地址;在遍歷每個函數(shù)時,從函數(shù)起始地址開始,使用NextAddr ()遍歷函數(shù)體線性地址,每次線性地址遍歷都通過GetDisasm ()得到指令的反匯編,從而得到整個函數(shù)體的反匯編代碼;將函數(shù)的開始地址和對應(yīng)的函數(shù)體放入哈希表中;待處理集合中的每一項都是一個函數(shù)地址,函數(shù)體內(nèi)容通過查找哈希表獲得;具體流程如下:步驟100為開始動作;步驟101遍歷程序提取函數(shù);步驟102將取得函數(shù)的起始地址和函數(shù)體內(nèi)容放入哈希表;步驟103將所得函數(shù)開始地址加入待處理集合;步驟104從待處理集合中取一個函數(shù)地址;步驟105判斷是否取到函數(shù)開始地址,若取到轉(zhuǎn)步驟106,否則轉(zhuǎn)步驟109;步驟106從哈希表中,利用入口地址取得函數(shù)體代碼;步驟107計算函數(shù)特征;步驟108在特征庫查找該特征,找到轉(zhuǎn)步驟10a,否則轉(zhuǎn)步驟1 04 ;步驟109輸出目標不含惡意程序,轉(zhuǎn)步驟1Ob ;步驟1Oa輸出目標包含惡意程序,轉(zhuǎn)步驟IOb ;步驟IOb是結(jié)束狀態(tài)。
【文檔編號】G06F21/56GK103914657SQ201410153802
【公開日】2014年7月9日 申請日期:2014年4月16日 優(yōu)先權(quán)日:2014年4月16日
【發(fā)明者】曾慶凱, 董殿靖 申請人:南京大學