999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于浮點數類型轉換和運算的不透明謂詞構造方法

2023-11-28 02:32:38王慶豐梁浩王亞文謝根琳何本偉
網絡與信息安全學報 2023年5期
關鍵詞:程序

王慶豐,梁浩,王亞文,謝根琳,何本偉

基于浮點數類型轉換和運算的不透明謂詞構造方法

王慶豐,梁浩,王亞文,謝根琳,何本偉

(信息工程大學信息技術研究所,河南 鄭州 450001)

隨著軟件功能的日趨復雜和網絡攻擊技術的不斷演進,軟件盜版、軟件破解、數據泄露、軟件惡意修改等惡意行為呈上升趨勢,軟件安全問題逐漸成為行業領域普遍關注的焦點和研究方向。代碼混淆是一種典型的對抗逆向工程的軟件保護技術,它能夠在保持程序原有功能不變的條件下加大攻擊者對程序進行分析和理解的難度,被廣泛應用和深入研究。現有的代碼混淆技術大多由于追求混淆效果而普遍存在性能損耗偏高、隱蔽性差等問題??刂平Y構混淆是代碼混淆技術中應用較廣泛的一種,它通過擾亂程序的控制流從而提高代碼逆向工程難度,不透明謂詞混淆是其一大分支。為了彌補現有代碼混淆技術的缺陷,提出了基于浮點數類型轉換和運算的不透明謂詞構造方法,利用計算機浮點數類型轉換和運算過程中伴隨的精度損失現象使特定條件下產生與常理相悖的運算結果,通過選擇若干個小數進行強制類型轉換、加法運算和乘法運算,基于其運算結果統計可以構造一系列不透明謂詞,實現代碼混淆功能。相較于傳統的不透明謂詞,該構造方法具有隱蔽性高、通用性好、可逆性、開銷低等優點。實驗驗證表明,該方法在大幅降低攻擊者對軟件進行逆向工程等工作速度的同時,對于符號執行等動態分析技術具有良好的抵御性能。

代碼混淆;虛假控制流;不透明謂詞;浮點數運算

0 引言

隨著信息技術的發展,軟件的應用領域越來越廣泛、功能越來越豐富、復雜性越來越高、市場規模越來越大。軟件行業規模的擴大不可避免地引入更多的軟件缺陷,根據奇安信發布的《2022中國軟件供應鏈安全分析報告》[1],每1 000行代碼就有超過6個安全缺陷。與此同時,信息技術的發展讓更多的人接觸到計算機與網絡技術,這間接導致發起攻擊的門檻降低。軟件帶來便利的同時,人們的工作與生活、社會的正常運轉等對軟件的依賴程度越來越高,相應地,攻擊者造成的軟件安全問題所產生的危害越來越大。以軟件盜版為例,全球范圍內未經授權軟件約占個人計算機軟件的37%,其總價值超過460億美元[2]。

對軟件的攻擊催生出眾多軟件保護技術,根據實現方式的不同可以分為基于硬件的保護技術和基于軟件的保護技術[3],基于軟件的保護技術主要有軟件水印、篡改防護、數據銷毀、代碼混淆。其中,代碼混淆是一種典型的對抗逆向工程的軟件保護技術,它可以通過重寫代碼中的部分邏輯或者修改標識符名稱等實現,在保持程序原有功能不變的條件下對其進行修改,加大攻擊者對程序進行分析和理解的難度[4],已被廣泛應用。圍繞代碼混淆的研究主要集中在控制結構混淆,許多研究成果處于理論階段,相關的新技術往往忽視了實用性、通用性以及性能損耗而導致難以推廣。

針對已有的基于不透明謂詞的代碼混淆技術面臨構造復雜、性能損失較大、不能抵抗符號執行代碼分析技術等問題,本文提出基于浮點數類型轉換和運算的不透明謂詞構造方法,主要貢獻如下。

1) 提出一種通過浮點數類型轉換和運算的不透明謂詞構造方法。

2) 以浮點數類型轉換和運算為理論基礎構造不透明謂詞,以此為基礎完成虛假控制流實驗,并從強度、耐受性、開銷、隱蔽性、通用性、可逆性,以及能否抵抗符號攻擊7個方面進行評估。

1 相關研究

二進制代碼是一種重要的計算機軟件存在形式,也是非常普遍的軟件分發形式。攻擊者發起攻擊在很大程度上依賴于對軟件有充分的理解和分析,這要求攻擊者必須對二進制代碼進行逆向工程。Collberg等[5]闡述了代碼混淆的概念,他們對代碼混淆技術進行了系統性的總結分類,并通過強度、耐受性和開銷3個方面對代碼混淆質量進行評估。

根據處理目標的不同,代碼混淆可以分為源代碼混淆、中間代碼混淆、字節碼混淆、二進制代碼混淆等。根據代碼混淆原理的不同,代碼混淆可以分為外形混淆、控制結構混淆、數據混淆、預防混淆等。其中,控制結構混淆是代碼混淆技術中應用最廣泛的一種,其目的是使攻擊者難以理解程序的控制流。常見的控制結構混淆技術包括虛假控制流[6]、控制流扁平化[7]、代碼虛擬化[8-12]、不透明謂詞[13-14]等。

不透明謂詞是指在混淆時插入一些條件控制語句,其中,由軟件開發者控制的條件表達式邏輯上恒真或者恒假,然而攻擊者難以判斷條件表達式的值。例如,對于任意整數,條件表達式“(+1)%2==0”恒成立,但是攻擊者無法枚舉取值范圍內的每一個值,無法簡單得出該條件表達式恒成立的結論。不透明謂詞可以與多項控制結構混淆技術結合,在控制結構混淆中占有重要地位。不透明謂詞的質量直接決定了控制結構混淆的實際效果。

常用的不透明謂詞往往基于簡單的代理定理和邏輯規則,如“(+1)%2==0”恒成立,其構造簡單,運行開銷低,因此被廣泛應用。然而,這類簡單的不透明謂詞有助于抵抗靜態分析,但對于越來越多的反混淆手段卻束手無策。因此,出現了更多的不透明謂詞構造方法,大致可以分為基于困難問題的不透明謂詞、基于密碼學的不透明謂詞和基于復雜代數運算的不透明謂詞。

Collberg等[13]提出基于別名分析問題以及并發分析問題的不透明謂詞。其中,基于別名分析問題的不透明謂詞首先構造一個復雜的動態數據結構,再構造一些指針指向這個數據結構中的元素,然后向程序代碼中插入代碼來編輯這個數據結構。在編輯時需要維護一些不變的性質,這些性質即不透明謂詞的本質。后者原理與前者類似,區別在于編輯數據結構的代碼位于并發執行的線程中。Moser等[15]提出基于3SAT(3-satisfiability)問題的不透明謂詞構造方法,該方法通過將程序中的個布爾變量構造成一個困難問題,從而構造出一個值恒定的表達式作為不透明謂詞,假設攻擊者必須先解決3SAT問題才能反混淆不透明謂詞,則其反混淆難度為解決NP困難問題的難度。但是Sheridan等[4]指出Moser等的方法所依賴的假設并不成立,攻擊者可以基于啟發式檢測策略來識別并反混淆此類不透明謂詞。Tiella等[16]基于NP困難問題中的分團問題實現構造不透明謂詞,此類不透明謂詞破解難度依賴于問題規模,而構造大規模問題將導致性能損耗嚴重,實用性差。此外,當NP問題不是最壞情況時,計算復雜度會降低,相應的安全性也會降低。

Sharif等[17]提出一種基于密碼學哈希函數的不透明謂詞構造方法,把程序中常量與變量之間的相等判斷轉換為經過哈希函數之后常量與變量的比較,并與對稱加密算法聯合起來,實現了高強度的密碼隱藏,該方法安全性高,但開銷較大,且通用性較差。Zhu等[18]提出基于余數系統的同態性來混淆代碼中的整數運算。這兩種方法安全性較高,但同樣不具備通用性。

Arboit等[19]提出利用二次剩余構造不透明謂詞簇,該方法沒有考慮到不透明謂詞的彈性,且密碼安全性較差。袁征等[14]基于同余方程生成不透明謂詞,同二次剩余構造方法一樣,這種不透明謂詞容易受到符號執行攻擊,且運算構造復雜。Wang等[20]提出基于考拉茲猜想的不透明謂詞構造方法,利用符號執行容易引起路徑爆炸的缺陷,降低符號執行反混淆的效率,該方法同樣靈活性差,容易受到特征匹配攻擊。付蒙[21]提出基于置換函數的單射性的不透明謂詞構造方法,通過使用比特向量上的置換函數,再結合函數復合的性質,可以構造關于置換函數單射性的恒等式,即不透明謂詞,該方法構造簡單,運行高效,可以作為備選的不透明謂詞構造方法。

符號執行[22]是一種軟件分析技術,也是較為流行的研究方向,在軟件測試等領域具有較好的應用場景。Ming等[23]提出符號執行與邏輯推理結合來反混淆,采用不透明謂詞的代碼混淆后的二進制程序。該方案通過動態二進制插樁平臺獲取程序執行時的匯編指令并用符號執行框架對其進行分析,對程序中的每個謂詞進行反向切片,生成執行到謂詞所在路徑的約束條件,最終通過約束求解和邏輯推理即可正確識別不透明謂詞。針對只含有簡單路徑約束的不透明謂詞,該方法能實現零誤報率的不透明謂詞檢測,且運行效率高。Yadegari等[24]提出基于污點分析和符號執行的反混淆技術。Bardin等[25]提出有限后向動態符號執行來反混淆不透明謂詞混淆。以上基于符號執行的代碼反混淆受限于約束求解器,無法應對含有復雜路徑約束的代碼混淆。隨著以符號執行的動態分析技術應用于代碼反混淆,能抵抗符號執行攻擊的代碼混淆技術研究逐漸增多。例如,Banescu等[26]提出抵抗符號執行攻擊的代碼混淆方法能夠將符號執行攻擊的速度降低4個數量級,但這種方法只能用于混淆循環語句,實用性較低。

綜上,基于困難問題的不透明謂詞往往混淆程序高、隱蔽性好,但是構造復雜、開銷較大、難以與原生代碼融合。基于密碼學的不透明謂詞安全性較高,但不具備通用性?;趶碗s代數運算的不透明謂詞往往靈活性較差,容易受到軟件動態分析技術攻擊以及特征匹配攻擊。

2 本文方法

2.1 精度損失現象

常用的數字包括整數和分數,兩者的集合稱為有理數。其中整數可以看作分母為1的分數,因此可以說有理數由分數組成。有理數既可以用分數表示,又可以用小數表示,其中小數分為有限小數和無線循環小數。任意分數一定可以轉換為有限小數或無線循環小數,反之亦然[27]。全體有理數的集合為有理數集,它是無限集合。將有理數按照大小進行排序后,任意兩個有理數之間必然存在其他有理數,即有理數具有稠密性。借助數軸來理解這一概念,數軸上任意兩個點相連形成一個線段,無論這條線段有多短,在其上一定能找到一個新的有理數。

浮點類型是編程語言中一種基本數據類型,高級語言中浮點類型的存儲方式源自1985年出現的IEEE-754標準。根據該標準,一個二進制浮點數由符號位、指數位以及尾數部分組成。

高級編程語言在設計基本數據類型時往往需要平衡取值范圍和所占用的存儲空間。在C語言中,float數據類型在內存中的存儲共占用4 byte,其中指數位占用8 bit,尾數部分占用23 bit。double數據類型在內存中的存儲共占用8 byte,其中指數部分占用11 bit,尾數部分占用52 bit。因此float數據類型理論上最多能表達232個數字,而double數據類型理論上最多能表達264個數字,即無論是float還是double數據類型都只能表示有限個數字,且精度是有限的。float和double數據類型有限的精度導致其在運算過程中可能出現嚴重的錯誤。

float和double數據類型表示數據的范圍是有限的,而有理數是無限集合,每一個float或double類型變量都對應無數個有理數,它們的分布范圍可以表示為(?e1,+e2),其中e1和e2都是非常小的值。任意兩個不等的(?e1,+e2)范圍內的變量1和2使用float數據類型表達后是相等的。如果其中一個數字位于邊界附近,那么一點小小的擾動就可能導致其落在(?e1,+e2)范圍外。以十進制小數舉例,假設一個數據類型只有2個有效的小數位,所有在[1.665,1.674)范圍內的數字經過四舍五入都等于1.67,但是0.001的變量就可以讓1.674四舍五入變成1.68。

浮點數運算出現精度損失主要有兩個原因:①強制類型轉換,double類型變量轉float類型會損失精度;②浮點數數學運算,如0.1加0.6得到的實際計算結果不等于0.7(不完全相等)。由于浮點數表示一個范圍內的有理數,所以出現精度損失并不意味著計算結果一定出現錯誤。只有經過計算才可以確定某個或某幾個浮點數經過類型轉換或運算后的計算結果是否與邏輯上的計算結果相等。因此,可以將浮點數的類型轉換或運算作為一種不透明謂詞引入代碼混淆。接下來用兩個例子說明。

如圖1所示,定義double類型變量double1并給double1賦值0.1,然后定義float類型變量float1,隨后將變量double1賦值給變量float1,最后將float1賦值給double類型變量double2。此時的變量double1和double2的值在邏輯上是相等的,而且輸出到控制臺的結果都是0.10000。然而以二進制格式打印的double1結果是0, 01111111011, 100110011001100110011001100110 0110011001100110011010,以二進制格式打印的double2結果是0, 01111111011, 10011001100110 01100110100000000000000000000000000000,所以變量double1的值小于變量double2。通過仔細觀察整個過程,可以發現在將double1賦值給float1時發生了尾數截斷并進1,因此在這個過程中浮點數的值變大。

圖1 浮點數類型轉換精度損失示意

Figure 1 Illustration of the loss of precision in floating-point type conversion

圖2 浮點數加法計算結果偏差示意

Figure 2 Illustration of the deviation of the result of floating-point addition calculation

如圖2和圖3所示,定義3個float類型變量float1、float2、float3,并分別給它們賦值0.1、0.6、0.7。再定義一個float類型變量float_sum,并將float1和float2相加的結果賦值給它。此時的float_sum和float3邏輯上是相等的,而且輸出到控制臺的結果都是0.70000。然而,以二進制格式打印的float_sum結果是0, 01111110, 01100110011001100110100,其計算過程如圖2所示,0.1的尾數計算時需要移位4次,0.6和0.7的尾數計算時需要移位1位,因此移位相差3位,尾數截斷時發生了進1,如圖3所示。以二進制格式打印的float3結果是0, 01111110, 01100110011001100110011,所以float_sum的值大于float3。

圖3 浮點數加法計算結果偏差原理示意

Figure 3 Illustration of the principle of deviation of the result of floating-point addition calculation

2.2 不透明謂詞構造方法

根據上述計算過程中觀察到的現象,可以對若干浮點數對進行加法和乘法運算,并統計其結果用作后續浮點數運算。如表1和表2所示,分別是0.1到0.9這9個數字進行加法和乘法運算后實際結果和邏輯結果比較。例如,表1中0.1對應的行和0.6對應的列(第一行第六列的)“>”符號表示在計算機浮點數運算中,0.1+0.6的計算結果大于其理論值0.7。

表1 浮點數加法運算結果示例

表2 浮點數乘法運算結果示例

在驗證浮點數類型轉換與運算構造不透明謂詞構造可行后,可以通過算法使其工程化。首先構造浮點數加法運算、乘法運算的浮點數對,這些浮點數對滿足計算結果與邏輯值不等。此外,需要收集滿足浮點數類型轉換后精度損失明顯的浮點數。在完成準備工作后,即可開始不透明謂詞混淆。首先收集可以進行不透明謂詞混淆的點,然后決定采用哪一種浮點數混淆方式,并進行混淆。具體代碼混淆原理如圖4所示的虛假控制流示意,每一個順序執行的基本塊都可以作為不透明謂詞混淆的點,在它前面插入一個if語句,浮點數類型轉換與運算不透明謂詞作為if語句的判斷條件,使原順序執行的基本塊作為條件為真的跳轉分支,再構造一個虛假的基本塊作為條件恒假的跳轉分支。經過虛假控制流處理后的基本塊控制流結構明顯比原基本塊復雜,這將極大增加對代碼進行逆向分析的難度。

圖4 虛假控制流示意

Figure 4 Illustration of bogus control flow

基于浮點數類型轉換和運算的不透明謂詞混淆算法如算法1所示。

算法1 基于浮點數類型轉換和運算的不透明謂詞混淆算法

輸入 待混淆的LLVM中間代碼target_code

輸出 混淆后的LLVM中間代碼result_code

開始

1) Add_Array={<1,2>, <3,4>, ...}; // 構造浮點數加法參數

2) Multi_Array={<1,2>, <3,4>, ...}; // 構造浮點數乘法參數

3) Cast_Array={1,2,3,4, ...}; // 構造浮點數類型轉換參數

4) ...

5) EntryPoint_Array=Get_EP(target_code); // 找出所有的不透明謂詞插入點

6) for each entrypoint in Entrypoint // 遍歷所有的插入點

7) if Execute_Insert(rand_number) // 根據概率決定是否執行插入

8) if Select_Add() // 選擇浮點數加法作為不透明謂詞

9) Execute_Add(Add _Array);

10) else if Select _Multi() // 選擇浮點數乘法作為不透明謂詞

11) Execute_Multi(Multi _Array);

12) else // 選擇浮點數類型轉換作為不透明謂詞

13) Execute_Cast(Cast _Array);

14) end if

15) end if

16) end for each

17) end

3 實驗與評估

本節對提出的基于浮點數類型轉換和運算的不透明謂詞構造方法進行實驗和評估。實驗圍繞6個基準測試程序進行基準測試,對每一個基準測試程序源代碼,將其源代碼編譯成4個版本的可執行文件?;鶞蕼y試包括程序執行時間、程序大小、程序相似度比較。完成基準測試后,根據基準測試結果從安全性、高效性、隱蔽性、通用性4個方面對提出的基于浮點數類型轉換和運算的不透明謂詞構造方法進行評估。

3.1 實驗過程

在實驗展開之前,需要完成實驗準備工作,包括實驗環境構建和基準測試程序修改。實驗環境包括程序編譯執行環境和程序相似度比較環境,兩個環境均通過虛擬機實現。程序編譯執行環境安裝ubuntu20.04操作系統,為其分配4 GB內存和20 GB磁盤。最后在該環境中安裝LLVM12.0.1,用它編譯基準測試程序。LLVM項目是模塊化、可重用編譯器和工具鏈技術的集合。開發人員可以借助LLVM將C++代碼編譯成LLVM中間代碼,并在中間代碼的基礎上進行代碼優化,最后生成二進制文件。程序相似度比較環境安裝Windows10操作系統,為其分配4 GB內存和60 GB磁盤,最后在該環境中安裝IDA pro7.5和BinDiff5.0用于測量程序相似度。基準測試程序的源代碼默認采用gcc進行編譯,因此需要給它們重新編寫采用LLVM編譯的Makefile來生成實驗需要的可執行文件。

IDA pro(簡稱IDA)是Hex-Rays公司出品的一款靜態反編譯軟件,在程序分析過程中發揮著舉足輕重的作用。IDA pro是交互式的、可編程的、可擴展的、多處理器的,支持Windows/Linux/ macOS等平臺文件格式。IDA pro已經成為分析惡意代碼的標準和攻擊研究領域的重要工具。BinDiff是一個二進制文件比較工具,可以協助安全研究人員和工程師快速定位反匯編代碼中的差異和相似之處。BinDiff最早由Zynamics公司開發,該公司2011年被谷歌公司收購,隨后谷歌將BinDiff融入許多內部文件分析系統中,利用其二進制對比技術追蹤惡意程序家族。BinDiff還可以用于識別供應商提供的修補程序中的漏洞,分析多個版本相同的二進制數據,鑒別代碼被盜以及專利侵權的證據收集等。

基準測試程序包括bzip2、mcf、gobmk、sjeng、lbm、sphinx3。對于每一個基準測試程序源代碼,采用LLVM編譯環境編譯得到4個版本的可執行文件:原始可執行文件、虛假控制流混淆處理后的可執行文件、采用浮點數運算作為不透明謂詞的虛假控制流混淆處理后的可執行文件、采用浮點數類型轉換和運算作為不透明謂詞的虛假控制流混淆處理后的可執行文件。在完成編譯的基礎上,統計這些程序的文件大小、執行時間,以及兩種虛假控制流程序與原始程序的相似度比較。

3.1.1 基準測試程序的運行時間

本節采用time命令測量基準測試程序運行時間,為了減小誤差,將每一個可執行文件執行10次取其平均值作為其運行時間。表3為基準測試程序的運行時間,其中每一列包含指定基準測試程序運行時間。4行數據分別表示origin、origin+ bcf1、origin+bcf2、origin+bcf3這4個版本的基準測試程序數據,其中origin表示直接編譯基準測試程序得到的可執行文件,origin+bcf1表示采用基準測試程序經過示例虛假控制流混淆處理后的可執行文件,origin+bcf2表示基準測試程序經過采用浮點數運算作為不透明謂詞的虛假控制流混淆處理后的可執行文件,origin+bcf3表示基準測試程序經過采用浮點數類型轉換和運算作為不透明謂詞的虛假控制流混淆處理后的程序。每一個版本的基準測試程序運行時間信息包括real time、user time和sys time,三者分別表示程序實際運行時間、程序用戶態運行時間、程序系統態運行時間。通過表3的數據可知:用戶態運行時間加上系統態運行時間略小于程序實際運行時間;基準測試程序4個版本的可執行文件的系統態運行時間基本一致;所有基準測試程序的4個可執行文件運行時間大小均滿足origin

表3 基準測試程序運行時間

3.1.2 基準測試程序的可執行文件大小

表4為基準測試程序的可執行文件大小。通過表中數據可知,所有基準測試程序的4個可執行文件大小滿足origin

3.1.3 基準測試程序文件相似度比較

表5為基準測試程序的原始可執行文件與經虛假控制流混淆的可執行文件相似度比較。通過表中數據可知,除了sphinx3,另外5個基準測試程序采用不同的虛假控制流混淆方法處理后的可執行文件與原始可執行文件相似度基本一致。

3.2 實驗分析與評估

對不透明謂詞的混淆一般從強度、耐受性、開銷、隱蔽性、通用性方面進行評價,這里再增加一個指標:可逆性。此外,近年來符號執行技術開始被用于攻擊不透明謂詞混淆,且具有較好的效果,因此將它也作為一個評估方法。

強度是指混淆給原始程序增加了多少復雜度。軟件復雜度評估有多種方法,McCabe QA是其中一個比較常用的方法,McCabe復雜度包括圈復雜度、基本復雜度、模塊設計復雜度等。圈復雜度是評估軟件復雜度的一個重要標準,可以用于衡量軟件的復雜度和質量。不透明謂詞方法只引入3行代碼,基本上不會改變軟件復雜度,即對強度基本沒有影響。

耐受性是指變換后的程序對使用自動去混淆工具進行攻擊的抵抗度。本文方法最大的弱點就是攻擊者可以通過實際執行得到不透明謂詞的真實值,這是大部分不透明謂詞構造方法的固有缺陷。如果將該方法結合其他代碼混淆方法,能較大程度上避免這一缺陷,同時只引入非常小的開銷。

開銷是指經過混淆變換后的程序相較原來的程序所產生的開銷,如程序執行時間、程序所需存儲空間等。如表3所示,本文方法在運行時間上明顯優于LLVM提供的不透明謂詞示例。如表4所示,本文方法在可執行文件所需存儲空間方面明顯優于LLVM提供的不透明謂詞示例。實際上,這是因為本文方法本身產生3條指令,而LLVM提供的不透明謂詞示例中間代碼產生17條指令,因此無論是執行時間還是所需存儲空間,本文方法都有較大的優勢。

表4 可執行文件大小

表5 虛假控制流混淆前后可執行文件相似度比較

隱蔽性是指不透明謂詞不具備明顯的特征,可以用于衡量采用不透明謂詞的混淆抵抗攻擊者人工分析和特征匹配分析的能力?,F有的大部分不透明謂詞構造技術往往具備明顯的特征,如基于3SAT問題的不透明謂詞涉及較多的布爾操作,文獻[20]提出的啟發式檢測策略能有效識別該不透明謂詞構造技術。浮點數是C/C++、Java、Python、PHP、JavaScript等主流高級編程語言的基本數據類型,對其進行類型轉換或運算不需要額外的支持,因此高級編程語言原生支持浮點數及浮點數類型轉換或運算。并且,本文不透明謂詞方法具有非常簡短的代碼,因此具有良好的隱蔽性。

通用性是指不透明謂詞能用于多種編程語言,能運行于多種操作系統等。浮點數是C/C++、Java、Python、PHP、JavaScript等主流高級編程語言的基本數據類型,因此無論在任何操作系統上,本文不透明謂詞方法都支持主流的高級編程語言。從程序生成過程的角度來看,本文方法不僅僅可以應用于源代碼,還可以應用于以LLVM IR為代表的中間代碼以及可執行文件。綜上,本文方法具有良好的通用性。

可逆性是指使用軟件所有者能否對經過混淆的軟件進行反混淆。任何一個軟件都有缺陷,經過混淆后的軟件同樣如此。如果直接對混淆后的軟件進行分析,則安全分析人員同樣要面臨軟件逆向等方面的障礙。本文不透明謂詞方法具有可逆性,只要提前構造好浮點數計算范圍,就可以通過技術手段快速對混淆后的程序進行反混淆。

近年來,基于符號執行的程序分析技術被用于自動化反混淆不透明謂詞混淆。與此同時,大部分不透明謂詞,如條件表達式“(+1)%2== 0”,往往具有固定的值,無法抵抗符號執行攻擊。本文的不透明謂詞方法并不具備固定的值,能夠抵抗符號執行等軟件動態分析手段。

4 結束語

本文提出一種基于浮點數類型轉換和運算的不透明謂詞混淆方法,利用計算機進行浮點數運算精度有限的原理構造不透明謂詞。該方法可以在權衡軟件安全性要求和軟件性能,在產生較低開銷的情況下增加對軟件的保護;具有可逆性,在特殊情況下可以將混淆后的程序恢復;不僅能抵抗靜態分析,還能在一定程度上抵抗動態分析,如所提方法生成的不透明謂詞并不具備固定的值,能抵抗符號執行攻擊。所提方法的可逆性是優點,也是容易被破解的缺點。因此后續需要構造不透明謂詞混淆框架,所提方法與眾多不透明謂詞方法組合并在混淆時隨機選擇使用,擴大不透明謂詞的熵,增大攻擊者破解的枚舉難度。

[1] 奇安信代碼安全實驗室. 2022 中國軟件供應鏈安全分析報告[EB].

Qi An Xin Code Security Lab. 2022 China software supply chain security analysis report[EB].

[2] BSA Global Software Survey. Software management: security imperative, business opportunity[EB].

[3] 張漢寧. 基于精簡指令集的軟件保護虛擬機技術研究[D]. 西安: 西北大學, 2010.

ZHANG H N. Research on software protection virtual machine technology based on reduced instruction set[D]. Xi'an: Northwest University, 2010.

[4] SHERIDAN B, SHERR M. On manufacturing resilient opaque constructs against static analysis[J]. Springer International Publishing, 2016.

[5] COLLBERG C, THOMBORSON C, LOW D. A taxonomy of obfuscating transformations[J]. Technical Report, 1997.

[6] 李成揚, 黃天波, 陳夏潤, 等. LLVM中間語言的控制流混淆方案[J]. 計算機工程與應用, 2023, (4): 1-8.

LI C Y, HUANG T B, CHEN X R, et al. Control flow obfuscation scheme for LLVM intermediate languages[J]. Computer Engineering and Applications, 2023, (4): 1-8.

[7] LáSZLó T, KISS A . Obfuscating C++ programs via control flow flattening[R]. 2009.

[8] ROLLES R. Unpacking virtualization obfuscators[C]//Proceedings of the 3rd USENIX Conference on Offensive Technologies. 2009.

[9] KUANG K, TANG Z, GONG X, et al. Exploiting dynamic scheduling for VM-based code obfuscation[C]//2017 IEEE Trustcom/BigDataSE/I SPA. 2017.

[10] 陳耀陽. 基于代碼混淆的軟件保護技術研究與實現[D]. 南京: 南京郵電大學, 2021.

CHEN Y Y. Research and implementation of software protection technology based on code obfuscation[D]. Nanjing: Nanjing University of Posts and Telecommunications, 2021.

[11] 房鼎益, 張恒, 湯戰勇, 等. 一種抗語義攻擊的虛擬化軟件保護方法[J]. 工程科學與技術, 2017, 49(1): 159-168.

FANG D Y, ZHANG H, TANG Z Y, et al. DAS-VMP: a virtual machine-based software protection method for defending against semantic attacks[J].Advanced Engineering Sciences, 2017, 49(1): 159-168.

[12] 湯戰勇, 李光輝, 房鼎益, 等. 一種具有指令集隨機化的代碼虛擬化保護系統[J]. 華中科技大學學報(自然科學版), 2016, 44(3): 28-33.

TANG Z Y, LI G H, FANG D Y, et al. Code virtualized protection system with instruction set randomization[J]. Journal of Huazhong University of Science and Technology(Natural Science Edition), 2016, 44(3): 28-33.

[13] COLLBERG C, THOMBORSON C, LOW D. Manufacturing cheap, resilient, and stealthy opaque constructs[C]//Proceedings of the 25th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL ’98). 1998: 184-196.

[14] 袁征, 馮雁, 溫巧燕, 等. 構造一種新的混淆Java程序的不透明謂詞[J]. 北京郵電大學學報, 2007, 30(6): 103-106.

YUAN Z, FENG Y, WEN Q Y, et al. Manufacture of a new opaque predicate for java programs[J]. Journal of Beijing University of Posts and Telecom, 2007, 30(6): 103-106.

[15] MOSER A, KRUEGEL C, KIRDA E. Limits of static analysis for malware detection[C]//Twenty-Third Annual Computer Security Applications Conference (ACSAC 2007). 2007.

[16] TIELLA R, CECCATO M. Automatic generation of opaque constants based on the k-clique problem for resilient data obfuscation[C]//2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER). 2017: 182-192.

[17] SHARIF M, LANZI A, GIFFIN J, et al. Impeding malware analysis using conditional code obfuscation[C]//Proceedings of the Network and Distributed System Security Symposium (NDSS 2008). 2008.

[18] ZHU W, THOMBORSON C. A provable scheme for homomorphic obfuscations in software security[R]. ACTA Press, 2005.

[19] ARBOIT G. A method for watermarking Java programs via opaque predicates[C]//Proc Int Conf Electronic Commerce Research, 2002.

[20] WANG Z, MING J, JIA C, et al. Linear obfuscation to combat symbolic execution[C]//European Symposium on Research in Computer Security. 2011.

[21] 付蒙. 抵抗符號執行的不透明謂詞混淆技術研究[D]. 西安: 西安電子科技大學, 2019.

FU M. Research on opaque predicate-based obfuscations against symbolic execution[D]. Xi’an: Xidian University, 2019.

[22] KING J C. Symbolic execution and program testing[J]. Communications of the ACM, 1976, 19(7): 385-394.

[23] MING J, XU D, WANG L, et al. LOOP: logic-oriented opaque predicate detection in obfuscated binary code[C]//Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security. 2015: 757-768.

[24] YADEGARI B, JOHANNESMEYER B, WHITELY B, et al. A generic approach to automatic deobfuscation of executable code[C]//2015 IEEE Symposium on Security and Privacy. 2015: 674-691.

[25] BARDIN S, DAVID R, MARION J Y. Backward-bounded DSE: targeting infeasibility questions on obfuscated codes[C]//2017 IEEE Symposium on Security and Privacy (SP). 2017: 633-651.

[26] BANESCU S, COLLBERG C, GANESH V, et al. Code obfuscation against symbolic execution attacks[C]//Proceedings of the 32nd Annual Conference on Computer Security Applications. 2016: 189-200.

[27] 王國俊. 有理數、無理數與實數[J]. 數學的實踐與認識, 1998(3): 258-266.

WANG G J . Rational, irrational and numbers [J]. Mathematics in Practice and Theory, 1998 (3): 258-266.

Constructing method of opaque predicate based ontype conversion and operation of floating point numbers

WANG Qingfeng, LIANG Hao, WANG Yawen, XIE Genlin, HE Benwei

Information Technology Research Institute, Information Engineering University, Zhengzhou 450001, China

With the increasing complexity of software functions and the evolving technologies of network attacks, malicious behaviors such as software piracy, software cracking, data leakage, and malicious software modification are on the rise. As a result, software security has become a focal point in industry research. Code obfuscation is a common software protection technique used to hinder reverse engineering. It aims to make program analyzing and understanding more difficult for attackers while preserving the original program functionality. However, many existing code obfuscation techniques suffer from performance loss and poor concealment in pursuit of obfuscation effectiveness. Control flow obfuscation, particularly opaque predicate obfuscation, is widely used to increase the difficulty of code reverse engineering by disrupting the program’s control flow. A method was proposed to address the limitations of existing code obfuscation techniques. It utilized the phenomenon of precision loss that occurred during type conversion and floating-point number operations in computers. Under certain conditions, this method produced operation results that contradict common sense. By performing forced type conversion, addition, and multiplication with selected decimal numbers, a series of opaque predicates can be constructed based on the statistical analysis of their operation results. This approach achieved code obfuscation with high concealment, good generality, reversibility, and low overhead compared to traditional opaque predicates. Experimental verification demonstrates that this method significantly slows down attackers’ reverse engineering efforts and exhibits good resistance to dynamic analysis techniques such as symbolic execution.

code obfuscation, bogus control flow, opaque predicates, floating point operations

The National Natural Science Foundation of China (62002383)

王慶豐, 梁浩, 王亞文, 等. 基于浮點數類型轉換和運算的不透明謂詞構造方法[J]. 網絡與信息安全學報, 2023, 9(5): 48-58.

TP393

A

10.11959/j.issn.2096?109x.2023068

王慶豐(1995?),男,河南周口人,信息工程大學助理研究員,主要研究方向為擬態防御和軟件多樣化。

梁浩(1987? ),男,河南鄭州人,信息工程大學副研究員,主要研究方向為網絡空間主動防御、內生安全。

王亞文(1990?),男,河南鄭州人,信息工程大學助理研究員,主要研究方向為擬態防御和云計算。

謝根琳(1999? ),男,河北辛集人,信息工程大學碩士生,主要研究方向為網絡空間安全和軟件多樣化。

何本偉(1998? ),男,安徽滁州人,信息工程大學碩士生,主要研究方向為網絡空間安全和軟件多樣化。

2022?09?05;

2013?01?30

梁浩,lhmailhappy@163.com

國家自然科學基金(62002383)

WANG Q F, LIANG H, WANG Y W, et al. Constructing method of opaque predicate based on type conversion and operation of floating point numbers[J]. Chinese Journal of Network and Information Security, 2023, 9(5): 48-58.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 色视频久久| 亚洲an第二区国产精品| 欧美亚洲一区二区三区在线| 亚洲综合色婷婷| 欧美在线网| 欧美精品亚洲精品日韩专区| 成人福利在线视频| Jizz国产色系免费| 中文字幕永久在线观看| 国产福利在线观看精品| 免费一级全黄少妇性色生活片| 日韩av无码DVD| 伊在人亞洲香蕉精品區| 美女视频黄频a免费高清不卡| 久久永久免费人妻精品| 不卡视频国产| 五月综合色婷婷| 国产福利免费在线观看| 婷婷午夜天| 国产成人狂喷潮在线观看2345| 亚洲中字无码AV电影在线观看| 国产浮力第一页永久地址| 成人另类稀缺在线观看| 亚洲欧美日韩综合二区三区| 亚洲中文字幕手机在线第一页| 亚洲国产精品一区二区高清无码久久 | 欧美色图第一页| 国产精品视频观看裸模| 无码一区18禁| 伊人久久福利中文字幕| 超清人妻系列无码专区| 精品少妇人妻av无码久久| 亚洲男人的天堂久久精品| 亚洲欧美日韩中文字幕一区二区三区| 欧亚日韩Av| 色综合激情网| 亚洲二三区| 久久久久青草线综合超碰| av天堂最新版在线| 国产欧美日韩专区发布| 19国产精品麻豆免费观看| 欧美 亚洲 日韩 国产| 精品黑人一区二区三区| 亚洲一区二区三区麻豆| 最新亚洲人成网站在线观看| 国产高清又黄又嫩的免费视频网站| 91视频精品| 日韩成人在线视频| 日本爱爱精品一区二区| 国产一级在线观看www色| 亚洲h视频在线| 一本一道波多野结衣一区二区| 国产a v无码专区亚洲av| 国产国模一区二区三区四区| 亚洲视频四区| 精品一区二区三区视频免费观看| 久久国产精品77777| 欧美精品亚洲精品日韩专区| 99久久精品免费看国产免费软件| 国产日韩精品欧美一区喷| 99久久精品无码专区免费| 精品無碼一區在線觀看 | 亚洲欧美在线看片AI| 亚洲成a人在线观看| 色妞永久免费视频| 国产91精选在线观看| 国产精品爽爽va在线无码观看 | 性视频一区| 日韩无码黄色| 亚洲AV人人澡人人双人| 亚洲中文字幕精品| 99一级毛片| 中文纯内无码H| 一级爆乳无码av| 中日韩一区二区三区中文免费视频 | 全部免费特黄特色大片视频| 国产精品欧美激情| 久久无码免费束人妻| 全部免费特黄特色大片视频| 亚洲欧美综合在线观看| 色网站在线免费观看| 亚洲人精品亚洲人成在线|