欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法

文檔序號:6519125閱讀:286來源:國知局
一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法
【專利摘要】一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,屬于軟件逆向工程領(lǐng)域。所述方法為:1)對目標(biāo)函數(shù)和庫函數(shù)建立執(zhí)行依賴圖(EDG);2)對EDG的局部EDG序列化,得到特征值序列和有序鄰接矩陣;3)參照庫函數(shù)EDG將目標(biāo)函數(shù)和庫函數(shù)EDG中有唯一點(diǎn)序列且不包含庫函數(shù)EDG首尾的局部EDG收縮成點(diǎn);4)判斷庫函數(shù)收縮EDG是否是目標(biāo)函數(shù)收縮EDG的同構(gòu)子圖;5)驗證識別結(jié)果是否有效。本方法不但能準(zhǔn)確識別完整庫函數(shù),還能識別傳統(tǒng)方法不能識別的多態(tài)及非連續(xù)字節(jié)的內(nèi)聯(lián)庫函數(shù),并有效縮短識別時間。
【專利說明】一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于軟件逆向工程領(lǐng)域,涉及一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法。
【背景技術(shù)】
[0002]逆向工程在二進(jìn)制代碼審查、惡意代碼分析、移植代碼等方面具有非常重要的應(yīng)用。庫函數(shù)識別是整個逆向工程里至關(guān)重要的一個環(huán)節(jié)。它不但可以大大簡化分析人員的工作量,還可以用來挖掘分析人員感興趣的代碼,輔助分析人員理解二進(jìn)制代碼。傳統(tǒng)庫函數(shù)識別方法使用函數(shù)頭字節(jié)特征造成識別率偏低,而且也無法識別內(nèi)聯(lián)庫函數(shù)。另外庫函數(shù)的實例可能是多態(tài)的或者其字節(jié)是不連續(xù)的,對于這樣的庫函數(shù),傳統(tǒng)的庫函數(shù)識別方法是無法處理的。
[0003]庫函數(shù)的識別是逆向工程中的關(guān)鍵技術(shù)。庫函數(shù)識別的難點(diǎn)在于庫函數(shù)實例的字節(jié)可能是非連續(xù)的,并且代碼中的操作數(shù)可能也與庫函數(shù)不同。

【發(fā)明內(nèi)容】

[0004]為了解決上述兩個難點(diǎn),本發(fā)明提出了一種通過判斷執(zhí)行依賴圖子圖同構(gòu)來識別內(nèi)聯(lián)庫函數(shù)的新方法。
[0005]本發(fā)明提出的使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,包括如下步驟:
步驟1:構(gòu)建目標(biāo)函數(shù)和庫函數(shù)的執(zhí)行依賴圖;
步驟2:對執(zhí)行依賴圖中的局部執(zhí)行依賴圖進(jìn)行序列化,得到點(diǎn)特征值序列和存儲邊信息的有序鄰接矩陣;
步驟3:參照庫函數(shù)執(zhí)行依賴圖將目標(biāo)函數(shù)和庫函數(shù)執(zhí)行依賴圖中有唯一確定的點(diǎn)序列且不包含庫函數(shù)執(zhí)行依賴圖首尾的局部執(zhí)行依賴圖收縮成一個點(diǎn);
步驟4:判斷庫函數(shù)的收縮執(zhí)行依賴圖是否是目標(biāo)函數(shù)收縮執(zhí)行依賴圖的同構(gòu)子圖,其中對于未收縮的點(diǎn)僅比較其特征值,對于收縮的點(diǎn)不僅比較其特征值序列,還比較其有序鄰接矩陣;
步驟5:驗證目標(biāo)函數(shù)收縮執(zhí)行依賴圖中識別出的與庫函數(shù)收縮執(zhí)行依賴圖同構(gòu)的子圖是否是有效的識別結(jié)果。
[0006]執(zhí)行依賴圖(Execution Dependence Graph, EDG)是本發(fā)明提出的一種綜合程序依賴圖與控制流圖的新的混合表示。通過EDG,將庫函數(shù)識別問題轉(zhuǎn)化為子圖同構(gòu)測試問題。子圖同構(gòu)測試是NP難問題。使用EDG的庫函數(shù)識別方法,在識別復(fù)雜庫函數(shù)時往往不能在規(guī)定時間內(nèi)結(jié)束。在EDG的基礎(chǔ)上,本發(fā)明提出了一種改進(jìn)的EDG,即收縮執(zhí)行依賴圖(Contracted Execution Dependence Graph, CEDG)。一個基本塊的 EDG 稱為局部 EDG。一個局部EDG序列化后,若唯一對應(yīng)于一個點(diǎn)序列,則此局部EDG的同構(gòu)判斷可以通過比較特征值序列和有序0-1鄰接矩陣來完成。利用此特性,在EDG子圖同構(gòu)測試中,參照庫函數(shù)執(zhí)行依賴圖將目標(biāo)函數(shù)和庫函數(shù)執(zhí)行依賴圖中有唯一確定的點(diǎn)序列且不包含庫函數(shù)執(zhí)行依賴圖首尾的局部執(zhí)行依賴圖收縮成一個點(diǎn)。按這種方法收縮后的EDG,稱為收縮執(zhí)行依賴圖(CEDG),然后對目標(biāo)函數(shù)的CEDG和庫函數(shù)的CEDG進(jìn)行子圖同構(gòu)測試。特別的,對于完整庫函數(shù)識別,因目標(biāo)函數(shù)和庫函數(shù)指令數(shù)相等而只需進(jìn)行圖同構(gòu)測試,因此,庫函數(shù)和目標(biāo)函數(shù)的所有局部EDG都可以收縮。
[0007]本方法不但能準(zhǔn)確識別完整庫函數(shù),還能識別傳統(tǒng)方法不能識別的多態(tài)及非連續(xù)字節(jié)的內(nèi)聯(lián)庫函數(shù),并有效縮短識別時間。收縮執(zhí)行依賴圖方法可以在維持與不收縮方法準(zhǔn)確率與查全率一致的情況下,有效縮短識別時間。
【專利附圖】

【附圖說明】
[0008]圖1是本發(fā)明的流程示意圖。
[0009]圖2是目標(biāo)函數(shù)執(zhí)行依賴圖示意圖。
[0010]圖3是庫函數(shù)執(zhí)行依賴圖示意圖。
[0011]圖4是目標(biāo)函數(shù)收縮執(zhí)行依賴圖示意圖。
[0012]圖5是庫函數(shù)收縮執(zhí)行依賴圖示意圖。
[0013]圖6是識別結(jié)果驗證不通過示意圖一。
[0014]圖7是識別結(jié)果驗證不通過示意圖二。
【具體實施方式】
[0015]下面結(jié)合附圖對本發(fā)明的技術(shù)方案作 進(jìn)一步的說明,但并不局限于此,凡是對本發(fā)明技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍,均應(yīng)涵蓋在本發(fā)明的保護(hù)范圍中。
[0016]【具體實施方式】一:本實施方式中的使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,首先對目標(biāo)函數(shù)和庫函數(shù)建立執(zhí)行依賴圖;然后對執(zhí)行依賴圖的基本塊內(nèi)依賴圖進(jìn)行序列化;如果一個基本塊內(nèi)依賴圖有唯一確定的點(diǎn)序列,則在執(zhí)行依賴圖中將其收縮成一個點(diǎn);判斷庫函數(shù)的執(zhí)行依賴圖是否是目標(biāo)函數(shù)執(zhí)行依賴圖的同構(gòu)子圖;最后驗證識別結(jié)果是否有效。如圖1-5所示,具體步驟如下:
步驟1:構(gòu)建目標(biāo)函數(shù)和庫函數(shù)的執(zhí)行依賴圖:
執(zhí)行依賴圖(EDG)是本發(fā)明提出的一個綜合程序依賴圖與控制流圖的新的混合表示。節(jié)點(diǎn)代表指令,邊代表指令執(zhí)行依賴(包括數(shù)據(jù)依賴和控制依賴)。其中數(shù)據(jù)依賴邊只存在于基本塊(單進(jìn)單出的連續(xù)指令序列)內(nèi),控制依賴邊不僅存在于基本塊內(nèi),還存在于基本塊間。
[0017]步驟11:對函數(shù)進(jìn)行反匯編,計算指令讀寫集合及特征值;
步驟12:劃分基本塊(單進(jìn)單出的連續(xù)指令序列),然后進(jìn)行控制流分析,得到控制流
圖;
步驟13:對基本塊內(nèi)的指令進(jìn)行數(shù)據(jù)和控制依賴分析;
步驟14:對基本塊間的末尾指令和開頭指令的控制依賴分析,即對任意塊末尾指令Vj與任意塊開頭指令如果^是&的跳轉(zhuǎn)目標(biāo),或者^是條件跳轉(zhuǎn)Vj的下一條指令,或者^是跳轉(zhuǎn)目標(biāo)且緊接Vj之后,則Vj和6存在控制依賴;
步驟15:對基本塊內(nèi)的執(zhí)行依賴進(jìn)行簡化,對任意三個點(diǎn)V1', Vj, 若V1'與Vj, Vj與Vk,Vi與Vk有依賴,則EDG中刪去(匕.,Vk)。
[0018]步驟2:對執(zhí)行依賴圖中局部EDG進(jìn)行序列化,得到特征值序列和有序鄰接矩陣: 步驟21:選取局部EDG中所有無前驅(qū)的點(diǎn);
步驟22:將第一步選取的點(diǎn)按其對應(yīng)的指令特征值從小到大的順序進(jìn)行排序后輸出到點(diǎn)序列中;
步驟23:從局部EDG中刪除第一步選取的點(diǎn)及其關(guān)聯(lián)的邊;
步驟24:重復(fù)步驟21、22、23,直至局部EDG中沒有點(diǎn)為止;
步驟25:將點(diǎn)序列中的點(diǎn)替換為點(diǎn)的特征值得到特征值序列;
步驟26:遍歷點(diǎn)序列中任意第i個和第J'個點(diǎn)是否在局部EDG中存在邊,如果存在,則將有序鄰接矩陣的第i行J'列元素標(biāo)記為1,否則標(biāo)記為O。
[0019]步驟3:參照庫函數(shù)執(zhí)行依賴圖將目標(biāo)函數(shù)和庫函數(shù)執(zhí)行依賴圖中可以整體比較的局部執(zhí)行依賴圖收縮成一個點(diǎn);
步驟4:判斷庫函數(shù)的收縮執(zhí)行依賴圖是否是目標(biāo)函數(shù)收縮執(zhí)行依賴圖的同構(gòu)子圖,其中未收縮的點(diǎn)比較特征值,收縮的點(diǎn)比較特征值序列及有序鄰接矩陣;
步驟5:判斷目標(biāo)函數(shù)收縮執(zhí)行依賴圖中識別出的與庫函數(shù)收縮執(zhí)行依賴圖同構(gòu)的子圖是否是有效的識別結(jié)果。
[0020]【具體實施方式】二:本實施方式與【具體實施方式】一不同的是,步驟11中指令讀寫集合是指寄存器、標(biāo)記寄存器各個標(biāo)記位和內(nèi)存。為避免復(fù)雜的指針別名分析,所有內(nèi)存地址統(tǒng)一為一虛擬變量VMEM。
[0021]【具體實施方式】三:本實施方式與【具體實施方式】一不同的是,步驟11中指令特征值的計算具體步驟如下:
(1)指令標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化結(jié)果為二元組SR=(m, r),其中》為指令助記符為操作數(shù)特征值,其取值見表1:
【權(quán)利要求】
1.一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述方法步驟如下: 步驟1:構(gòu)建目標(biāo)函數(shù)和庫函數(shù)的執(zhí)行依賴圖; 步驟2:對執(zhí)行依賴圖中的局部執(zhí)行依賴圖進(jìn)行序列化,得到點(diǎn)特征值序列和存儲邊信息的有序鄰接矩陣; 步驟3:參照庫函數(shù)執(zhí)行依賴圖將目標(biāo)函數(shù)和庫函數(shù)執(zhí)行依賴圖中有唯一確定的點(diǎn)序列且不包含庫函數(shù)執(zhí)行依賴圖首尾的局部執(zhí)行依賴圖收縮成一個點(diǎn); 步驟4:判斷庫函數(shù)的收縮執(zhí)行依賴圖是否是目標(biāo)函數(shù)收縮執(zhí)行依賴圖的同構(gòu)子圖,其中對于未收縮的點(diǎn)僅比較其特征值,對于收縮的點(diǎn)不僅比較其特征值序列,還比較其有序鄰接矩陣; 步驟5:驗證目標(biāo)函數(shù)收縮執(zhí)行依賴圖中識別出的與庫函數(shù)收縮執(zhí)行依賴圖同構(gòu)的子圖是否是有效的識別結(jié)果。
2.根據(jù)權(quán)利要求1所述的一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述執(zhí)行依賴圖是依賴圖與控制流圖的混合表示,節(jié)點(diǎn)代表指令,邊代表指令執(zhí)行依賴。
3.根據(jù)權(quán)利要求1所述的一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述步驟I的具體步驟如下: 步驟11:對函數(shù)進(jìn)行反匯編,計算指令讀寫集合及特征值; 步驟12:劃分基本塊,然后進(jìn)行控制流分析,得到控制流圖; 步驟13:對基本塊內(nèi)的指令進(jìn)行數(shù)據(jù)和控制依賴分析; 步驟14:對基本塊間的 末尾指令和開頭指令的控制依賴分析,即對任意塊末尾指令Vj與任意塊開頭指令如果^是&的跳轉(zhuǎn)目標(biāo),或者^是條件跳轉(zhuǎn)Vj的下一條指令,或者^是跳轉(zhuǎn)目標(biāo)且緊接Vj之后,則Vj和6存在控制依賴; 步驟15:對基本塊內(nèi)的執(zhí)行依賴進(jìn)行簡化,對任意三個點(diǎn)V1', Vj, 若V1'與Vj, Vj與Vi, V1與^有依賴,則執(zhí)行依賴圖中刪去(^,Vk)。
4.根據(jù)權(quán)利要求3所述的一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述步驟13包括如下步驟: (1)對基本塊內(nèi)任意兩條指令Ki,,如果
5.根據(jù)權(quán)利要求1所述的一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述步驟11中指令讀寫集合是指寄存器、標(biāo)記寄存器各個標(biāo)記位和內(nèi)存。
6.根據(jù)權(quán)利要求1所述的一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述步驟2的具體步驟如下: 步驟21:選取局部執(zhí)行依賴圖中所有無前驅(qū)的點(diǎn); 步驟22:將第一步選取的點(diǎn)按其對應(yīng)的指令特征值從小到大的順序進(jìn)行排序后輸出到點(diǎn)序列中; 步驟23:從局部執(zhí)行依賴圖中刪除第一步選取的點(diǎn)及其關(guān)聯(lián)的邊;步驟24:重復(fù)步驟21、22、23,直至局部執(zhí)行依賴圖中沒有點(diǎn)為止; 步驟25:將點(diǎn)序列中的點(diǎn)替換為點(diǎn)的特征值得到特征值序列; 步驟26:遍歷點(diǎn)序列中任意第i個和第j個點(diǎn)是否在局部執(zhí)行依賴圖中存在邊,如果存在,則將有序鄰接矩陣的第i行J列元素標(biāo)記為1,否則標(biāo)記為O。
7.根據(jù)權(quán)利要求3所述的一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述步驟11中指令特征值的計算具體步驟如下: (1)指令標(biāo)準(zhǔn)化:標(biāo)準(zhǔn)化結(jié)果為二元組SR=(m, r),其中》為指令助記符,r為操作數(shù)特征值; (2)標(biāo)準(zhǔn)化結(jié)果哈?;?先計算字符串哈希函數(shù)Zfei如,該函數(shù)的輸入《是一個指令助記符,輸出是與其他指令助記符不沖突的16位整數(shù);然后,通過招作幻=Hash (m) / (r?16)將該16位整數(shù)與左移16位的r值組合成一個32位的整數(shù)作為標(biāo)準(zhǔn)化后指令的特征值。
8.根據(jù)權(quán)利要求1所述的一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述步驟3中的收縮執(zhí)行依賴圖算法輸入欲收縮的執(zhí)行依賴圖G1和參照執(zhí)行依賴圖&,輸出收縮后的執(zhí)行依賴圖,具體步驟如下: (1)標(biāo)記&中的所有局部執(zhí)行依賴圖為收縮,除了沒有唯一確定的點(diǎn)序列的局部執(zhí)行依賴圖以外; (2)識別G1中的包含任一G2頭的所有指令的局部執(zhí)行依賴圖,所謂頭是指沒有前驅(qū)的局部執(zhí)行依賴圖; (3)識別G中的包含任一&尾的所有指令的局部執(zhí)行依賴圖,所謂尾是指沒有后繼的局部執(zhí)行依賴圖; (4)檢查步驟(2)和步驟(3)中識別出的局部執(zhí)行依賴圖之間的連通性,連通的局部執(zhí)行依賴圖標(biāo)記為不收縮; (5)將G7中標(biāo)記為收縮的局部執(zhí)行依賴圖替換為一個點(diǎn),原來指向局部執(zhí)行依賴圖入口的邊改為指向替換點(diǎn),原來從局部EDG出口的出發(fā)的邊改為從替換點(diǎn)出發(fā)。
9.根據(jù)權(quán)利要求1所述的一種使用收縮執(zhí)行依賴圖識別庫函數(shù)的方法,其特征在于所述步驟5的具體步驟如下: (O依次選取一個目標(biāo)函數(shù)執(zhí)行依賴圖中的但不在庫函數(shù)實例中的點(diǎn); (2)如果此點(diǎn)在實例的地址范圍之外,若實例中存在一點(diǎn)有控制依賴于此點(diǎn),則返回FALSE,否則返回TRUE ; (3)如果此點(diǎn)在實例的地址范圍之內(nèi),實例中存在一點(diǎn)有數(shù)據(jù)依賴于此點(diǎn),但此點(diǎn)沒有數(shù)據(jù)依賴于實例中其他點(diǎn),則返回TRUE,否則返回FALSE。
【文檔編號】G06F21/14GK103577728SQ201310572174
【公開日】2014年2月12日 申請日期:2013年11月16日 優(yōu)先權(quán)日:2013年11月16日
【發(fā)明者】邱景, 蘇小紅, 馬培軍, 趙玲玲, 王甜甜 申請人:哈爾濱工業(yè)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
集安市| 陆丰市| 南乐县| 台北市| 山阳县| 新蔡县| 华容县| 台北县| 会东县| 延庆县| 乳源| 孝义市| 宜兰市| 衡阳市| 青州市| 连州市| 阳西县| 保靖县| 衡南县| 郓城县| 岑巩县| 抚远县| 开封市| 古交市| 顺义区| 高要市| 苏尼特左旗| 黄骅市| 闸北区| 酉阳| 余江县| 石河子市| 漠河县| 柘荣县| 台南市| 府谷县| 彭州市| 荔浦县| 包头市| 宁夏| 淳化县|