国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于代碼碎片化的軟件保護(hù)技術(shù)

2020-12-18 00:27:58郭京城舒輝熊小兵康緋
關(guān)鍵詞:調(diào)用內(nèi)存代碼

郭京城,舒輝,熊小兵,康緋

基于代碼碎片化的軟件保護(hù)技術(shù)

郭京城,舒輝,熊小兵,康緋

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

針對(duì)當(dāng)前軟件保護(hù)技術(shù)存在的不足,提出一種代碼碎片化技術(shù),該技術(shù)是一種以函數(shù)為單元,對(duì)函數(shù)進(jìn)行代碼shell化、內(nèi)存布局隨機(jī)化、執(zhí)行動(dòng)態(tài)鏈接化的新型軟件保護(hù)技術(shù),代碼shell化實(shí)現(xiàn)代碼碎片的位置無(wú)關(guān)變形,內(nèi)存布局隨機(jī)化實(shí)現(xiàn)代碼碎片的隨機(jī)內(nèi)存加載,動(dòng)態(tài)鏈接化實(shí)現(xiàn)對(duì)代碼碎片的動(dòng)態(tài)執(zhí)行,通過(guò)上述3個(gè)環(huán)節(jié)實(shí)現(xiàn)對(duì)程序的碎片化處理。實(shí)驗(yàn)表明,代碼碎片化技術(shù)不僅能實(shí)現(xiàn)程序執(zhí)行過(guò)程中函數(shù)碎片內(nèi)存位置的隨機(jī)化,還能實(shí)現(xiàn)函數(shù)碎片的動(dòng)態(tài)鏈接執(zhí)行,增加程序靜態(tài)逆向分析和動(dòng)態(tài)逆向調(diào)試的難度,提高程序的抗逆向分析能力。

代碼碎片化;軟件保護(hù);分離;動(dòng)態(tài)鏈接

1 引言

軟件保護(hù)問(wèn)題一直是計(jì)算機(jī)安全領(lǐng)域的重要研究課題,雖然當(dāng)前的軟件保護(hù)手段能夠在一定程度上增加軟件被惡意修改和逆向分析的難度,但攻擊方可以實(shí)現(xiàn)對(duì)程序的結(jié)構(gòu)特征進(jìn)行靜態(tài)分析[1-2],也可以反復(fù)地對(duì)代碼進(jìn)行逐步運(yùn)行、調(diào)試、反匯編、反編譯,能夠獲取軟件在內(nèi)存中的數(shù)據(jù)、執(zhí)行期間的中間值,通過(guò)連續(xù)獲取系統(tǒng)的內(nèi)存鏡像,進(jìn)行前后鏡像之間的對(duì)比分析,可以獲取程序的具體行為[3]的動(dòng)態(tài)分析,因此,如何有效地實(shí)現(xiàn)對(duì)應(yīng)用程序的防破解、防盜版是一個(gè)亟待解決的問(wèn)題。當(dāng)前有很多軟件保護(hù)技術(shù),代碼加殼[4]是通過(guò)對(duì)原程序的壓縮加密實(shí)現(xiàn)對(duì)可執(zhí)行文件的保護(hù)手段,代碼虛擬化[5]是將本地指令轉(zhuǎn)換成自定義的虛擬指令,并通過(guò)虛擬解釋器解釋執(zhí)行虛擬指令,實(shí)現(xiàn)原始程序的功能,代碼混淆[6-9]分為外形混淆、控制混淆、數(shù)據(jù)混淆和預(yù)防混淆[10-12]。在源代碼基礎(chǔ)上實(shí)現(xiàn)若干種控制混淆轉(zhuǎn)換與數(shù)據(jù)混淆轉(zhuǎn)換,通過(guò)適當(dāng)插入垃圾代碼和不透明謂詞實(shí)現(xiàn)的改進(jìn)型控制流混淆算法[13],通過(guò)增加冗余基本塊的數(shù)量和隨機(jī)下標(biāo)生成實(shí)現(xiàn)改進(jìn)型的二進(jìn)制程序控制流扁平化[14],是常見的代碼混淆手段。內(nèi)存布局隨機(jī)化通過(guò)不斷改變進(jìn)程內(nèi)存布局,實(shí)現(xiàn)進(jìn)程攻擊面的隨機(jī)性變換,從而消除了攻擊者的不對(duì)稱優(yōu)勢(shì),增加了攻擊者的攻擊難度[15-16]。這些軟件保護(hù)技術(shù)能夠?qū)崿F(xiàn)對(duì)代碼的保護(hù),很大程度上增加逆向攻擊者對(duì)程序靜態(tài)分析的難度,但不能實(shí)現(xiàn)抗動(dòng)態(tài)調(diào)試,當(dāng)逆向攻擊者通過(guò)動(dòng)態(tài)調(diào)試工具對(duì)保護(hù)后的代碼進(jìn)行動(dòng)態(tài)調(diào)試時(shí),代碼的執(zhí)行邏輯依然會(huì)被暴露,進(jìn)而可以通過(guò)內(nèi)存dump方法獲取完整的程序代碼。針對(duì)當(dāng)前軟件保護(hù)技術(shù)在動(dòng)態(tài)分析中存在的不足,提出一種基于代碼碎片化的新型軟件保護(hù)技術(shù),該技術(shù)通過(guò)在中間語(yǔ)言(中間語(yǔ)言是一種采用靜態(tài)單賦值形式的中間表達(dá))層面對(duì)功能函數(shù)代碼碎片進(jìn)行分離,實(shí)現(xiàn)對(duì)代碼碎片的動(dòng)態(tài)鏈接執(zhí)行。該技術(shù)將功能函數(shù)的直接調(diào)用轉(zhuǎn)換成間接調(diào)用,能夠避免被完整地控制流分析,進(jìn)而增加靜態(tài)分析的難度;各個(gè)函數(shù)模塊能夠加載到內(nèi)存中的任意位置,有效防止程序被dump分析,增加程序動(dòng)態(tài)分析的難度。

2 基本思路

代碼碎片化技術(shù)基于LLVM編譯平臺(tái),LLVM是一系列分模塊、可重用的編譯工具鏈,它提供了一種代碼編寫良好的中間表示(IR),可以作為多種語(yǔ)言的后端,還可以提供與編程語(yǔ)言無(wú)關(guān)的優(yōu)化和針對(duì)多種CPU的代碼生成功能。LLVM中間表示是一種采用靜態(tài)單賦值形式(SSA,static single assignment)的中間表達(dá)(intermediate representation),包含一套匯編語(yǔ)言類似的指令集和一個(gè)類型系統(tǒng),該指令集是類似于RISC(reduced instruction set computer)的三地址指令集。以可移植的執(zhí)行體(PE,portable executable)程序碎片化處理過(guò)程為例,說(shuō)明代碼碎片化技術(shù)的原理,如圖1所示。首先,對(duì)源代碼進(jìn)行shell化變形,在中間語(yǔ)言層面對(duì)源代碼進(jìn)行相應(yīng)的修改,將代碼中的所有全局變量和應(yīng)用程序編程接口(API,application programming interface)函數(shù)等全局?jǐn)?shù)據(jù)提取出來(lái)保存在全局?jǐn)?shù)據(jù)區(qū)。然后,在中間語(yǔ)言層面將所有功能函數(shù)以數(shù)組的形式保存起來(lái),并將功能函數(shù)的調(diào)用由直接調(diào)用改為間接調(diào)用的形式,添加Loader函數(shù),負(fù)責(zé)對(duì)功能函數(shù)進(jìn)行調(diào)用,同時(shí)構(gòu)建功能函數(shù)的動(dòng)態(tài)地址表,依據(jù)構(gòu)建的函數(shù)數(shù)組將所有函數(shù)代碼碎片分離到獨(dú)立的中間語(yǔ)言文件中。最后,將主函數(shù)、Loader函數(shù)、全局?jǐn)?shù)據(jù)區(qū)數(shù)據(jù)和分離的功能函數(shù)碎片作為一個(gè)整體進(jìn)行編譯,生成類PE文件。

3 碎片化技術(shù)模型建立

代碼碎片化技術(shù)有3個(gè)階段:函數(shù)代碼shell化、函數(shù)內(nèi)存布局隨機(jī)化、函數(shù)執(zhí)行動(dòng)態(tài)鏈接化。本文通過(guò)符號(hào)化形式建立碎片化的技術(shù)模型。

圖1 碎片化處理過(guò)程

Figure 1 The process of fragmentation

表1 函數(shù)fi中各元素定義

定義4 函數(shù)代碼shell化各映射關(guān)系定義如表2所示。

表2 代碼shell化各映射關(guān)系定義

定義7 函數(shù)執(zhí)行動(dòng)態(tài)鏈接化各映射關(guān)系定義如表3所示。

表3 動(dòng)態(tài)鏈接化各映射關(guān)系定義

代碼碎片化模型可以形式化地表示為

代碼碎片化由3個(gè)階段組成:函數(shù)代碼shell化,函數(shù)內(nèi)存布局隨機(jī)化以及函數(shù)執(zhí)行動(dòng)態(tài)鏈接化。每個(gè)階段都對(duì)程序進(jìn)行相應(yīng)的修改,具體算法如算法1所示。首先,對(duì)中間語(yǔ)言IRoriginal提取API函數(shù)和全局變量;然后,對(duì)API函數(shù)調(diào)用方式和全局變量訪問(wèn)方式進(jìn)行修改,接著,修改函數(shù)調(diào)用方式,并將函數(shù)碎片進(jìn)行分離,同時(shí)生成動(dòng)態(tài)地址表;最后,通過(guò)Loader函數(shù)實(shí)現(xiàn)對(duì)分離的函數(shù)碎片進(jìn)行調(diào)用。

算法1 代碼碎片化算法

輸入 原始中間語(yǔ)言文件IRoriginal

輸出 碎片化處理后的中間語(yǔ)言文件IRfragment

begin

2) ArrayFuncInfoList, ArrayTableList;

3) procedure Shell(module)

4) GetGVData(module)/*全局?jǐn)?shù)據(jù)聚合*/

5) RetriveGVDataCall()/*修改全局?jǐn)?shù)據(jù)調(diào)用方式*/

6) end procedure

7) procedure GetGVData(module)

9) GV_INFO*oGV = new GV_INFO(GV);

11) API_INFO*oImportFn = new API_INFO(ImportFn);

13) end foreach

16) end procedure

17) procedure RetriveGVDataCall()

19) foreach GV_User in gv_info's Users

20) /*得到該變量在全局?jǐn)?shù)據(jù)區(qū)中的位置*/;

21) var GV_Addr = CreateGetElementPtr(GlobalStruct, index)

22) /*替換原全局變量的使用 */

23) GV_User.ReplaceUseWith(GV, GV_Addr);

24) end foreach

25) end foreach

27) foreach API_User in api_info's Users

28) /*得到該變量在全局?jǐn)?shù)據(jù)區(qū)中的位置*/;

29) var API_Addr = CreateGetElementPtr(GlobalStruct, index);

30) /*讀取該地址存儲(chǔ)的數(shù)據(jù)*/

31) var API_Addr_Value = CreateLoadMemory(API_Addr);

32) /*替換原API的使用 */

33) API_User.ReplaceUseWith (API, API_ Addr_Value);

34) end foreach

35) end foreach

36) end procedure

37) procedure Seperate(module)

39) GenerateDynAddrTable()/*初步生成動(dòng)態(tài)地址表*/

40) foreach CustomerFn in FuncInfoList

41) SeperateFragment(CustomerFn)/*分離功能函數(shù)碎片*/

42) end foreach

43) end procedure

44) procedure ModifyCallFunc(module)

45) CollectFunc(module, FuncInfoList) /*收集每個(gè)功能函數(shù)保存在結(jié)構(gòu)體中*/

46) foreach CustomerFn in FuncInfoList

47) foreach UserInst in CustomerFn's Users

48) CreateCallOrInvoke(NewUserInst, Params)/*創(chuàng)建新的指令*/

49) UserInst.RemovefromFunction()/*刪除原指令*/

50) end foreach

51) end foreach

52) end procedure

53) procedure GenerateDynAddrTable()

54) foreach CustomerFn in FuncInfoList

55) GenerateTable(TableList) /*初步生成動(dòng)態(tài)地址表*/

56) end foreach

57) end procedure

58) procedure DynamicLink()

59) addLoader()/*添加Loader函數(shù)*/

60) foreach CustomerFn in FuncInfoList

61) Loader(CustomerFn) /*動(dòng)態(tài)調(diào)用功能函數(shù)*/

62) end foreach

63) end procedure

end

4 碎片化技術(shù)流程設(shè)計(jì)

圖2 碎片化技術(shù)基本流程

Figure 2 The basic process of fragmentation technology

4.1 代碼shell化變形

代碼shell化變形需要解決兩個(gè)關(guān)鍵問(wèn)題。

1) 生成的碎片代碼必須具有位置無(wú)關(guān)性,即碎片代碼可以在任意內(nèi)存空間中運(yùn)行,碎片代碼對(duì)內(nèi)存地址的引用及跳轉(zhuǎn)操作只依賴碎片代碼的基址。

2) 碎片代碼需要自行解決對(duì)外部函數(shù)的引用,即碎片代碼需要自行索引系統(tǒng)函數(shù)的地址。

圖3 shell化變形過(guò)程

Figure 3 The process of Shell deformation

通過(guò)對(duì)IR文件的分析和變形,分別完成了全局?jǐn)?shù)據(jù)區(qū)和結(jié)構(gòu)體的構(gòu)建、函數(shù)重定位的處理和位置無(wú)關(guān)變形。在這個(gè)過(guò)程中,生成的全局?jǐn)?shù)據(jù)以內(nèi)聯(lián)匯編宏代碼的方式保存在生成的頭文件中,同時(shí)引導(dǎo)文件內(nèi)包括負(fù)責(zé)全局?jǐn)?shù)據(jù)初始化和函數(shù)地址重定位的功能函數(shù)。因此,頭文件和引導(dǎo)文件需要同變形后的IR文件合并編譯鏈接。經(jīng)過(guò)函數(shù)簽名修改后的IR文件,默認(rèn)的入口函數(shù)符號(hào)已經(jīng)發(fā)生變化,不再被鏈接器識(shí)別。因此,在合并編譯之前,需要新建IR文件的入口函數(shù),該函數(shù)負(fù)責(zé)調(diào)用全局?jǐn)?shù)據(jù)初始化函數(shù)和原入口函數(shù)。

4.2 函數(shù)碎片分離

圖4 代碼碎片分離過(guò)程

Figure 4 The process of code fragmentation

算法2 功能函數(shù)分離算法

begin

1) foreach Fn in FuncList

2) SeparaeProcess(Fn)

3) end foreach

4) procedure SeparateProcess(Func)

5) if FuncCallNum>1 /*處理調(diào)用函數(shù)數(shù)量大于1的情況*/

6) separate(Func)/*分離函數(shù)*/

7) end if

8) if FuncCallNum == 1 /*處理調(diào)用函數(shù)數(shù)量等于1的情況*/

9) ParentNode = search(Func)/*回溯父節(jié)點(diǎn)*/

10) if ParentNode is main

11) separate(Func)

12) end if

13) if ParentNodeCallNum> 1/*處理父節(jié)點(diǎn)調(diào)用函數(shù)數(shù)量大于1的情況*/

14) separate(ParentNode& &Func)/*分離父節(jié)點(diǎn)與其子節(jié)點(diǎn)*/

15) end if

16) if ParentNodeCallNum == 1

17) SeparateProcess(ParentNode) /*遞歸處理*/

18) end if

19) end if

20) end procedure

end

4.3 碎片代碼執(zhí)行時(shí)動(dòng)態(tài)鏈接

圖5 功能函數(shù)調(diào)用流程

Figure 5 The process of function call

5 原型系統(tǒng)

根據(jù)代碼碎片化技術(shù)設(shè)計(jì)流程,設(shè)計(jì)實(shí)現(xiàn)了代碼碎片化原型系統(tǒng),如圖6所示,該系統(tǒng)主要由3個(gè)模塊組成:代碼shell化變形模塊、代碼碎片分離模塊和代碼碎片動(dòng)態(tài)鏈接模塊。

圖6 代碼碎片化原型系統(tǒng)

Figure 6 Code fragmentation prototype system

代碼shell化模塊實(shí)現(xiàn)對(duì)程序源碼中的全局?jǐn)?shù)據(jù)進(jìn)行提取,保存到統(tǒng)一的全局?jǐn)?shù)據(jù)區(qū)中,并實(shí)現(xiàn)對(duì)全局?jǐn)?shù)據(jù)引用方式修改,在全局?jǐn)?shù)據(jù)區(qū)中通過(guò)“地址+索引”的方式實(shí)現(xiàn)對(duì)全局?jǐn)?shù)據(jù)的引用。

代碼碎片分離模塊實(shí)現(xiàn)對(duì)功能函數(shù)代碼碎片的分離,是原型系統(tǒng)的關(guān)鍵。首先,在中間語(yǔ)言層面通過(guò)LLVM接口獲取所有功能函數(shù),并修改對(duì)功能函數(shù)的調(diào)用方式,由直接調(diào)用修改為間接調(diào)用;然后,根據(jù)功能函數(shù)列表構(gòu)建動(dòng)態(tài)地址表;最后,通過(guò)LLVM編譯平臺(tái)將功能函數(shù)實(shí)體分離為代碼碎片,寫入獨(dú)立的中間語(yǔ)言文件中。

代碼碎片動(dòng)態(tài)鏈接模塊完成代碼碎片的動(dòng)態(tài)鏈接,這需要在主函數(shù)之外自動(dòng)添加一個(gè)Loader加載函數(shù),負(fù)責(zé)對(duì)分離后的代碼碎片進(jìn)行動(dòng)態(tài)調(diào)用,同時(shí)實(shí)現(xiàn)對(duì)動(dòng)態(tài)地址表的動(dòng)態(tài)填充。

6 實(shí)驗(yàn)

代碼碎片化技術(shù)實(shí)現(xiàn)了對(duì)PE文件的結(jié)構(gòu)布局的改變,通過(guò)該技術(shù)產(chǎn)生的類PE文件在代碼段中存在主函數(shù)和加載函數(shù)兩部分,其他功能函數(shù)以碎片的形式保存,通過(guò)間接調(diào)用的形式調(diào)用。因此,代碼碎片化技術(shù)能夠有效增加逆向攻擊者逆向分析的難度。目前學(xué)術(shù)界和工業(yè)界尚未提出一套合理有效的方法來(lái)評(píng)測(cè)代碼碎片化技術(shù)的強(qiáng)度,因此這里從程序執(zhí)行的角度來(lái)說(shuō)明該技術(shù)對(duì)軟件的保護(hù)效果。

本文選取實(shí)驗(yàn)環(huán)境為Windows7操作系統(tǒng),Intel I7 2.6 GHz CPU,4 GB內(nèi)存;Windows8操作系統(tǒng),Intel I7 2.6 GHz CPU,4 GB內(nèi)存;Windows10操作系統(tǒng),Intel I7 2.6 GHz CPU,4 GB內(nèi)存。選用的測(cè)試集由rsa、rc4、MD5、aes、des、sm4、sha256、gzip、huffman、Huffcomprs這10個(gè)程序組成,測(cè)試集的基本信息如表4所示,分別記錄代碼行數(shù)、函數(shù)數(shù)量和程序功能。

表4 測(cè)試集基本信息

對(duì)程序進(jìn)行碎片化保護(hù)后需要對(duì)每個(gè)程序的可用性進(jìn)行測(cè)試,分別在Windows7、Windows8、Windows10操作系統(tǒng)下進(jìn)行測(cè)試,代碼碎片化保護(hù)之后所有程序功能均正常。

針對(duì)原型系統(tǒng),采用3個(gè)指標(biāo)對(duì)原型系統(tǒng)進(jìn)行衡量,分別是導(dǎo)入函數(shù)變化、函數(shù)在內(nèi)存中的布局與間接調(diào)用在程序中函數(shù)調(diào)用的比例。

函數(shù)導(dǎo)入表是記錄程序所用到的其他模塊的導(dǎo)出符號(hào)的地址、名稱和序號(hào)。在程序執(zhí)行時(shí)導(dǎo)入函數(shù)是與位置有關(guān)的,代碼碎片化技術(shù)需要實(shí)現(xiàn)程序的位置無(wú)關(guān)化,消除導(dǎo)入函數(shù)的位置有關(guān)性。通過(guò)比較碎片化前后導(dǎo)入函數(shù)數(shù)量的變化能夠體現(xiàn)代碼碎片化的位置無(wú)關(guān)化,如表5所示。

表5 導(dǎo)入函數(shù)數(shù)量變化

對(duì)于函數(shù)在內(nèi)存中的布局,以gzip程序?yàn)槔?,記錄程序?zhí)行30次zip函數(shù)在內(nèi)存中的加載位置,如圖7所示,zip函數(shù)在程序每次執(zhí)行時(shí)在內(nèi)存中的加載位置都不同,體現(xiàn)函數(shù)內(nèi)存布局的隨機(jī)化。

圖7 gzip程序中zip函數(shù)的內(nèi)存布局

Figure 7 The memory layout of the zip function in the gzip program

表6 程序中間接調(diào)用比例

函數(shù)碎片是在執(zhí)行時(shí)通過(guò)動(dòng)態(tài)鏈接的形式進(jìn)行調(diào)用的,調(diào)用方式由直接調(diào)用修改為間接調(diào)用,因此,對(duì)程序進(jìn)行代碼碎片化后,程序中間接調(diào)用的比例會(huì)有所增加,如圖8所示。

圖8 程序中間接調(diào)用比例變化

Figure 8 Changes in the proportion of indirect calls

表7 碎片化前后時(shí)間開銷變化

7 結(jié)束語(yǔ)

代碼碎片化技術(shù)對(duì)代碼的保護(hù)是通過(guò)將功能函數(shù)分離并獨(dú)立編譯成能夠在內(nèi)存中任意位置執(zhí)行的碎片,通過(guò)動(dòng)態(tài)加載函數(shù)碎片實(shí)現(xiàn)對(duì)功能函數(shù)的動(dòng)態(tài)執(zhí)行。攻擊者通過(guò)靜態(tài)分析碎片化保護(hù)后的程序時(shí),只能實(shí)現(xiàn)對(duì)主函數(shù)和加載函數(shù)的分析,無(wú)法分析以碎片存在的功能函數(shù)。當(dāng)攻擊者通過(guò)動(dòng)態(tài)調(diào)試工具對(duì)程序進(jìn)行動(dòng)態(tài)調(diào)試時(shí),只能跟蹤調(diào)試主函數(shù)和加載函數(shù)的控制流,無(wú)法對(duì)碎片中的控制流進(jìn)行跟蹤,大大增加了程序逆向分析的難度。通過(guò)實(shí)驗(yàn)分析,碎片化技術(shù)能夠?qū)崿F(xiàn)函數(shù)碎片的內(nèi)存布局隨機(jī)化,碎片化保護(hù)后的程序間接調(diào)用比例有所增加,通過(guò)將函數(shù)的直接調(diào)用修改為間接調(diào)用,能夠?qū)崿F(xiàn)對(duì)函數(shù)碎片執(zhí)行的動(dòng)態(tài)鏈接。同時(shí),代碼碎片化技術(shù)有很多不完善的地方??刂屏魍暾苑治鲈诔绦蚰嫦蚍治鲋芯哂兄匾饔茫磥?lái)將針對(duì)模糊函數(shù)與函數(shù)之間的控制流,增加程序的控制流完整性分析的難度作進(jìn)一步研究。

函數(shù)單個(gè)調(diào)用鏈的函數(shù)組采取以非內(nèi)聯(lián)的形式進(jìn)行處理,將每個(gè)函數(shù)單獨(dú)碎片化,將函數(shù)組中的函數(shù)內(nèi)聯(lián)化為一個(gè)函數(shù)是減少程序時(shí)間開銷的有效手段,是將這些函數(shù)單獨(dú)處理的進(jìn)階措施。程序因間接調(diào)用的增加而造成的攻擊面增加問(wèn)題,將從兩個(gè)方面進(jìn)行研究:一方面,采取隨機(jī)轉(zhuǎn)換策略,隨機(jī)選取部分函數(shù)進(jìn)行碎片化,避免間接調(diào)用增加過(guò)多;另一方面,引入垃圾函數(shù)調(diào)用,平衡因碎片化而造成的間接調(diào)用比例失衡。軟件升級(jí)也是需要考慮的問(wèn)題,對(duì)于以下載二進(jìn)制補(bǔ)丁和匯編補(bǔ)丁的方式進(jìn)行更新的軟件,需要作進(jìn)一步研究。

[1] 許團(tuán), 屈蕾蕾, 石文昌. 基于結(jié)構(gòu)特征的二進(jìn)制代碼安全缺陷分析模型[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2017, 3(9): 31-39.

XU T, QU L L, SHI W C. Analysis model of binary code security flaws based on structure characteristics[J]. Chinese Journal of Network and Information Security, 2017, 3(9): 31-39.

[2] 孫博文, 黃炎裔, 溫俏琨, 等. 基于靜態(tài)多特征融合的惡意軟件分類方法[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2017, 3(11): 68-76.

SUN B W, HUANG Y Y, WEN Q K, et al. Malware classification method based on static multiple-feature fusion[J]. Chinese Journal of Network and Information Security, 2017, 3(11): 68-76.

[3] 李偉明, 鄒德清, 孫國(guó)忠. 針對(duì)惡意代碼的連續(xù)內(nèi)存鏡像分析方法[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2017, 3(2): 20-30.

LI W M, ZOU D Q, SUN G Z. Successive memory image analysis method for malicious codes[J]. Chinese Journal of Network and Information Security, 2017, 3(2): 20-30.

[4] 王健. 基于完整性驗(yàn)證和殼的軟件保護(hù)技術(shù)研究[D]. 太原: 中北大學(xué), 2018.

WANG J. Research on software protection technology based on in-tegrity verification and shell[D]. Taiyuan: North China University, 2018.

[5] 杜春來(lái), 孔丹丹, 王景中, 等.一種基于指令虛擬化的代碼保護(hù)模型[J]. 信息網(wǎng)絡(luò)安全, 2017(2): 22-28.

DU C L, KONG D D, WANG J Z, et al. A code protection model based on instruction virtualization[J]. Netinfo Security, 2017(2): 22-28.

[6] BALACHANDRAN V, EMMANUEL S, KEONG N. Obfuscation by code fragmentation to evade reverse engineering[C]//2014 IEEE International Conference on Systems, Man, and Cybernetics (SMC. 2014.

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

[8] LASZLO T, KISS A. Obfuscating C++ programs via control flow flattening[R]. 2009.

[9] JUNOD P, RINALDINI J, WEHRLI J, et al. Obfusca-tor- LLVM?software protection for the masses[C]//2015 IEEE/ACM 1st International Workshop on Software Protection. 2015: 3-9.

[10] DAVIDSON J, HILL J, KNIGHT J. Protection of software-based survivability mechanisms[C]//2013 43rd Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN). 2001: 193-193.

[11] WANG C, HILL J, KNIGHT J. Software tamper resistance: obstructing static analysis of programs[J]. 2000.

[12] WANG C.A security architecture for survivability mechanisms[D]. Virginia: University of Virginia,School of Engineering and Applied Science, 2000.

[13] 蔣華, 劉勇, 王鑫. 基于控制流的代碼混淆技術(shù)研究[J]. 計(jì)算機(jī)應(yīng)用研究, 2013, 30(3): 897-899.

JIANG H, LIU Y, WANG X. Code confusion technology research based on control flow[J]. Application Research of Computers, 2013, 30(3): 897-899.

[14] 王旭. 基于目標(biāo)代碼的控制流混淆技術(shù)研究[D]. 北京: 北京郵電大學(xué), 2013.

WANG X. Research on control flow obfuscation technology based on object code[D]. Beijing: Beijing University of Posts and Telecommunications, 2013.

[15] 王豐峰, 張濤, 徐偉光, 等. 進(jìn)程控制流劫持攻擊與防御技術(shù)綜述[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2019, 5(6): 10-20.

WANG F F, ZHANG T, XU W G, et al. Overview of control-flow hijacking attack and defense techniques for process[J]. Chinese Journal of network and information security, 2019, 5(6): 10-20.

[16] 喬向東, 郭戎瀟, 趙勇. 代碼復(fù)用對(duì)抗技術(shù)研究進(jìn)展[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2018, 4(3): 1-12.

QIAO X D, GUO R X, ZHAO Y. Research progress in code reuse attacking and defending[J]. Chinese Journal of Network and Information Security, 2018, 4(3): 1-12.

Software protection technology based on code fragmentation

GUO Jingcheng, SHU Hui, XIONG Xiaobing, KANG Fei

Information Engineering University, Zhengzhou 450001, China

Aiming at the shortcomings of the current software protection technology, a code fragmentation technology was proposed. This technology is a new software protection technology that takes functions as units, shells functions, randomizes memory layout, and performs dynamic linking. The code shellization realizes the position-independent morphing of code fragments, the memory layout randomizes the random memory loading of the code fragments, the dynamic linking realizes the dynamic execution of the code fragments, and the program fragmentation processing is achieved through the above three links. The experiments show that the code fragmentation technology can not only realize the randomization of the memory location of function fragments during program execution, but also the dynamic link execution of function fragments, increasing the difficulty of static reverse analysis and dynamic reverse debugging of the program, and improving the anti-reverse analysis ability of the program.

code fragmentation, software protection, separation, dynamic linking

The National Key R&D Program of China (2016YFB08011601)

TP309.5

A

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

郭京城(1994? ),男,山東濟(jì)南人,信息工程大學(xué)碩士生,主要研究方向?yàn)榫W(wǎng)絡(luò)安全與軟件保護(hù)。

舒輝(1974? ),男,江蘇鹽城人,博士,信息工程大學(xué)教授、博士生導(dǎo)師,主要研究方向?yàn)榫W(wǎng)絡(luò)安全、嵌入式系統(tǒng)分析與信息安全。

熊小兵(1985? ),男,江西豐城人,博士,信息工程大學(xué)副教授,主要研究方向?yàn)榫W(wǎng)絡(luò)安全。

康緋(1972? ),女,河南周口人,碩士,信息工程大學(xué)教授,主要研究方向?yàn)榫W(wǎng)絡(luò)信息安全。

論文引用格式:郭京城, 舒輝, 熊小兵, 等. 基于代碼碎片化的軟件保護(hù)技術(shù)[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2020, 6(6): 57-68.

GUO J C, SHU H, XIONG X B, et al. Software protection technology based on code fragmentation[J]. Chinese Journal of Network and Information Security, 2020, 6(6): 57-68.

2019?12?05;

2020?02?21

舒輝,shuhui@126.com

國(guó)家重點(diǎn)研發(fā)計(jì)劃(2016YFB08011601)

猜你喜歡
調(diào)用內(nèi)存代碼
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
“春夏秋冬”的內(nèi)存
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
基于內(nèi)存的地理信息訪問(wèn)技術(shù)
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
博湖县| 隆化县| 宽城| 湘阴县| 安国市| 成安县| 子长县| 东港市| 乃东县| 综艺| 砚山县| 天台县| 北京市| 洪湖市| 康乐县| 九江县| 温州市| 巢湖市| 抚州市| 新巴尔虎右旗| 盐边县| 界首市| 营口市| 宁河县| 绥阳县| 江阴市| 清涧县| 阳朔县| 瓦房店市| 鞍山市| 万山特区| 宿州市| 琼结县| 济宁市| 科技| 莆田市| 桐梓县| 扶风县| 甘孜| 二手房| 华亭县|