?

抵御控制流分析的Python 程序混淆算法

2021-06-29 10:33劉建
數字技術與應用 2021年5期
關鍵詞:控制流謂詞復雜度

劉建

(東莞理工學校,廣東東莞 523000)

0 引言

控制流分析是一種特殊的分析技術,通常用于對程序的控制流結構進行靜態結構分析。隨著軟件功能的增加,算法結構也變得越來越復雜,程序員們開始在程序語言中使用越來越多的分支語句[1]。為了能夠提高程序執行的效率,通過控制流分析將這些程序編譯為相對較為簡單的語言,以便程序員們能夠更好地利用和處理這些程序語言。但是這種能夠將所有程序語言變得簡單易懂的分析方法使得軟件失去了程序語言對自身算法結構的保護能力,很多黑客利用控制流分析能夠輕易地對軟件程序的安全構成威脅,因此需要對程序的控制流分析進行防御機制的構建。

在以往的算法設計中,文獻[2]通過蝙蝠優化算法對程序語言的流程結構進行了混淆計算,將其變為不易被控制流分析的語言結構。文獻[3]通過計算混淆、聚合混淆的方式反推控制流分析的結構,降低了程序被控制流分析的概率,提高了算法結構的安全性[2-3]。本文結合以上文獻設計了Python程序的混淆算法,用于低于控制流分析。

1 抵御控制流分析的Python程序混淆算法設計

1.1 加密Python程序混沌映射

混沌映射能夠使Python程序具備更高的初值敏感性,并提高算法的運算速率,但是其結構較為簡單,很容易成為控制流分析的解析缺口,因此在設計混淆算法時需要首先需要對其進行加密處理。通過混沌映射的定義式,能夠得知混沌映射的隨機性位置信息:

式(1)中,A1表示混沌系統隨機過程中的初始位置參數,An表示混沌系統隨機后的第n個節點的位置參數;δ表示初始混沌系數,其取值范圍為[1,4],且均為常數。隨著δ的系數值越來越接近最大值,其隨機位置信息的計算越復雜,經過迭代計算后的實數序列就越來越收斂,直至完全變為一個實數項[4]。在實驗過程中,可以將An取值為0.5,并將迭代次數固定在300,然后通過二項分布簡化其計算過程,實現更優化的計算方法。通常而言,在迭代30次以后,混沌映射對于Python程序的加密能力就會越來越低,直至沒有效果。

1.2 基于混沌映射設計混淆算法不透明謂詞結構

不透明謂詞是一種能夠在到達應用程序某個節點之前就明確知道其結果的構造詞。當所有不透明謂詞均為T時,該不透明謂詞就為永久的不透明謂詞;反之,若有意向不透明謂詞的結果為F時,該不透明謂詞就為半永久性不透明謂詞;若所有不透明謂詞均為F時,該算法結構為陷門不透明謂詞[5]。本文基于混沌映射構造不透明謂詞的數據結構,并插入永遠為真的不透明謂詞,可以通過如下程序:

如圖1所示,在插入不透明謂詞時,需要假設所有程序語句全部為真,并使用if-else的語句作為條件表達式,假設程序確實為真,則進行到下一項,若程序其中一項為假,則跳過該項程序語句[6]。

圖1 不透明謂詞插入程序Fig.1 Opaque predicate insertion program

1.3 抵御控制流分析算法實現

在使用混淆語句抵御控制流分析時,可以通過給定的混淆路徑將所有文件夾中的Python全部遍歷,若存在子文件夾,可以將子文件夾中的語句也搜索一遍。通過case條件語句封裝所有變量賦值函數,解決變量賦值不受控制地暴露在外的問題[7]。通過上文中的布局混淆、控制混淆來插入不透明謂詞,以此調整控制流分析的閱讀和理解順序,加深控制流分析解析算法的難度。將所有函數分為若干個大小不一的函數塊,并結合上文中的不透明謂詞插入算法,將每一個函數塊中的不透明謂詞全部插入到控制流閱讀流程中,并將這些過程壓縮在同一個文件夾中,放置在相應的位置。若最后階段所有的Python都沒有明顯的bug程序錯誤,則可以表示針對該控制流分析的混淆算法設計成功,但是一旦目錄是發生改變,則表示該混淆算法沒有成功抵御控制流分析程序的解譯。

2 實驗設計

2.1 實驗準備

本實驗主要用于測試上文中設計的程序混淆算法是否能夠抵御控制流的分析作用,并將其與傳統的兩種算法進行比較,通過抵御靜態攻擊安全性、抵御動態攻擊安全性來判斷其算法結構對于控制流分析的抵抗能力[8]。使用Python作為實驗平臺的編程語言,將Intel(R)CPU 2340@2.45Hz作為CPU處理器,其運行內存為4GB,儲存空間大小為600G。首先編寫一段流程較為復雜的算法語言,使用文中的混淆算法與現有的兩種混淆算法分別對其進行改造優化,然后使用控制流分析分別在靜態環境以及動態環境下攻擊該算法程序。通過程序混淆前后的圈復雜度判斷該算法的混淆力度。

2.2 實驗結果分析

為了得到更具科學性的實驗結果,將上述實驗流程重復5 次,每一次都使用不同的算法程序,分別對其進行混淆與控制流分析。使用公式計算混淆前與混淆后的圈復雜度百分比:

式(2)中,α表示混淆前與混淆后的圈復雜度百分比;M表示混淆前的圈復雜度;N表示混淆后的圈復雜度。根據上述實驗步驟與計算公式得到的實驗結果如表1所示。

表1 程序混淆前后圈復雜度Tab.1 Cycle complexity before and after program confusion

如表1所示,在程序混淆前后的圈復雜度計算中,通過五次實驗能夠得到混淆前與混淆后的復雜度參數,混淆后的圈復雜度普遍高于混淆前的圈復雜度,且文中算法測得的百分比均低于常規的兩種算法。由此可知,本文基于Python程序的混淆算法在抵御控制流分析的過程中擁有較常規算法更強的防御能力,能夠更好地抵御控制流分析的解析。

3 結語

本文對混沌映射進行了優化處理,并構造插入了不透明謂詞條件,極大地加強了Python程序中混淆算法對控制流分析的抵御能力。通過實驗計算了Python程序混淆前后的圈復雜度,并通過百分比的計算明確了相較于傳統的兩種算法,文中算法具備更強的防御能力。

猜你喜歡
控制流謂詞復雜度
工控系統中PLC安全漏洞及控制流完整性研究
被遮蔽的邏輯謂詞
——論胡好對邏輯謂詞的誤讀
抵御控制流分析的程序混淆算法
黨項語謂詞前綴的分裂式
一種低復雜度的慣性/GNSS矢量深組合方法
求圖上廣探樹的時間復雜度
某雷達導51 頭中心控制軟件圈復雜度分析與改進
也談“語言是存在的家”——從語言的主詞與謂詞看存在的殊相與共相
出口技術復雜度研究回顧與評述
基于控制流隱藏的代碼迷惑
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合