本發明涉及軟件保護領域,具體為一種基于gilbreath猜想的動態控制流混淆方法。
背景技術:
1、隨著信息技術的快速發展,軟件安全與知識產權保護已成為亟需解決的重要問題;代碼混淆技術作為一種有效的防護手段,通過對程序的語法結構、控制流和數據流進行復雜化處理,提升代碼的不可讀性和不可預測性,從而抵御逆向分析和惡意篡改,已廣泛應用于商業軟件、數字版權保護(drm)等領域。
2、然而,傳統代碼混淆技術主要依賴于靜態層面的簡單變換,如變量重命名、無效代碼插入等;這些方法在早期對手工逆向分析和基礎靜態分析工具具有一定的干擾作用,但面對現代高效的自動化逆向分析工具,其有效性已大幅削弱。
3、當前主流混淆方法在面對高級逆向工程技術時暴露出多種缺陷,包括:控制流結構易于恢復、虛假分支可被輕易識別、路徑探索難度不足等;這些問題使得核心算法和敏感數據在復雜分析工具下仍能被高效解析和還原,無法提供足夠的安全性和混淆強度。
4、因此,亟需一種更為復雜且具備高度不可預測性的混淆方法,結合動態賦值、隨機路徑選擇、不透明謂詞構造等高級策略,增強程序的控制流和數據流復雜性,確保程序邏輯的隱藏性和執行路徑的不可推導性,從而實現更強的抗分析能力與代碼保護效果。
技術實現思路
1、本發明的目的是程序在靜態分析、動態調試和符號執行等逆向分析手段下易被解析和還原,代碼的混淆強度低和執行路徑的復雜性弱等問題,提出的一種基于gilbreath猜想的動態控制流混淆方法。
2、為實現上述目的,本發明采用以下技術方案:一種基于gilbreath猜想的動態控制流混淆方法,包括以下步驟:
3、步驟s1:基于gilbreath猜想,結合環境變量動態因素,構造出滿足二態邏輯特性不透明謂詞;
4、步驟s2:解析源程序的控制流結構,構造與源程序具有相同編程語言,相同語法規則,與源程序代碼邏輯兼容的干擾代碼,對二者進行分割得到基本塊;
5、步驟s3:對控制流進行平展化處理,將設計好的不透明謂詞插入控制流,設計動態分支賦值機制。
6、具體的,步驟s1的具體流程如下所示:
7、步驟s11:gilbreath猜想:對任意一個從小到大排列的素數序列,依次計算相鄰數的差值,重復這一過程,每行的首項始終為1;利用動態素數生成算法pgen(n)生成不超過n的素數序列p,設p={p1,p2,p3,…,pn}為按遞增順序排列,其中n由用戶輸入得到,pi表示第i個素數;
8、步驟s12:基于所獲得的素數序列p,定義第k層的差值序列為dk,其中d0=p0;第一層差值序列d1由素數序列的相鄰元素兩兩相減得到:
9、d1={p2-p1,p3-p2,…,pn-pn-1};
10、步驟s13:對d1繼續執行相同的操作,計算更高層次的差值序列;k層差值序列定義為:dk[i]=|dk-1[i+1]-dk-1[i]|,i=1,2,…,n-k;該過程持續進行,直到序列僅剩下一個元素;
11、步驟s14:在迭代計算完成后,對最后一個元素進行校驗,并結合環境綁定策略,以確保程序僅能在指定環境下運行,具體而言,首先計算基于環境特征的哈希值h(env_key),該值由硬件指紋、系統配置信息共同決定,即h(env_key)=hash(硬件指紋||系統配置),由此可以構造出不透明謂詞程序在執行時,會檢查最終差值序列的最后一個元素是否等于1,并進一步與h(env_key)進行綁定,確保程序運行環境的唯一性。
12、具體的,步驟s2的具體流程如下所示:
13、步驟s21:利用抽象語法樹結構遍歷源程序,生成源程序的抽象控制流圖,并對源程序中的分支節點、循環節點、函數調用節點和跳轉指令節點進行識別與記錄;
14、步驟s22:以程序的入口、分支、循環、函數調用、跳轉及出口等關鍵節點為界,對源程序進行切割,形成多個正確基本塊,記錄生成的正確基本塊數量為n;
15、步驟s23:構造滿足條件的干擾代碼進行s21,s22的同樣的切割操作得到多個干擾基本塊。
16、具體的,步驟s3的具體流程如下所示:
17、步驟s31:定義基本塊的類型,標記不同的基本塊的自身屬性(at),包含兩種,正常基本塊的屬性是n,干擾基本塊的屬性是d,同時給所有的基本塊打上標號;
18、步驟s32:定義基本塊四元組,標記不同的基本塊的路徑信息,由屬性(at)自身基本塊(bs)、前驅基本塊(bp)和后繼基本塊(bn)構成;當基本塊無前驅或后繼時,將對應標號設為空,若存在前驅或后繼,則記錄相應基本塊的標號;
19、步驟s33:創建一個switch結構的分發器,將有序控制流平展化為無序方式存儲,通過s1構造的gilbreath_op實現正常基本塊和干擾基本塊的結合;
20、步驟s34:程序執行時,基本塊的執行路徑np由步驟s32定義的四元組決定,當前基本塊執行之后,執行路徑np會根據當前基本塊的屬性以及后繼基本塊的標號決定執行下一個基本塊;
21、步驟s35:動態賦值np,定義一個frand-switch隨機跳轉函數;根據步驟s22獲取當前基本塊總數n,通過生成隨機數nb=rand()modn確定下一個目標基本塊;
22、步驟s36:對生成的隨機數進行校驗規則如下:1):nb對應的基本塊標號必須與當前基本塊的后繼基本塊標號一致,2)nb所代表的基本塊的屬性(at)必須與當前基本塊的屬性(at)一致,若不滿足校驗規則,則重新生成隨機數,直至匹配成功后執行相應基本塊;
23、步驟s37:該過程循環進行,直至當前基本塊無后繼基本塊時停止執行,此時,程序執行路徑已結束,所有基本塊均已執行完畢。
24、與現有技術相比,本發明的有益效果是:
25、通過基于gilbreath猜想和環境變量構造不透明謂詞,程序的執行路徑會依賴動態因素,增加路徑的隨機性和不可預測性,增強了對靜態分析,符號執行等分析手段的抵抗能力,阻止分析工具精確還原程序邏輯,提升了程序的安全性;
26、通過構造與源程序兼容的干擾代碼,并將其與源程序進行分割,能夠有效地生成多條干擾路徑,使控制流具有強烈的迷惑性,通過基于源程序構造的干擾代碼,雖然具備正常執行功能,但其控制流和邏輯結構被巧妙設計,以與真實程序路徑相似的方式生成大量偽目標路徑,從而極大增強了程序的誤導性,誤導分析工具和攻擊者難以區分真實路徑,阻止精確還原程序邏輯;
27、通過引入控制流平展化和隨機賦值機制,極大增加了程序執行路徑的隨機性,避免了靜態分析工具通過模式匹配和路徑跟蹤還原程序邏輯。提升了程序對逆向工程、動態調試的防御能力,有效防止常見的控制流恢復技術,增加逆向分析所需的時間和資源。
1.一種基于gilbreath猜想的動態控制流混淆方法,其特征在于,包括以下步驟:
2.根據權利要求1所述的一種基于gilbreath猜想的動態控制流混淆方法,其特征在于,步驟s1的具體流程如下:
3.根據權利要求1所述的一種基于gilbreath猜想的動態控制流混淆方法,其特征在于,步驟s2的具體步驟如下:
4.根據權利要求1所述的一種基于gilbreath猜想的動態控制流混淆方法,其特征在于,步驟s3的具體步驟如下: