一種基於遺傳算法的軟體代碼混淆操作選擇方法與流程
2023-06-03 04:14:11 1
本發明屬於信息安全技術領域,涉及一種基於遺傳算法的軟體代碼混淆操作選擇方法。
背景技術:
隨著軟體逆向技術的快速發展,軟體出售之後,被非授權用戶破解的可能性有所提高,一旦攻擊者通常利用靜態反彙編或動態調試等逆向工程技術對軟體的可執行程序進行分析和破解,那麼,將會盜取該軟體核心算法等智慧財產權,還可能對軟體和灌裝參數表等進行篡改,謀取利益,甚至尋找軟體中的安全漏洞,伺機利用。
軟體代碼混淆技術是防止軟體被非授權用戶破解的一個有效手段,且在軟體代碼保護中逐漸發揮越來越大的作用。軟體代碼混淆將程序代碼進行混淆處理,使得程序功能保持不變,但具體程序結構已經發生了比較大的變化,程序就轉換成難以被他人理解和修改的程序,必須付出較大的代價才能夠理解程序,這樣就極大的保護了程序本身的智慧財產權。
由於軟體代碼混淆對於軟體本身的性能會有一定程度的影響,因此,要平衡性能和混淆程度,得到滿意的代碼混淆工作。當前研究者的工作主要集中在代碼混淆方法和技術的選擇和探索方面,甚少提出平衡軟體可執行程序本身性能和代碼混淆程度的優化方法。《基於垃圾代碼的控制流混淆算法》一文中,曾經提出「當操作模塊數過大時(大於某個值m),則採用hash函數選取操作模塊,進行混淆操作,以限制混淆操作的次數,減小程序混淆後的時空開銷」的方法,但是該方法隨機性較強,在軟體代碼性能和混淆程度平衡的優化選擇方面尚有欠缺。
因此,需要提出一種優化算法,在進行軟體代碼混淆的過程中,對代碼混淆操作進行優化選擇,選擇既能對軟體代碼進行有效的充分的混淆,又能夠將對軟體性能的影響降到最低的選擇方法,提高軟體代碼混淆的功效。
技術實現要素:
本發明解決的技術問題是:克服現有技術的不足,提供一種基於遺傳算法的軟體代碼混淆操作選擇方法,實現了對軟體代碼有效的充分的混淆,同時將對軟體性能的影響降到最低,提高了軟體代碼混淆的有效性。
本發明的技術解決方案是:一種基於遺傳算法的軟體代碼混淆操作選擇方法,包括步驟如下:
(1)建立混淆操作模塊庫,所述混淆操作模塊庫由混淆操作構成,混淆操作包括控制流混淆操作、數據混淆操作以及綜合控制流混淆和數據混淆的混淆操作;
(2)找到待混淆可執行程序的入口,對待混淆可執行程序進行反彙編;
(3)對反彙編後的代碼進行遍歷,尋找其中的jump、call、xor代碼,以此作為混淆操作的加入位置;
(4)從混淆操作模塊庫中隨機選擇若干個混淆操作,將所選的混淆操作分配給各個混淆操作的加入位置,形成n種混淆操作分配方式;
(5)採用遺傳算法對n種混淆操作分配方式進行優化選擇,選擇最優的混淆操作分配方式作為本次軟體代碼混淆操作的選擇結果。
所述步驟(5)的實現方法如下:
(2.1)確定混淆操作組合為遺傳算法的特徵,對n種混淆操作分配方式進行編碼,形成n個染色體,n個染色體構成遺傳算法的種群;
(2.2)為每個染色體設定適應度,其中染色體ri的適應度為fi,fi為經過染色體ri混淆操作後的軟體代碼響應時間的倒數;
(2.3)每個染色體進行交叉或變異;
(2.4)當達到設定的遺傳代數後,選擇適應度最高的染色體rh,作為最優的混淆操作分配方式。
所述步驟(2.1)中,染色體ri={h1,h2…hj…hm},其中hj表示第j個加入位置處分配的混淆操作組合,hj可以為空。
所述步驟(2.3)中,對染色體ri進行交叉的方法如下:
從ri中隨機選取一個特徵值hj,對於該特徵值的兩邊特徵hj-1和hj+1進行交叉處理,得到交叉之後的結果;
對染色體ri進行變異的方法如下:
從ri中隨機選取一個特徵值hc,將hc的混淆操作組合變異為混淆操作模塊庫中其他混淆操作的組合,實現變異。
本發明與現有技術相比的優點在於:
(1)本發明建立了包括多種混淆實現方式的混淆操作模塊庫,根據可執行程序中加入位置的不同,形成多種混淆操作分配方式,每種混淆操作分配方式均為不同類型不同實現方式的混淆操作組合,從而能夠實現對待混淆可執行程序的充分有效混淆。
(2)本發明方法採用遺傳算法對可執行程序混淆操作的多個混淆操作分配方式,進行選擇、交叉和變異,優化選擇出對可執行程序響應時間影響最小的混淆操作分配方式,避免了隨機選擇方式的不足,使得選擇得到的軟體代碼混淆操作能夠在充分進行代碼混淆的前提下,儘可能小的影響代碼本身的運行效率,將對軟體性能的影響降到最低。
附圖說明
圖1為本發明流程圖。
具體實施方式
如圖1所示,本發明提出一種基於遺傳算法的軟體代碼混淆操作選擇方法,具體步驟包括:
(1)建立混淆操作模塊庫,混淆操作模塊庫由混淆操作構成,混淆操作包括控制流混淆操作、數據混淆操作以及綜合控制流混淆和數據混淆的混淆操作。例如,控制流混淆操作包括在程序裡面加入多餘跳轉、重新組織程序裡面的控制流等,數據混淆操作包括對變量進行重組、對數值變量進行混合變換等。
(2)找到待混淆可執行程序的入口,對待混淆可執行程序進行反彙編。
(3)對反彙編得到的代碼進行遍歷,尋找其中的jump、call、xor代碼,以此作為混淆操作的加入位置。
一種實現方式為:
(3.1)建立空的指令鍊表;
(3.2)判斷第k行程序是否為jump、call、xor指令,如果是,則將該代碼段存入指令鍊表,如果不是,則進入步驟(3.3),k的初值為1;
(3.3)判斷是否為最後一條指令,如果為否,則k的值加1,返回步驟(3.2);如果是最後一條指令,則進入步驟(4)。
(4)從混淆操作模塊庫中隨機選擇若干個混淆操作,並組合,將組合後的混淆操作分配給各個混淆操作的加入位置,形成n種混淆操作分配方式。
(5)採用遺傳算法對n種混淆操作分配方式進行優化選擇,選擇最優的混淆操作分配方式作為本次軟體代碼混淆操作的選擇結果。
採用遺傳算法對n種混淆操作分配方式進行優化選擇的具體實現方法為:
1)特徵選擇及編碼
針對遺傳算法,確定混淆操作組合為遺傳算法的特徵。
對n種混淆操作分配方式進行編碼,形成n個染色體,n個染色體構成遺傳算法的種群,ri={h1,h2…hj…hm},其中hj表示第j個加入位置處分配的混淆操作組合,hj可以為空。j∈[1,m]。m表示待混淆可執行程序需要加入混淆操作的位置數量。h1,h2…hj…hm為遺傳算法的特徵。
n個染色體構成遺傳算法的種群r,
r={r1,r2…ri…rn}
2)適應度確定
採用遺傳算法中的輪盤賭選擇方法,每一個染色體佔據虛擬輪盤中的一個扇區,各染色體佔據的扇區面積正比於適應度數值,染色體ri對應的適應度為fi,fi為經過染色體ri混淆操作後的軟體代碼響應時間的倒數,軟體代碼響應時間越長,所對應的染色體適應度越低,反之亦然。
3)特徵交叉及變異
採用簡單交叉的方法,在每個染色體中隨機設定一個交叉點,實行交叉的時候,該點前後兩個特徵進行交換,生成一個新的染色體。即,從染色體ri中隨機選取一個特徵值hj,對於特徵值的兩邊特徵hj-1和hj+1進行交叉處理,得到交叉之後的結果。
變異過程中,隨機選擇染色體ri一個特徵值hc,將hc的混淆操作組合變異為混淆操作模塊庫中其他混淆操作組合,實現變異。c∈[1,m]。
4)遺傳終止條件
預先設定遺傳代數d,經過選擇、交叉和變異操作,到規定代數d之後,選擇適應度最高的染色體rh,作為優化選擇的結果。
(5)遺傳算法結束後,rh所對應的混淆操作分配方式即為本次軟體代碼混淆操作的選擇結果。
本發明首先建立混淆操作模塊庫,然後從反彙編後的代碼中確定混淆操作的加入位置,從混淆操作模塊庫中選擇多個混淆操作,並組合,形成n種混淆操作分配方式;最後採用遺傳算法,對形成的n種混淆操作分配方式進行優化篩選,篩選出適應程度最高的混淆操作分配方式。本發明對可執行程序的代碼混淆操作進行篩選,能夠綜合考慮程序響應時間和代碼混淆程度兩個因素,在對軟體代碼進行有效充分混淆的前提下,儘量提高程序響應時間,極大的減少程序混淆對於程序執行效率的影響。
本發明說明書中未作詳細描述的內容屬本領域技術人員的公知技術。