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

基于融合編譯的軟件多樣化保護方法

2020-12-18 00:15:04熊小兵舒輝康緋
網絡與信息安全學報 2020年6期
關鍵詞:程序融合方法

熊小兵,舒輝,康緋

基于融合編譯的軟件多樣化保護方法

熊小兵,舒輝,康緋

(信息工程大學,河南 鄭州 450001)

針對現有主流保護方法存在的特征明顯、模式單一等問題,以LLVM開源編譯框架為基礎,提出了一種基于融合編譯的軟件多樣化保護方法,該方法將目標軟件進行隨機化加密處理,并在編譯層面與掩護軟件進行深度融合,通過內存執行技術,將加密后的目標軟件進行解密處理,進而在內存中以無進程的形式執行,利用掩護代碼的多樣性、融合策略的隨機性來實現目標軟件的多樣化保護效果。選取了多款常用軟件作為測試集,從資源開銷、保護效果、對比實驗等多個角度對所提方法進行了實例測試,從測試結果可以看出,所提方法資源開銷較小,相較于混淆、加殼等傳統方法,所提方法在抗靜態分析、抗動態調試等方面具有較大優勢,能有效對抗主流代碼逆向分析和破解手段。

軟件保護;多樣化;融合編譯;內存執行;底層虛擬機;中間表示

1 引言

軟件是互聯網中各類信息系統的核心組成部分,與實體商品不同,軟件容易被復制、篡改、破解和傳播,造成互聯網上存在大量盜版軟件,互聯網用戶多在不知情的情況下對盜版軟件進行下載或傳播[1],這給軟件開發者的合法權益造成了巨大損失,在很大程度上降低了軟件開發者的積極性,不利于互聯網生態的良性健康發展[2]。如何對開發的軟件代碼進行有效保護,是互聯網發展過程中一直存在的關鍵問題,特別是在軟件逆向分析技術飛速發展的嚴峻形勢下,大力發展軟件保護技術顯得尤為重要和迫切[3-4],亟需研究先進的軟件保護技術和方法,來提高軟件的抗逆向、抗破解能力。

2 常用軟件保護技術

軟件一般以二進制文件形態發布,軟件盜版者在無法準確獲取軟件源碼的情況下,常采用軟件逆向方法對軟件的實現過程進行分析,找出破解點,去除軟件注冊碼、軟件加密等保護機制,達到軟件破解目的。常用的軟件逆向手段有靜態逆向分析和動態調試分析。靜態逆向分析主要是指利用IDA等反匯編、反編譯軟件,提取出目標軟件的匯編代碼,甚至是源碼,分析出軟件的實現機制和關鍵代碼,進而在二進制層面對其進行篡改破解。動態調試分析是指利用OllyDBG、WinDBG等動態調試工具,對軟件的動態執行過程進行指令級跟蹤分析,定位關鍵代碼段,進而對其進行篡改破解。

為了防止合法軟件被盜版,開發者一般會采用軟件保護技術對軟件進行處理,主要包括基于硬件和基于軟件的保護方式。軟件開發者對軟件保護技術有一個典型誤區,認為無法被破解的軟件保護技術才是可行的。實際上,根本不存在無法破解的軟件,無論采用何種軟件保護技術,軟件都有被破解的風險。所有軟件保護技術的核心都是盡可能加大軟件被破解的難度(即增大軟件的抗逆向破解能力),使逆向分析人員難以在短時間內分析出軟件工作機理和組織結構。目前,較為常用的軟件保護技術有加殼保護、代碼混淆保護等。

2.1 軟件加殼保護

大自然中植物的殼用來保護種子,計算機軟件的殼是一段專門用來保護軟件不被非法篡改或反編譯的代碼或程序[5]。加殼是軟件保護的常用手段,一般利用特殊的算法,對EXE、DLL或OCX程序中的資源進行壓縮和加密,類似壓縮軟件的效果,只不過被壓縮后的程序,仍然可以獨立運行,在內存中完成解密和解壓縮操作[5]。加殼程序的原始代碼在文件中一般被加密處理,無法查看源代碼,運行后在內存中還原,這樣就可以有效地防止要保護的程序被靜態反編譯,同時可以防止原始程序被非法修改[6]。

加殼后程序運行,殼會附加在原始程序上,通過Windows加載器載入內存,先于原始程序得到執行控制權[7]。殼程序在執行過程中對原始程序進行解密、解壓縮、還原操作,而后把控制權交還給原始程序。

軟件殼一般分為壓縮殼、加密殼和虛擬機殼3種。壓縮殼僅對原始程序中的資源進行壓縮,如Aspack、UPX和PeCompact等,使用壓縮殼保護的程序,其大小一般小于原始程序。加密殼不僅對原始程序中的資源進行壓縮,還具備函數輸入表加密、反調試、雙進程保護和虛擬執行等功能,如ASProtect、Armadillo和Themida等[8]。虛擬機殼一般將PE文件反匯編為X86指令流,并從中提取目標指令序列,而后將目標匯編指令流轉換成字節碼,PE文件中被保護代碼的正確運行需要虛擬機解釋器對字節碼解釋執行[9-11],虛擬機殼自帶一個虛擬執行引擎,會對程序執行效率帶來較大影響。

2.2 代碼混淆保護

代碼混淆是一種常用的軟件保護方法,混淆前后的程序在功能和行為上保持一致,主要目的是讓逆向分析者難以運用逆向工具提取出軟件關鍵代碼。代碼混淆的系統性研究是從20世紀90年代末開始的,其基礎性工作是由Collberg、Thomborson、Low等完成的[12-13]。Collberg給出了代碼混淆的定義,并第一次對代碼混淆進行了分類,詳細總結了各類代碼混淆技術,提出對代碼混淆評價的性能指標。根據混淆原理和對象的不同,可將代碼混淆技術分為外形混淆、控制混淆、數據混淆和預防混淆[14-16]。外形混淆是一種針對程序外形及布局的變換來迷惑破解者的混淆,數據混淆是一種針對數值變量及數據類型變換的混淆,控制混淆是一種通過改變程序代碼的控制流結構來增加代碼結構復雜度的混淆方法,預防混淆是一種針對專用反匯編器或反編譯器的混淆。

最初的代碼混淆主要應用于高級語言,即源碼層面的代碼混淆。通過對源碼形態的變換,生成具有抗逆向功能的可執行程序或腳本程序。常用混淆技術分別在源碼、二進制程序和編譯中間表示3個層次實現。源碼級的混淆難度最小,但需要考慮具體編程語言的語法規則,在實施變換的過程中有一定的限制;二進制程序的重構需要建立在對程序正確分析的基礎上,且由于代碼結構相對固定,修改難度較大;編譯中間表示介于兩者之間,格式相對規范,程序內容信息全面,修改難度折中且方式靈活。文獻[13,17-19]雖然是對編譯器中間表示進行混淆處理,但選取的混淆對象是中間表示文本文件,并沒有發揮編譯器強大的接口功能,從嚴格意義上來講,并不是真正基于融合編譯的代碼混淆。

2.3 傳統軟件保護方法存在的問題

基于代碼加殼和代碼混淆的傳統軟件保護能在一定程度上解決軟件保護問題,但這兩類方法存在明顯的弊端。

對于軟件加殼保護,很多通用殼具有明顯的結構特征,逆向分析人員可以快速提取出加殼后的代碼特征,識別出殼類型,針對某種特定的殼,利用專用脫殼工具,可對加殼后的代碼進行快速脫殼處理,進而還原出被保護代碼。對于虛擬機這類高級軟件殼,脫殼難度較大,但由于虛擬機殼是對目標代碼逐指令解釋執行,嚴重影響了程序的執行效率,加殼過程中額外增加的解釋引擎,會引起加殼后代碼的膨脹問題。

對于基于代碼混淆的軟件保護技術,一般針對有源碼目標軟件,絕大多數混淆算法無法適用于二進制代碼。代碼混淆一般只是對指令進行等價替換,或插入垃圾指令,或對程序控制流結構進行混淆處理,混淆前后代碼功能基本一致。代碼混淆操作對于靜態逆向分析具有較好的軟件保護效果,但對于基于動態調試的軟件逆向分析手段,保護效果則非常有限。

綜上,軟件逆向分析和破解技術發展迅速,當前代碼加殼、代碼混淆等傳統的軟件保護方法難以對抗日趨先進的破解技術,軟件保護效果并不理想。本文在對傳統軟件保護方法進行深入分析的基礎上,提出了一種基于融合編譯的程序多樣化保護方法,該方法針對傳統方法不適用二進制代碼保護,保護后代碼特征明顯,易被還原、執行效率低、抗動態調試效果差等典型問題,主要以無源碼的二進制代碼為保護對象,通過編譯技術,將目標代碼與隨機選擇的掩體代碼進行深度融合,利用掩體代碼的多樣性、目標代碼保護策略的隨機性,來實現軟件多樣化保護效果,使保護后的代碼,從靜態特征、動態行為方面具有很強的多樣性特點,有效對抗主流代碼逆向分析和破解手段。

3 軟件多樣化保護模型和框架設計

3.1 軟件多樣化保護模型

本文提出的多樣化保護方法的核心思想是:將待保護的目標軟件進行加密壓縮處理,與隨機選取的掩體程序進行編譯層面的深度融合,在掩體代碼執行過程中,分階段完成被保護軟件的加載執行。本節通過形式化方法,對多樣化保護模型進行詳細描述。

定義1 (二進制程序)二進制程序是由指令、數據,以及指令對數據的引用關系組成的集合,記作

定義2 (代碼融合)代碼融合是指將兩個程序12,在指令、數據等多個層面進行深度融合,使其構成一個程序,但同時具備兩個程序的功能,記作

定義3 (基于編譯融合的代碼保護)基于編譯融合的代碼保護是指在編譯層面,將目標軟件1以加密方式融合到另一個掩體程序2中,生成一個新程序,實現對目標軟件的保護,目標軟件1整體作為保護后程序的數據部分,被加密壓縮處理,記作

其中,

解密功能代碼是指插入在掩體中的代碼片段,其作用是對加密的目標軟件進行解密處理。融合功能代碼是指在掩體程序中插入的代碼片段,其核心功能是將目標軟件以無進程的形式在內存中加載執行起來,實現目標軟件和掩體程序的進程空間共享,完成基于掩體代碼的目標軟件保護。

定義4 (程序內存執行)程序內存執行是指通過自實現的程序加載器,將目標程序直接在內存中加載運行起來,實現目標程序的無進程運行。程序內存執行的核心在于自實現的程序加載器,記作

3.2 軟件多樣化保護框架設計

本文提出的軟件多樣化保護框架設計如圖1所示,輸入是待保護的二進制形態目標軟件,輸出為多樣化保護處理后的軟件。框架底層以掩體代碼庫、加密算法庫、編譯環境庫為基礎支撐,其中掩體代碼是指在互聯網收集的功能各異的開源代碼,用來掩護目標軟件的特征和行為。首先,利用內存執行技術將目標二進制文件變形成可直接在內存中運行的代碼形態,即在目標二進制文件頭部加入一個加載器,目標軟件以數據形式加密后附著在加載器后面;然后,利用編譯技術將掩體代碼編譯成中間表示形態,對中間表示形態的掩體進行插樁處理,加入若干功能函數調用;最后,將內存化處理后的目標軟件和插樁處理后的掩體代碼進行融合編譯,構建生成多樣化保護處理后的目標軟件,該軟件在靜態特征上,與目標軟件完全不同,難以通過靜態逆向手段來獲知目標軟件的實現細節和關鍵代碼;在動態行為上,保護后的軟件兼具掩體行為,能完全保持目標軟件行為。

與傳統代碼保護方法相比,本文提出的基于融合編譯的軟件多樣化保護方法具有明顯優勢,主要體現在:與代碼混淆方法相比,該方法可以針對無源碼的二進制文件,對目標軟件的所有指令和數據進行加密壓縮處理,達到完全混淆的效果;與代碼加殼相比,該方法沒有固定的加殼特征,而是利用多樣化的掩體來加載和執行目標軟件,難以通過脫殼方式來還原保護后的目標軟件,在很大程度上增加了代碼被逆向、被破解的難度。

圖1 軟件多樣化保護框架

Figure 1 Diversity software protection framework

4 基于融合編譯的代碼保護技術

在軟件多樣化保護框架設計過程中,涉及的關鍵技術主要有PE文件內存加載執行技術、中間表示代碼插樁技術、掩體和目標代碼深度融合編譯技術。其中,PE文件內存加載執行技術用來將目標軟件組裝成可在內存中執行的狀態,為目標軟件的全指令和全數據加密處理提供基礎;中間表示代碼插樁技術用來解決掩體代碼融合點的選擇問題,為融合編譯提供基礎;掩體和目標代碼深度融合編譯技術將掩體代碼和目標軟件代碼,在中間表示層面進行深度融合,采用混合編譯方法,生成用掩體程序保護后的目標軟件。下面分別對各技術的核心思想進行介紹。

4.1 軟件內存加載執行技術

軟件內存加載執行技術解決的是目標軟件在內存中直接執行的問題,使目標軟件可被全文件加密保護,在執行時無須釋放出PE文件而失去保護意義。

正常情況下,要執行一個PE文件,一般通過雙擊或命令行,以創建進程的形式來完成,這些工作均依賴于Windows PE加載器[20]。而內存執行技術是模擬加載器的功能,來實現PE程序的加載執行。簡而言之,內存執行技術是在內存中,以無進程形式直接執行一個PE文件[21]。PE文件內存加載、執行是一個非常復雜的過程,涉及文件內存映射、導入表修復、重定位修復、TLS段修復、PEB結構修復等技術。本文在對PE文件加載運行機制進行深入分析的基礎上,提出了一種通用的軟件內存加載執行技術,有效解決了內存執行過程中出現的導入表缺失、PEB結構錯誤、TLS表丟失、地址隨機化等問題,技術框架如圖2所示。

圖2 軟件內存執行技術框架

Figure 2 Software memory execution technology framework

首先,將目標文件加載到加載器所在內存空間中,完成內存區域擴展,對加載到內存中的PE文件進行重定位和導入表修復處理,使PE文件在內存中的虛擬地址能夠被正確訪問;接著,在加載PE文件的內存區域中進行PEB結構修復和TLS表修復,使目標代碼在執行過程中能夠獲取PEB結構中的正確信息,保證程序的正常運行。

4.2 基于LLVM中間表示的代碼插樁技術

本文選擇底層虛擬機(LLVM, low level virtual machine)作為代碼插樁平臺,LLVM是一種成熟的開源編譯框架,提供了豐富、方便的中間表示編程接口。LLVM最初是伊利諾伊大學的一個研究項目。它是一個模塊化和可重用的編譯器和工具技術的集合,其核心庫提供了與編譯器相關的支持,可以作為多種語言編譯器的后臺來使用,能夠進行程序語言的編譯期優化、鏈接優化、在線編譯優化、代碼生成優化。

LLVM中間表示是一種采用靜態單賦值(SSA, static single assignment)形式的中間表達(Intermediate Representation),包含一套匯編語言類似的指令集,類似于RISC(reduced instruction set computer)的三地址指令集,具有簡單的控制指令和帶類型的訪問內存指令,獨立于前端高級語言,同時獨立于目標平臺架構。它既能保留源程序的信息(用于程序分析和變換),又足夠簡單便于程序優化。LLVM為開發者提供了很多代碼分析、編譯優化相關的開發庫,為中間表示代碼插樁提供了豐富、規范的接口支撐。

本文以開源編譯框架LLVM為基礎支撐,將掩體代碼編譯成中間表示形態,利用LLVM提供的中間表示編程接口,對掩體代碼進行插樁處理,在掩體執行的關鍵路徑中,插入目標軟件加載運行所需要的功能代碼。在插樁過程中,插樁點的選取直接影響融合后代碼的正確性、融合過程的隱蔽性,本文在選取插樁點時,遵循路徑必達、深度優先、隨機選取等策略。插樁代碼負責加載并執行加密后的目標軟件,技術細節如圖3所示。

圖3 面向中間表示的代碼插樁技術

Figure 3 Instrumentation technology based on LLVM IR

利用LLVM編譯器,將掩體代碼編譯成中間表示形態,在中間表示層面記錄程序的動態執行軌跡,每個軌跡點的內容包括函數名、基本塊名、指令名、操作數序號、操作數的值等要素,這些點構成了掩體融合點數據庫,確保在融合點處插入的功能代碼都能被執行。插樁代碼的功能主要包括解密、加載、內存執行、上下文銜接等,負責實現對被保護目標軟件的完整、正確執行。面向LLVM中間表示的代碼插樁算法描述如下。

procedure IR_Instrument (IRFile):面向LLVM中間表示的代碼插樁算法

輸入 待插樁的中間表示文件IRFile,插入的融合功能代碼FuseCode

輸出 插樁后的中間表示文件NewIRFile

begin

1) Module = ParseFile(IRFile); //列出文件中的所有函數

2) FunsArray = ListFuns(Module); //遍歷所有函數

3) foreach curFun in FunsArray //遍歷所有基本塊

4) foreach curBB in BBsArray //遍歷所有指令

5) foreach curIns in InsArray //是否包含值確定操作數

6) if HasValueDefinedOperand(curIns)

//插入融合點記錄代碼

7) NewModule=InsertRecord Code (Module);

8) end if

9) end foreach

10) end foreach

11) end foreach //編譯插樁之后的中間表示文件

12) IREXE = CompileFile(NewModule); //執行插樁后的exe文件,獲取所有的融合點

13) PointArray = RunExe(IREXE);

//隨機獲取融合點,便于插入融合代碼

14) SelectedPoints = GetRandPoints (PointArray); //在掩護代碼融合點處插入融合代碼

15) InsertFuseCode(IRFile, FuseCode, SelectedPoints);

end

4.3 掩體和目標代碼融合編譯技術

在完成掩體代碼插樁工作后,需要將掩體功能和被保護軟件功能有機融合在一個程序中,該程序利用隨機選擇的掩體,從靜態特征、動態行為等方面對目標軟件進行全方位保護。本文提出了一種掩體和目標代碼深度融合編譯技術來完成上述目標,技術細節如圖4所示。

圖4 掩體和目標軟件融合編譯過程

Figure 4 Compilation process of the fusion of bunker and target software

插樁處理后的掩體代碼被單獨編譯成目標對象obj文件,其中在融合點處嵌入了對目標軟件解密、加載、執行等核心功能函數的調用,但這些函數的具體實現并不在掩體代碼中,而是在單獨的功能代碼集合中,功能代碼集合和加密后的目標軟件統一編譯成目標對象obj文件。最后,利用LLVM提供的交叉鏈接接口,將上述兩部分代碼編譯生成一個最終文件,實現掩體代碼和目標軟件的充分融合,達到目標軟件多樣化保護目的。

在融合時,掩體能提供的融合點數量非常龐大,為了使插樁過程盡量隨機化,本文構建了深度、數量、分塊算法、解密算法等均可隨機配置的融合策略,即使對同一掩體,其插樁后生成的代碼也有較大差異,利用掩體代碼的多樣性、融合策略的隨機性可實現目標軟件的多樣化保護效果。

5 實驗評估

為了驗證基于融合編譯的程序多樣化保護方法的整體性能和實際效果,本文借鑒了軟件保護效果的主流評估方法[22],從方法的時間、空間開銷,保護前后代碼相似性分析,與加殼類代碼保護方法的比較等方面開展了實驗分析。

5.1 測試集

本文選取10個常用系統軟件、應用軟件組成測試用例集,各用例詳細說明如表1所示。測試主機環境為32 GB內存、Intel I7處理器、Win 10 X64系統。

5.2 資源開銷分析

本文從兩個方面來分析基于融合編譯的程序多樣化保護方法的資源開銷情況:一是保護方法對目標軟件進行保護處理時,所需要的時間開銷,反映的是保護方法的運行效率;二是目標軟件被保護處理前后的文件大小和執行時間對比,反映的是保護方法對目標軟件運行效率的影響。

圖5展示了在同一掩體和相同配置下,利用本文方法分別對10個測試用例進行保護處理的時間開銷情況,從實測數據可以看出,保護方法所需時間與樣本大小強相關,一般來說,目標軟件越大,所需處理時間越長。總體來說,保護方法時間開銷較小。

在相同的掩體和配置參數下,利用本文提出的多樣化保護方法對所有測試用例進行保護處理,生成新的軟件。圖6展示的是多樣化處理前后,測試用例的執行時間對比情況,可以看出,保護后的目標軟件執行時間較保護前有所增加,時間凈增長值較為平穩,這主要是因為保護后的代碼不僅要具備原始目標軟件的功能,還要具備掩體程序的功能。同一個掩體,執行時間是相對固定的,但對于各測試用例,即使利用的是同一掩體進行保護,時間凈增長值也各有差異,這主要是由掩體融合點和目標軟件加密壓縮算法的隨機性因素引起的,這也充分體現出軟件保護的多樣化效果。

圖7展示的是各測試用例保護前后文件大小變化情況,從圖中可以看出,保護后文件大小較保護前有明顯增長,增長部分主要是掩體代碼,并沒有引入其他過多額外代碼,這與本文提出的軟件保護方法的工作原理相吻合。

5.3 保護效果分析

為了說明所提出的軟件保護方法的多樣化特性,本文從兩個角度開展實驗分析:一是比較軟件保護處理前后的代碼相似性,說明軟件保護技術本身的多樣化特性;二是利用不同掩體對相同目標軟件進行保護處理,比較不同掩體保護處理后的軟件相似性,說明掩體對軟件保護的多樣化效果。一般來說,軟件處理前后文件之間的相似性越低,說明保護方法的多樣化效果越好。

表1 測試用例說明

圖5 軟件多樣化保護處理時間開銷

Figure 5 Time overhead of diversity software protection

圖6 軟件多樣化保護前后執行時間對比

Figure 6 Comparison of execution time before and after software protection

圖7 軟件多樣化保護前后文件大小對比

Figure 7 Comparison of file size before and after software protection

二進制代碼相似性比較技術常用的有四大類,分別是基于二進制字節比較、基于二進制文件反匯編后的文本比較、基于指令相似性的圖形化比較和基于結構化簽名的比較方法,每類方法各有特色。本文選用基于匯編指令的比對方法,對二進制文件進行反匯編處理,以匯編指令作為分析對象,分別提取指令操作碼和操作數,進而對其進行相似性比對[23]。本文選用常用二進制文件比對軟件BinDiff[24],從基本塊和函數兩個維度來計算軟件保護前后文件之間的相似性。

在進行基本塊和函數級文件相似性比較時,不考慮系統庫或第三方庫代碼,只是比較軟件自實現代碼的相似性。表2是各測試用例在用本文方法進行保護前后的文件相似性統計情況,從中可以看出,無論從基本塊級還是函數級,保護前后的代碼相似性普遍很低,這說明保護前后軟件不具有同源性,體現了本文方法的多樣性和抗同源性特點。

表2 各用例軟件保護前后的文件相似性

表3是利用不同掩體,對3個測試用例進行保護處理前后的文件相似性統計情況,可以看出,即使針對同一測試用例進行保護,由于選用的掩體不同,保護處理后得到的文件相似性很低。該統計結果與本文方法技術路線一致,在利用掩體代碼對目標軟件進行保護處理時,受保護的目標軟件被隨機加密處理,通過自實現的加載器來運行,而加載器設計成shellcode形態,也可被加密處理。上述過程不會引入額外的公共代碼,所以利用不同掩體保護之后的目標軟件呈現出很強的多樣化特性。

表3 利用不同掩體對軟件進行保護前后的文件相似性

表4 與加殼軟件保護方法的對比結果

5.4 對比實驗分析

從技術思路和實現方法來看,本文方法與傳統加殼保護方法存在較大差異。本文選取了3款常用加殼軟件對測試用例進行加殼保護,從保護后的軟件是否會被檢測為惡意軟件、是否能被還原、是否能被檢測出殼特征3個維度,來對比本文方法與傳統加殼方法在軟件保護效果方面的優劣。

本實驗選取的3款常用加殼軟件及其版本分別為UPX3.4、ASPack2.12和ASProtect2.77。其中,UPX是一款先進的可執行程序文件壓縮器,壓縮過的可執行文件體積縮小50%~70%。通過UPX壓縮過的程序和壓縮之前程序功能完全一致。ASPack是一款針對Win32可執行文件的常用加殼軟件,使用方便,操作快捷。ASProtect是一款功能非常完善的加殼、加密保護軟件,能夠在對軟件加殼的同時進行各種保護,如反調試跟蹤、自校驗及加密保護等。

表4描述了本文提出的多樣化軟件保護方法與常用加殼類軟件保護方法的效果對比情況。其中,A表示處理后代碼是否能被檢測出殼特征,用ExeInfo工具檢測;B表示處理后代碼被檢測為惡意代碼的概率,通過把代碼上傳至VirusTotal網站,用檢出比來表示被檢測概率;C表示處理后代碼是否能被還原,即能否利用專用脫殼工具或動態調試方法還原出原始軟件形態。Y表示“是”;N表示“否”。可以看出,加殼類軟件保護方法一般具有很明顯的殼特征,殼代碼形態相對固定,逆向分析人員可利用專用脫殼機對其進行脫殼處理,還原出加殼前的代碼形態。另外,加殼處理后的代碼會表現出較強的惡意性,容易被殺毒軟件識別為惡意程序。針對上述問題,本文提出的軟件多樣化保護方法具有明顯優勢,不會產生明顯的代碼特征,殼檢測工具失效,保護方法的多樣性使無法利用專用脫殼工具對其進行還原處理。更為重要的是,本文方法不會引入額外的惡意行為或惡意特征,對于正常目標軟件,保護后的代碼不會被檢測為惡意代碼。

6 結束語

軟件保護技術一直是信息技術領域研究的熱點和難點問題,對于提高軟件安全性、保護軟件知識產權具有至關重要的作用。隨著軟件靜態反匯編、動態跟蹤調試等逆向分析技術的快速發展,混淆、加殼等傳統軟件保護方法逐漸暴露出殼特征明顯、易被還原、混淆模式單一、適用面不廣等問題,難以對抗日趨先進的軟件逆向手段。本文以LLVM開源編譯框架為基礎,提出了一種基于融合編譯的軟件多樣化保護方法,方法的核心思路是把要保護的目標軟件與另一個掩護軟件進行深度融合處理,將目標軟件的特征和行為分散在掩體代碼中。首先將目標軟件進行隨機化加密處理,并整體作為數據,與掩護代碼在編譯層面進行深度融合;然后通過內存加載執行技術,將加密后的目標軟件進行解密,分階段在內存中以無進程的形式運行起來,通過掩護代碼的多樣性、融合點和融合策略的隨機性來實現目標軟件的多樣化保護效果。對于同一個目標軟件,可以生成大量特征各異、形態多樣的保護后軟件。本文選取了多款常用軟件作為測試集,從資源開銷、保護效果、對比實驗等多個角度對本文方法的性能和效果進行了實例測試。從測試結果來看,與混淆、加殼等傳統保護方法相比,所提方法在抗靜態分析、抗動態調試、抗同源性分析等方面表現出較大優勢,資源開銷較小,多樣化保護效果明顯。

從原理上來講,沒有無法被還原的軟件,也沒有無法被破解的軟件保護方法,軟件保護是一種具有典型對抗特征的軟件技術,該技術的發展與軟件破解、軟件逆向等技術強相關、緊耦合,其核心思想是在保證執行效率的情況下,盡量加大軟件被逆向、被破解的難度。軟件保護技術研究是信息技術領域永恒的話題,在本文方法中,掩護代碼的隨機性和多樣性對于保護效果起著非常重要的作用,接下來將繼續優化基于融合編譯的軟件多樣化保護方法,進一步研究掩護代碼的智能化構造方法,為軟件多樣化保護提供豐富的掩體庫支撐。

[1] 周國祥, 陸文海.基于BHO技術的數字版權保護系統的研究與設計[J].計算研究與發展, 2010,47(6):316-320.

ZHOU G X, LU W H. Application of BHO-based PDF digital management system[J]. Journal of Computing Research and Development, 2010,47(6):316-320.

[2] 劉芳,金松根,盧國強.數字版權管理與數字圖書館建設[J].圖書館學刊,2011(4):105-108.

LIU F, JIN S G, LU G Q. Digital copyright management and digital library construction[J]. Journal of Library Science, 2011(4): 105-108.

[3] 國務院.計算機軟件保護條例[J].新疆新聞出版, 2013(2):82-84.

State Council. Regulations of protecting computer software[J]. Publishing House of Xinjiang News, 2013(2): 82-84.

[4] 劉軍.基于CUDA的軟件保護技術研究與實現[D].長沙:湖南大學,2011:5-25.

LIU J. The Research and implementation of CUDA-assisted software protection technology[D]. Changsha: Hunan University, 2011: 5-25.

[5] 高艷軍. 數據安全管理系統加殼技術研究與實現[D].長沙: 國防科學技術大學, 2008: 15-30.

GAO Y J. Research and Implementation of packing technique for data security management System[D]. Changsha: National University of Defense Technology, 2008: 15-30.

[6] 馬珂. 基于虛擬機的內核模塊行為分析技術研究[D].湘潭: 湘潭大學, 2014: 20-28

MA K. Research on the technologies of kernel module behavior analysis based on VMM[D]. Xiangtan: Xiangtan University, 2014: 20-28

[7] 郝景超. Windows下軟件實名機制的設計與實現[D].鄭州: 解放軍信息工程大學, 2008: 24-36.

HAO J C. Design and realization of the software real name mechanism in windows system[D]. Zhengzhou: PLA Information Engineering University, 2008: 24-36.

[8] 李勇. 基于 Windows 平臺的目標代碼混淆[D]. 成都:電子科技大學, 2007: 37-45.

LI Y. Object code obfuscation based on Windows platform[D]. Chengdu: University of Electronic Science and Technology of China, 2007: 37-45.

[9] 房鼎益,張恒,湯戰勇,等.一種抗語義攻擊的虛擬化軟件保護方法[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]. Journal of Sichuan University (Engineering Science Edition), 2017, 49(1):159-168.

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

[11] KUANG K, TANG Z, GONG X, et al. Exploiting dynamic scheduling for VM-based code obfuscation[C]//Proc of the Trustcom/Bigdatase/Ispa. 2017. 489-496.

[12] COLLBERG C, THOMBORSON C, LOW D. A taxonomy of obfuscating transformations[J]. Department of Computer Science the University of Auckland New Zealand, 1997.

[13] COLLBERG C, THOMBORSON C, LOW D. Manufacturing cheap, resilient, and stealthy Opaque constructs[C]// Proc. 25th ACM SIGPLANSIGACT Symposium on Principles of Programming Languages '98. 1998: 184-196.

[14] 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.

[15] WANG Z, JIA C F, LIU W J, et al. Branch obfuscation to combat symbolic execution[J]. Acta Electronica Sinica, 2015,43(5): 870-878.

[16] 潘雁,祝躍飛,林偉.基于指令交換的代碼混淆方法[J].軟件學報,2019,30(6):1778-1792.

PAN Y, ZHU Y F, LIN W. Code obfuscation based on instructions swapping[J]. Journal of Software, 2019, 30(6): 1788-1792.

[17] BALACHANDRAN V, KEONG N W, EMMANUEL S. Function level control flow obfuscation for software security[C]//Eighth International Conference on Complex, Inteligence and Software Intensive Systems. 2014:133-140.

[18] 王志. 二進制代碼路徑混淆技術研究[D]. 天津: 南開大學. 2012.

WANG Z. Research on binary code path obfuscation[D]. Tianjin: Nankai University. 2012.

[19] TAMBOLI T, AUSTIN T H, STAMP M. Metamorphic code generation from LLVM bytecode[J]. Journal of Computer Virology & Hacking Techniques, 2014, 10(3):177-187.

[20] 章立春. 一種PE程序文件加載執行方法, CN 104331308 A[P]. 2015.

ZHANG L C. A method for loading and executing PE program files, CN 104331308 A[P]. 2015.

[21] ZHOU J. Method and apparatus for bypassing hook: CN 101414338 B[P]. 2012.

[22] WANG H, FANG D, LI J, et al. The research and discussion on effectiveness evaluation of software protection[C]//Proc of the Int’l Conf on Computational Intelligence and Security. 2016. 628-632.

[23] SCHULMAN A. Finding binary clones with opstrings and function digests[J].Dr.Dobb’s Journal, 2005, 30(9): 64-70.

[24] ZYNAMICS. Sabre BinDiff[EB].

Method of diversity software protection based on fusion compilation

XIONG Xiaobing, SHU Hui, KANG Fei

Information Engineering University, Zhengzhou 450001, China

For the obvious characteristics and single mode of the existing common protection methods, with the help of the LLVM framework, a diversity software protection method based on fusion compilation was proposed. In the proposed method, the target software is encrypted randomly, and deeply integrated with the bunker code at the compilation level, and the encrypted target software is decrypted by memory execution technology. Then it is executed in the form of no process in memory, and the diversified protection effect of the target software is realized by the diversity of the bunker and the randomness of the fusion strategies. A number of commonly used software are selected as the test case, and the proposed method is tested from the aspects of resource cost, protection effect, comparative experiment and so on. Compared with the traditional methods such as obfuscation and packing, the proposed method has great advantages in anti-static analysis and anti-dynamic debugging, and can effectively resist the mainstream methods of reverse analyzing and cracking.

software protection, diversification, fusion compilation, memory execution, LLVM, intermediate representation

National Key Research and Development Project (2016YFB08011601)

TP393

A

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

熊小兵(1985? ),男,江西豐城人,博士,信息工程大學講師,主要研究方向為網絡信息安全、軟件逆向分析。

舒輝(1974? ),男,江蘇鹽城人,博士,信息工程大學教授、博士生導師,主要研究方向為網絡信息安全、嵌入式系統分析與信息安全。

康緋(1972? ),女,北京人,信息工程大學教授,主要研究方向為網絡信息安全、加解密機制分析。

論文引用格式:熊小兵, 舒輝, 康緋. 基于融合編譯的軟件多樣化保護方法[J]. 網絡與信息安全學報, 2020, 6(6): 13-24.

XIONG X B, SHU H, KANG F. Method of diversity software protection based on Fusion compilation[J]. Chinese Journal of Network and Information Security, 2020, 6(6): 13-24.

2019?07?21;

2019?09?27

熊小兵,bingxiaoxiong@163.com

國家重點研發計劃(2016YFB08011601)

猜你喜歡
程序融合方法
村企黨建聯建融合共贏
今日農業(2021年19期)2022-01-12 06:16:36
融合菜
從創新出發,與高考數列相遇、融合
《融合》
現代出版(2020年3期)2020-06-20 07:10:34
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
主站蜘蛛池模板: 国产精品无码翘臀在线看纯欲| 亚洲AV无码不卡无码| 欧美第九页| 天堂在线视频精品| 国产成+人+综合+亚洲欧美| 国产自无码视频在线观看| 新SSS无码手机在线观看| 亚洲精品视频在线观看视频| 国产黄在线观看| 久久77777| 欧美激情视频在线观看一区| 中文字幕首页系列人妻| 免费人成在线观看视频色| 一级毛片中文字幕| 欧美日韩亚洲综合在线观看| 国产综合在线观看视频| AV老司机AV天堂| 国产成人午夜福利免费无码r| 日本一区二区三区精品AⅤ| 国产精品一线天| 黄色污网站在线观看| 国产一区二区三区免费观看| 午夜在线不卡| 亚洲AV一二三区无码AV蜜桃| 秘书高跟黑色丝袜国产91在线| 日韩色图区| 自拍欧美亚洲| 亚洲av中文无码乱人伦在线r| 亚洲成人高清在线观看| 中文字幕资源站| 亚洲成人网在线播放| 最新日本中文字幕| 亚洲男女在线| 青青草91视频| 国产激爽大片高清在线观看| 国产成+人+综合+亚洲欧美| 激情综合婷婷丁香五月尤物 | 日韩毛片在线播放| 亚洲另类第一页| 欧美日本中文| 四虎成人免费毛片| 婷婷六月综合网| 精品视频福利| 狂欢视频在线观看不卡| 亚洲h视频在线| 在线网站18禁| 综合色在线| 国产一级做美女做受视频| 亚洲视频影院| 91精品视频在线播放| 久久久久亚洲AV成人人电影软件| 成人一级黄色毛片| 91成人在线观看视频| 日本午夜影院| 国产精品视频观看裸模| 少妇露出福利视频| 欧美午夜理伦三级在线观看| 国产91在线|日本| 在线五月婷婷| 大乳丰满人妻中文字幕日本| 国产在线八区| 国产精品污污在线观看网站| 四虎AV麻豆| 美女扒开下面流白浆在线试听| 中文字幕在线欧美| 久久中文电影| 久久久久青草线综合超碰| 波多野吉衣一区二区三区av| 国产成人精品18| 亚洲爱婷婷色69堂| 国产在线视频福利资源站| 国产精品一区二区久久精品无码| 日韩不卡高清视频| 亚洲成人77777| 亚洲欧美综合精品久久成人网| 亚洲国产精品一区二区第一页免| 不卡视频国产| 三上悠亚一区二区| 日韩精品无码一级毛片免费| 全部免费毛片免费播放| 亚洲黄色网站视频| 波多野结衣一区二区三区AV|