[發(fā)明專利]一種基于深度學(xué)習(xí)的無符號二進(jìn)制間接控制流識別方法有效
| 申請?zhí)枺?/td> | 202110363702.6 | 申請日: | 2021-04-02 |
| 公開(公告)號: | CN113204764B | 公開(公告)日: | 2022-05-17 |
| 發(fā)明(設(shè)計)人: | 王鵑;王蘊茹;楊夢達(dá);王杰;鐘璟 | 申請(專利權(quán))人: | 武漢大學(xué) |
| 主分類號: | G06F21/56 | 分類號: | G06F21/56;G06F8/41;G06K9/62;G06N3/04;G06N3/08 |
| 代理公司: | 武漢科皓知識產(chǎn)權(quán)代理事務(wù)所(特殊普通合伙) 42222 | 代理人: | 許蓮英 |
| 地址: | 430072 湖*** | 國省代碼: | 湖北;42 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 深度 學(xué)習(xí) 符號 二進(jìn)制 間接 控制 識別 方法 | ||
1.一種基于深度學(xué)習(xí)的無符號二進(jìn)制間接控制流識別方法,其特征在于,包括以下步驟:
步驟1:引入原始二進(jìn)制代碼文件,原始二進(jìn)制代碼文件中多個字節(jié)構(gòu)成多個指令代碼塊,多個指令代碼塊構(gòu)成多個基本塊代碼塊,多個基本塊代碼塊構(gòu)成多個函數(shù)代碼塊,根據(jù)基本塊代碼塊和函數(shù)代碼塊構(gòu)建間接調(diào)用分支和函數(shù)序列,并進(jìn)一步構(gòu)建間接跳轉(zhuǎn)的三元組樣本、間接調(diào)用的三元組樣本,對間接跳轉(zhuǎn)的三元組樣本和間接調(diào)用的三元組樣本分別進(jìn)行標(biāo)記,生成間接跳轉(zhuǎn)訓(xùn)練集、間接調(diào)用訓(xùn)練集;
步驟2:構(gòu)建神經(jīng)網(wǎng)絡(luò)間接跳轉(zhuǎn)目標(biāo)識別分類模型,將間接跳轉(zhuǎn)訓(xùn)練集中每個間接跳轉(zhuǎn)的三元組樣本依次輸入神經(jīng)網(wǎng)絡(luò)間接跳轉(zhuǎn)目標(biāo)識別分類模型,進(jìn)一步分類得到對應(yīng)的三元組樣本預(yù)測結(jié)果,進(jìn)一步結(jié)合間接跳轉(zhuǎn)樣本標(biāo)簽和分類模型的預(yù)測標(biāo)簽構(gòu)建神經(jīng)網(wǎng)絡(luò)間接跳轉(zhuǎn)目標(biāo)識別分類損失函數(shù)模型,通過優(yōu)化訓(xùn)練得到網(wǎng)絡(luò)的尋優(yōu)化參數(shù)集,根據(jù)網(wǎng)絡(luò)尋優(yōu)化參數(shù)集構(gòu)建訓(xùn)練后神經(jīng)網(wǎng)絡(luò)間接跳轉(zhuǎn)目標(biāo)識別分類模型;構(gòu)建神經(jīng)網(wǎng)絡(luò)間接調(diào)用目標(biāo)識別分類模型,將間接調(diào)用訓(xùn)練集中每個間接調(diào)用的三元組樣本依次輸入神經(jīng)網(wǎng)絡(luò)間接調(diào)用目標(biāo)識別分類模型,進(jìn)一步分類得到對應(yīng)的三元組樣本預(yù)測結(jié)果,進(jìn)一步結(jié)合間接調(diào)用樣本標(biāo)簽和分類模型預(yù)測的標(biāo)簽建神經(jīng)網(wǎng)絡(luò)間接調(diào)用目標(biāo)識別分類損失函數(shù)模型,通過優(yōu)化訓(xùn)練得到網(wǎng)絡(luò)的尋優(yōu)化參數(shù)集,根據(jù)網(wǎng)絡(luò)尋優(yōu)化參數(shù)集構(gòu)建訓(xùn)練后神經(jīng)網(wǎng)絡(luò)間接調(diào)用目標(biāo)識別分類模型;
步驟3:將待檢測的二進(jìn)制文件通過步驟1提取待檢測的二進(jìn)制中指令代碼塊、待檢測的二進(jìn)制中基本塊代碼塊、待檢測的二進(jìn)制中函數(shù)代碼塊,對于待檢測的二進(jìn)制中指令代碼塊,判別是否為間接跳轉(zhuǎn)指令代碼塊或間接調(diào)用指令代碼塊。
2.根據(jù)權(quán)利要求1所述的基于深度學(xué)習(xí)的無符號二進(jìn)制間接控制流識別方法,其特征在于,
步驟1所述原始二進(jìn)制代碼文件為:
texti={ci,1,ci,2,...,ci,L}
i∈[1,K]
其中,texti表示第i個原始二進(jìn)制代碼文件,K表示原始二進(jìn)制代碼文件的數(shù)量,L表示第i個原始二進(jìn)制代碼文件中字節(jié)的數(shù)量,ci,j表示第i個原始二進(jìn)制代碼文件中第j個字節(jié),j∈[1,L];
步驟1所述原始二進(jìn)制代碼文件中多個字節(jié)構(gòu)成多個指令代碼塊具體表示為:
Insi,k={ci,sins_k,ci,sins_k+1,...,ci,sins_k+nins_k-1}
k∈[1,Nins]
其中,Insi,k表示第i個原始二進(jìn)制代碼文件中第k個指令代碼塊,Nins表示第i個原始二進(jìn)制代碼文件中指令代碼塊的數(shù)量,sins_k為第k個指令代碼塊起始的字節(jié)的下標(biāo),nins_k表示第k個指令代碼塊中字節(jié)的數(shù)量,ci,sins_k+j表示第i個原始二進(jìn)制代碼文件中第k個指令代碼塊中第sins_k+j+1個字節(jié),j∈[0,nins_k-1];
步驟1所述多個指令代碼塊構(gòu)成多個基本塊代碼塊具體表示為:
Bi,m={Insi,sbb_m,Insi,sbb_m+1,...,Insi,sbb_m+nbb_m-1}
m∈[1,Nbb]
其中,Bi,m表示第i個原始二進(jìn)制代碼文件中第m個基本塊代碼塊,Nbb表示第i個原始二進(jìn)制代碼文件中基本塊代碼塊的數(shù)量,sbb_m為第m個基本塊代碼塊起始的指令代碼塊的下標(biāo),nbb_m表示第m個基本塊代碼塊中指令代碼塊的數(shù)量,Insi,sbb_m+j表示第i個原始二進(jìn)制代碼文件中第m個基本塊代碼塊中第sbb_m+j+1個指令代碼塊,j∈[0,nbb_m-1];
步驟1所述多個基本塊代碼塊構(gòu)成多個函數(shù)代碼塊的具體表示為:
Fi,n={Bi,sfunc_n,Bi,sfunc_n+1,...,Bi,sfunc_n+nfunc_n-1}
n∈[1,Nfunc]
其中,F(xiàn)i,n表示第i個原始二進(jìn)制代碼文件中第n個函數(shù)代碼塊,Nfunc表示第i個原始二進(jìn)制代碼文件中函數(shù)代碼塊的數(shù)量,sfunc_n為第n個函數(shù)代碼塊起始的基本塊代碼塊的下標(biāo),nfunc_n表示第n個函數(shù)代碼塊中基本塊代碼塊的數(shù)量,Bi,sfunc_n+j表示第i個原始二進(jìn)制代碼文件中第n個函數(shù)代碼塊中第sfunc_n+j+1個基本塊代碼塊,j∈[0,nfunc_n-1];
步驟1所述根據(jù)基本塊代碼塊和函數(shù)代碼塊構(gòu)建間接調(diào)用分支和函數(shù)序列為:
所述間接調(diào)用分支:
Bri,m={Bi,entry_m,e,Bi,entry_m+1,...,e,Bi,call_m}
m∈[1,Ncall]
其中,Bri,m為第i個原始二進(jìn)制代碼文件中第m個間接調(diào)用指令代碼塊所在的間接調(diào)用分支序列,Ncall表示第i個原始二進(jìn)制代碼文件中間接調(diào)用指令代碼塊的數(shù)量,entry_m為第m個間接調(diào)用分支序列的入口基本塊的下標(biāo),entry_m+1為Bi,entry_m的后繼基本塊代碼塊的下標(biāo),call_m為第m個間接調(diào)用指令代碼塊所在基本塊代碼塊的下標(biāo);
所述函數(shù)序列:
Fsi,n={Bi,sfunc_n,e,Bi,sfunc_n+1,...,e,Bi,sfunc_n+nfunc_n-1}
n∈[1,Nfunc]
其中,F(xiàn)si,n為函數(shù)Fi,n對應(yīng)的函數(shù)序列,e為函數(shù)內(nèi)部的控制流;
步驟1所述進(jìn)一步構(gòu)建間接跳轉(zhuǎn)的三元組樣本為:
Jdatai,k=(Bi,m,e,Bi,n)
k∈[1,Ndata_jmp]
其中,Jdatai,k表示第i個原始二進(jìn)制代碼文件生成的第k個間接跳轉(zhuǎn)數(shù)據(jù)樣本,即第i個原始二進(jìn)制代碼文件中第k個跳轉(zhuǎn)表對應(yīng)的樣本,Ndata_jmp表示第i個原始二進(jìn)制代碼文件中間接跳轉(zhuǎn)樣本的數(shù)量,e表示函數(shù)代碼塊內(nèi)部的控制流,Bi,m為第k個跳轉(zhuǎn)表中間接跳轉(zhuǎn)指令代碼塊所在的基本塊代碼塊,Bi,n為第k個跳轉(zhuǎn)表所在函數(shù)代碼塊中除Bi,m的任一基本塊代碼塊,即假設(shè)Bi,m∈Fi,l,則Bi,n∈Fi,l-{Bi,m},m,n∈[1,Nbb];
上述Jdatai,k對應(yīng)的第k個跳轉(zhuǎn)表的構(gòu)成為:
JTablei,k={Bi,m:{Bi,sjt_k,Bi,sjt_k+1,...,Bi,sjt_k+njt_k-1}}
其中,sjt_k為第k個跳轉(zhuǎn)表起始的基本塊代碼塊的下標(biāo),njt_k表示第k個跳轉(zhuǎn)表中跳轉(zhuǎn)條目的數(shù)量,Bi,sjt_k+j表示第i個原始二進(jìn)制代碼文件中第k個跳轉(zhuǎn)表中第sjt_k+j+1個跳轉(zhuǎn)條目,j∈[0,njt_k-1];
步驟1所述進(jìn)一步構(gòu)建間接調(diào)用的三元組樣本為:
Cdatai,k=(Bri,k,E,Fsi,n)
k∈[1,Ndata_call]
其中,Cdatai,k表示第i個原始二進(jìn)制代碼文件生成的第k個間接調(diào)用數(shù)據(jù)樣本,即第i個原始二進(jìn)制代碼文件中第k個間接調(diào)用指令代碼塊對應(yīng)的樣本,假設(shè)為Insi,l,Ndata_call表示第i個原始二進(jìn)制代碼文件中間接調(diào)用樣本的數(shù)量,E表示函數(shù)代碼塊之間的控制流,Bri,k為第i個原始二進(jìn)制代碼文件中第k個間接調(diào)用指令代碼塊Insi,l所在的間接調(diào)用分支,基于寬度優(yōu)先搜索算法構(gòu)造Bri,k;Fsi,n為第i個原始二進(jìn)制代碼文件中的第n個函數(shù)Fi,n對應(yīng)的函數(shù)序列,F(xiàn)i,n為所在二進(jìn)制代碼內(nèi)任意address-taken函數(shù);
定義CTarget(Insi,l)為Insi,l實際調(diào)用的函數(shù)代碼塊列表,即:
CTarget(Insi,l)={Fi,ct1,Fi,ct2,...,Fi,ctn}
其中,F(xiàn)i,ct1,Fi,ct2,...,Fi,ctn為Insi,l的實際目標(biāo)函數(shù);
步驟1所述對間接跳轉(zhuǎn)的三元組樣本和間接調(diào)用的三元組樣本分別進(jìn)行標(biāo)記,生成間接跳轉(zhuǎn)訓(xùn)練集、間接調(diào)用訓(xùn)練集為:
對于間接跳轉(zhuǎn)的三元組樣本即Jdatai,k=(Bi,m,e,Bi,n):
若Bi,n∈JTablei,k[Bi,m],則Jdatai,k的標(biāo)簽標(biāo)記為Jlabeli_k,1,反之為Jlabeli_k,0;
對于間接調(diào)用的三元組樣本即Cdatai,k=(Bri,k,E,Fsi,n):
若Fi,n∈CTarget(Insi,l),則該樣本標(biāo)記為Clabeli_k,1,反之為Clabeli_k,0;
步驟1所述生成間接跳轉(zhuǎn)訓(xùn)練集,即:
JDATA={(Jdata1,1,Jlabel1_1,k1),(Jdata1,2,Jlabel1_2,k2),......,(JdataK,Ndata_jmp_k,JlabelK_Ndata_jmp_k,kNjmp)}
其中,JDATA為間接跳轉(zhuǎn)訓(xùn)練集,(Jdata1,1,Jlabel1_1,k1)為數(shù)據(jù)集中的第一個樣本,如前所述,Jdata1,1為第1個原始二進(jìn)制代碼文件中的第1個樣本,Jlabel1_1,k1為Jdata1,1的標(biāo)簽,k1的取值為0或1;(Jdatai,j,Jlabeli_j,km)為數(shù)據(jù)集中第m個樣本,Jdatai,j為第i個原始二進(jìn)制代碼文件中的第j個樣本,Jlabeli_j,km為其對應(yīng)的標(biāo)簽,m為該樣本在數(shù)據(jù)集中的下標(biāo),其中,i∈[1,K],j∈[1,Ndata_jmp_i],K為原始二進(jìn)制代碼文件的數(shù)量,Ndata_jmp_i表示第i個二進(jìn)制的間接跳轉(zhuǎn)樣本總個數(shù),Njmp為間接跳轉(zhuǎn)訓(xùn)練集中的樣本總數(shù);
步驟1所述生成間接調(diào)用訓(xùn)練集,即:
CDATA={(Cdata1,1,Clabel1_1,k1),(Cdata1,2,Clabel1_2,k2),......,(CdataK,Ndata_call_k,ClabelK_Ndata_call_k,kNcall)}
其中,CDATA為間接調(diào)用訓(xùn)練集,(Cdata1,1,Clabel1_1,k1)為數(shù)據(jù)集中的第一個樣本,如前所述,Cdata1,1為第1個原始二進(jìn)制代碼文件中的第1個樣本,Clabel1_1,k1為Cdata1,1的標(biāo)簽,k1的取值為0或1;(Cdatai,j,Clabeli_j,km)為數(shù)據(jù)集中第m個樣本,Cdatai,j為第i個原始二進(jìn)制代碼文件中的第j個樣本,Clabeli_j,km為其對應(yīng)的標(biāo)簽,m為該樣本在數(shù)據(jù)集中的下標(biāo),其中,i∈[1,K],j∈[1,Ndata_call_i],K為原始二進(jìn)制代碼文件的數(shù)量,Ndata_call_i表示第i個二進(jìn)制的間接跳轉(zhuǎn)樣本總個數(shù),Ncall為間接跳轉(zhuǎn)訓(xùn)練集中的樣本總數(shù)。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于武漢大學(xué),未經(jīng)武漢大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.17sss.com.cn/pat/books/202110363702.6/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F21-00 防止未授權(quán)行為的保護(hù)計算機(jī)或計算機(jī)系統(tǒng)的安全裝置
G06F21-02 .通過保護(hù)計算機(jī)的特定內(nèi)部部件
G06F21-04 .通過保護(hù)特定的外圍設(shè)備,如鍵盤或顯示器
G06F21-06 .通過感知越權(quán)操作或外圍侵?jǐn)_
G06F21-20 .通過限制訪問計算機(jī)系統(tǒng)或計算機(jī)網(wǎng)絡(luò)中的節(jié)點
G06F21-22 .通過限制訪問或處理程序或過程
- 根據(jù)用戶學(xué)習(xí)效果動態(tài)變化下載學(xué)習(xí)數(shù)據(jù)的系統(tǒng)及方法
- 用于智能個人化學(xué)習(xí)服務(wù)的方法
- 漸進(jìn)式學(xué)習(xí)管理方法及漸進(jìn)式學(xué)習(xí)系統(tǒng)
- 輔助學(xué)習(xí)的方法及裝置
- 基于人工智能的課程推薦方法、裝置、設(shè)備及存儲介質(zhì)
- 基于強(qiáng)化學(xué)習(xí)的自適應(yīng)移動學(xué)習(xí)路徑生成方法
- 一種線上視頻學(xué)習(xí)系統(tǒng)
- 一種基于校園大數(shù)據(jù)的自適應(yīng)學(xué)習(xí)方法、裝置及設(shè)備
- 一種學(xué)習(xí)方案推薦方法、裝置、設(shè)備和存儲介質(zhì)
- 游戲?qū)W習(xí)效果評測方法及系統(tǒng)





