[發明專利]一種基于深度學習的無符號二進制間接控制流識別方法有效
申請號: | 202110363702.6 | 申請日: | 2021-04-02 |
公開(公告)號: | CN113204764B | 公開(公告)日: | 2022-05-17 |
發明(設計)人: | 王鵑;王蘊茹;楊夢達;王杰;鐘璟 | 申請(專利權)人: | 武漢大學 |
主分類號: | G06F21/56 | 分類號: | G06F21/56;G06F8/41;G06K9/62;G06N3/04;G06N3/08 |
代理公司: | 武漢科皓知識產權代理事務所(特殊普通合伙) 42222 | 代理人: | 許蓮英 |
地址: | 430072 湖*** | 國省代碼: | 湖北;42 |
權利要求書: | 查看更多 | 說明書: | 查看更多 |
摘要: | |||
搜索關鍵詞: | 一種 基于 深度 學習 符號 二進制 間接 控制 識別 方法 | ||
1.一種基于深度學習的無符號二進制間接控制流識別方法,其特征在于,包括以下步驟:
步驟1:引入原始二進制代碼文件,原始二進制代碼文件中多個字節構成多個指令代碼塊,多個指令代碼塊構成多個基本塊代碼塊,多個基本塊代碼塊構成多個函數代碼塊,根據基本塊代碼塊和函數代碼塊構建間接調用分支和函數序列,并進一步構建間接跳轉的三元組樣本、間接調用的三元組樣本,對間接跳轉的三元組樣本和間接調用的三元組樣本分別進行標記,生成間接跳轉訓練集、間接調用訓練集;
步驟2:構建神經網絡間接跳轉目標識別分類模型,將間接跳轉訓練集中每個間接跳轉的三元組樣本依次輸入神經網絡間接跳轉目標識別分類模型,進一步分類得到對應的三元組樣本預測結果,進一步結合間接跳轉樣本標簽和分類模型的預測標簽構建神經網絡間接跳轉目標識別分類損失函數模型,通過優化訓練得到網絡的尋優化參數集,根據網絡尋優化參數集構建訓練后神經網絡間接跳轉目標識別分類模型;構建神經網絡間接調用目標識別分類模型,將間接調用訓練集中每個間接調用的三元組樣本依次輸入神經網絡間接調用目標識別分類模型,進一步分類得到對應的三元組樣本預測結果,進一步結合間接調用樣本標簽和分類模型預測的標簽建神經網絡間接調用目標識別分類損失函數模型,通過優化訓練得到網絡的尋優化參數集,根據網絡尋優化參數集構建訓練后神經網絡間接調用目標識別分類模型;
步驟3:將待檢測的二進制文件通過步驟1提取待檢測的二進制中指令代碼塊、待檢測的二進制中基本塊代碼塊、待檢測的二進制中函數代碼塊,對于待檢測的二進制中指令代碼塊,判別是否為間接跳轉指令代碼塊或間接調用指令代碼塊。
2.根據權利要求1所述的基于深度學習的無符號二進制間接控制流識別方法,其特征在于,
步驟1所述原始二進制代碼文件為:
texti={ci,1,ci,2,...,ci,L}
i∈[1,K]
其中,texti表示第i個原始二進制代碼文件,K表示原始二進制代碼文件的數量,L表示第i個原始二進制代碼文件中字節的數量,ci,j表示第i個原始二進制代碼文件中第j個字節,j∈[1,L];
步驟1所述原始二進制代碼文件中多個字節構成多個指令代碼塊具體表示為:
Insi,k={ci,sins_k,ci,sins_k+1,...,ci,sins_k+nins_k-1}
k∈[1,Nins]
其中,Insi,k表示第i個原始二進制代碼文件中第k個指令代碼塊,Nins表示第i個原始二進制代碼文件中指令代碼塊的數量,sins_k為第k個指令代碼塊起始的字節的下標,nins_k表示第k個指令代碼塊中字節的數量,ci,sins_k+j表示第i個原始二進制代碼文件中第k個指令代碼塊中第sins_k+j+1個字節,j∈[0,nins_k-1];
步驟1所述多個指令代碼塊構成多個基本塊代碼塊具體表示為:
Bi,m={Insi,sbb_m,Insi,sbb_m+1,...,Insi,sbb_m+nbb_m-1}
m∈[1,Nbb]
其中,Bi,m表示第i個原始二進制代碼文件中第m個基本塊代碼塊,Nbb表示第i個原始二進制代碼文件中基本塊代碼塊的數量,sbb_m為第m個基本塊代碼塊起始的指令代碼塊的下標,nbb_m表示第m個基本塊代碼塊中指令代碼塊的數量,Insi,sbb_m+j表示第i個原始二進制代碼文件中第m個基本塊代碼塊中第sbb_m+j+1個指令代碼塊,j∈[0,nbb_m-1];
步驟1所述多個基本塊代碼塊構成多個函數代碼塊的具體表示為:
Fi,n={Bi,sfunc_n,Bi,sfunc_n+1,...,Bi,sfunc_n+nfunc_n-1}
n∈[1,Nfunc]
其中,Fi,n表示第i個原始二進制代碼文件中第n個函數代碼塊,Nfunc表示第i個原始二進制代碼文件中函數代碼塊的數量,sfunc_n為第n個函數代碼塊起始的基本塊代碼塊的下標,nfunc_n表示第n個函數代碼塊中基本塊代碼塊的數量,Bi,sfunc_n+j表示第i個原始二進制代碼文件中第n個函數代碼塊中第sfunc_n+j+1個基本塊代碼塊,j∈[0,nfunc_n-1];
步驟1所述根據基本塊代碼塊和函數代碼塊構建間接調用分支和函數序列為:
所述間接調用分支:
Bri,m={Bi,entry_m,e,Bi,entry_m+1,...,e,Bi,call_m}
m∈[1,Ncall]
其中,Bri,m為第i個原始二進制代碼文件中第m個間接調用指令代碼塊所在的間接調用分支序列,Ncall表示第i個原始二進制代碼文件中間接調用指令代碼塊的數量,entry_m為第m個間接調用分支序列的入口基本塊的下標,entry_m+1為Bi,entry_m的后繼基本塊代碼塊的下標,call_m為第m個間接調用指令代碼塊所在基本塊代碼塊的下標;
所述函數序列:
Fsi,n={Bi,sfunc_n,e,Bi,sfunc_n+1,...,e,Bi,sfunc_n+nfunc_n-1}
n∈[1,Nfunc]
其中,Fsi,n為函數Fi,n對應的函數序列,e為函數內部的控制流;
步驟1所述進一步構建間接跳轉的三元組樣本為:
Jdatai,k=(Bi,m,e,Bi,n)
k∈[1,Ndata_jmp]
其中,Jdatai,k表示第i個原始二進制代碼文件生成的第k個間接跳轉數據樣本,即第i個原始二進制代碼文件中第k個跳轉表對應的樣本,Ndata_jmp表示第i個原始二進制代碼文件中間接跳轉樣本的數量,e表示函數代碼塊內部的控制流,Bi,m為第k個跳轉表中間接跳轉指令代碼塊所在的基本塊代碼塊,Bi,n為第k個跳轉表所在函數代碼塊中除Bi,m的任一基本塊代碼塊,即假設Bi,m∈Fi,l,則Bi,n∈Fi,l-{Bi,m},m,n∈[1,Nbb];
上述Jdatai,k對應的第k個跳轉表的構成為:
JTablei,k={Bi,m:{Bi,sjt_k,Bi,sjt_k+1,...,Bi,sjt_k+njt_k-1}}
其中,sjt_k為第k個跳轉表起始的基本塊代碼塊的下標,njt_k表示第k個跳轉表中跳轉條目的數量,Bi,sjt_k+j表示第i個原始二進制代碼文件中第k個跳轉表中第sjt_k+j+1個跳轉條目,j∈[0,njt_k-1];
步驟1所述進一步構建間接調用的三元組樣本為:
Cdatai,k=(Bri,k,E,Fsi,n)
k∈[1,Ndata_call]
其中,Cdatai,k表示第i個原始二進制代碼文件生成的第k個間接調用數據樣本,即第i個原始二進制代碼文件中第k個間接調用指令代碼塊對應的樣本,假設為Insi,l,Ndata_call表示第i個原始二進制代碼文件中間接調用樣本的數量,E表示函數代碼塊之間的控制流,Bri,k為第i個原始二進制代碼文件中第k個間接調用指令代碼塊Insi,l所在的間接調用分支,基于寬度優先搜索算法構造Bri,k;Fsi,n為第i個原始二進制代碼文件中的第n個函數Fi,n對應的函數序列,Fi,n為所在二進制代碼內任意address-taken函數;
定義CTarget(Insi,l)為Insi,l實際調用的函數代碼塊列表,即:
CTarget(Insi,l)={Fi,ct1,Fi,ct2,...,Fi,ctn}
其中,Fi,ct1,Fi,ct2,...,Fi,ctn為Insi,l的實際目標函數;
步驟1所述對間接跳轉的三元組樣本和間接調用的三元組樣本分別進行標記,生成間接跳轉訓練集、間接調用訓練集為:
對于間接跳轉的三元組樣本即Jdatai,k=(Bi,m,e,Bi,n):
若Bi,n∈JTablei,k[Bi,m],則Jdatai,k的標簽標記為Jlabeli_k,1,反之為Jlabeli_k,0;
對于間接調用的三元組樣本即Cdatai,k=(Bri,k,E,Fsi,n):
若Fi,n∈CTarget(Insi,l),則該樣本標記為Clabeli_k,1,反之為Clabeli_k,0;
步驟1所述生成間接跳轉訓練集,即:
JDATA={(Jdata1,1,Jlabel1_1,k1),(Jdata1,2,Jlabel1_2,k2),......,(JdataK,Ndata_jmp_k,JlabelK_Ndata_jmp_k,kNjmp)}
其中,JDATA為間接跳轉訓練集,(Jdata1,1,Jlabel1_1,k1)為數據集中的第一個樣本,如前所述,Jdata1,1為第1個原始二進制代碼文件中的第1個樣本,Jlabel1_1,k1為Jdata1,1的標簽,k1的取值為0或1;(Jdatai,j,Jlabeli_j,km)為數據集中第m個樣本,Jdatai,j為第i個原始二進制代碼文件中的第j個樣本,Jlabeli_j,km為其對應的標簽,m為該樣本在數據集中的下標,其中,i∈[1,K],j∈[1,Ndata_jmp_i],K為原始二進制代碼文件的數量,Ndata_jmp_i表示第i個二進制的間接跳轉樣本總個數,Njmp為間接跳轉訓練集中的樣本總數;
步驟1所述生成間接調用訓練集,即:
CDATA={(Cdata1,1,Clabel1_1,k1),(Cdata1,2,Clabel1_2,k2),......,(CdataK,Ndata_call_k,ClabelK_Ndata_call_k,kNcall)}
其中,CDATA為間接調用訓練集,(Cdata1,1,Clabel1_1,k1)為數據集中的第一個樣本,如前所述,Cdata1,1為第1個原始二進制代碼文件中的第1個樣本,Clabel1_1,k1為Cdata1,1的標簽,k1的取值為0或1;(Cdatai,j,Clabeli_j,km)為數據集中第m個樣本,Cdatai,j為第i個原始二進制代碼文件中的第j個樣本,Clabeli_j,km為其對應的標簽,m為該樣本在數據集中的下標,其中,i∈[1,K],j∈[1,Ndata_call_i],K為原始二進制代碼文件的數量,Ndata_call_i表示第i個二進制的間接跳轉樣本總個數,Ncall為間接跳轉訓練集中的樣本總數。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于武漢大學,未經武漢大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110363702.6/1.html,轉載請聲明來源鉆瓜專利網。