卿海軍,冀肖榆,陳麗萍
(1.2.梧州學(xué)院,廣西梧州543002;3.梧州市第一中學(xué),廣西梧州 543002)
一種合并變量為數(shù)組的隱藏變量代碼迷惑方法
卿海軍1,冀肖榆2,陳麗萍3
(1.2.梧州學(xué)院,廣西梧州543002;3.梧州市第一中學(xué),廣西梧州 543002)
變量在程序中起著承載信息的作用,因此隱藏變量的代碼迷惑能極大地混淆程序中的數(shù)據(jù)流程,但現(xiàn)有的一些實(shí)體更名迷惑技術(shù)不能有效地抵抗反迷惑攻擊。該文提出了一種合并變量為數(shù)組的隱藏變量的方法,提高了隱藏變量迷惑技術(shù)的強(qiáng)度與彈性,實(shí)驗(yàn)結(jié)果表明該方法能有效地應(yīng)對(duì)變量名替換攻擊。
數(shù)據(jù)迷惑;彈性;合并變量為數(shù)組
隨著軟件產(chǎn)業(yè)的快速發(fā)展,一方面涌現(xiàn)出了各種軟件應(yīng)用,另一方面各產(chǎn)業(yè)對(duì)信息化需求欲加強(qiáng)烈,這兩方面的發(fā)展都促使軟件安全技術(shù)快速地發(fā)展,代碼迷惑技術(shù)又稱為代碼混淆技術(shù),其是一種新的軟件安全技術(shù),在保護(hù)知識(shí)產(chǎn)權(quán)方面有著重要作用。
根據(jù)迷惑算法針對(duì)的對(duì)象不同,可以將代碼迷惑分為類內(nèi)迷惑和類間迷惑。類內(nèi)迷惑實(shí)現(xiàn)的方式主要包括數(shù)據(jù)迷惑、控制流迷惑、切片迷惑等[1]。目前代碼迷惑技術(shù)有效性評(píng)價(jià)主要有以下幾個(gè)指標(biāo)[2]:①迷惑的強(qiáng)度,該指標(biāo)用來(lái)描述迷惑后的程序是否更難以理解、更加復(fù)雜。②迷惑的彈性,該指標(biāo)用來(lái)描述迷惑后的程序能夠在何種程度上抵抗反迷惑程序的攻擊。③迷惑的代價(jià),該指標(biāo)用來(lái)度量程序迷惑后執(zhí)行時(shí)增加的時(shí)間和空間代價(jià)。
數(shù)據(jù)迷惑的原理是通過(guò)對(duì)常量、變量和數(shù)據(jù)結(jié)構(gòu)這些程序的基本組成元素進(jìn)行修改,增大攻擊者進(jìn)行逆向工程的難度[2]。常見(jiàn)數(shù)據(jù)迷惑方法有以下一些:引進(jìn)非法標(biāo)識(shí)符用作變量名[3]、盡可能多地重用同一變量名、交換各組成元素的標(biāo)識(shí)符[4]、將靜態(tài)數(shù)據(jù)轉(zhuǎn)換為與程序相關(guān)的數(shù)據(jù)、數(shù)組重構(gòu)迷惑。但是上面的幾種迷惑方法結(jié)合度不夠緊密,導(dǎo)致其迷惑的強(qiáng)度與彈性都不高。文獻(xiàn)[5]基于此提出了相應(yīng)的反迷惑方法,能較好地破解前面提及的迷惑方法。針對(duì)現(xiàn)有的一些數(shù)據(jù)迷惑強(qiáng)度與彈性不夠、不能有效抵御反迷惑的攻擊,本文提出了一種強(qiáng)度與彈性較高的代碼迷惑方法。
在該方法中將結(jié)合數(shù)據(jù)流迷惑和數(shù)據(jù)迷惑,并針對(duì)現(xiàn)有的一些反迷惑方法提出應(yīng)對(duì)措施,使得合并變量為數(shù)組的迷惑方法能大大提高其強(qiáng)度與彈性。
源代碼片斷如下:合并變量為數(shù)組后的代碼如下:
上面展示了將源代碼中變量合并為數(shù)組后的變化情況,左右兩邊的代碼功能是一樣的,其中array數(shù)組的三個(gè)元素分別和變量a、b及c存在一一對(duì)應(yīng)關(guān)系(如圖1(a)所示)。此時(shí)變量與元素之間的關(guān)系是一目了然的,代碼的功能也是非常清楚,沒(méi)有達(dá)到迷惑效果。當(dāng)然變量和向量元素的映射不一定按照某一特定的順序,可以任意設(shè)定它們的映射關(guān)系,如圖1(b)所示。
圖1 變量和向量元素的映射關(guān)系
合并變量為數(shù)組并動(dòng)態(tài)變換數(shù)組元素下標(biāo)后的代碼如下:
在上述代碼中,同在一個(gè)數(shù)組的數(shù)組元素表現(xiàn)形式幾乎一致,這對(duì)于人工閱讀來(lái)說(shuō)已不能輕易區(qū)分當(dāng)前使用的是哪個(gè)元素,如果源代碼量較大的話,這樣的程序閱讀起來(lái)是相當(dāng)困難的。但動(dòng)態(tài)變換數(shù)組元素下標(biāo)后,它的彈性仍然不夠好??梢允褂迷创a植入技術(shù)[6]在運(yùn)行時(shí)將這些下標(biāo)變量在某個(gè)具體位置的值收集起來(lái),這樣就可以利用這些收集起來(lái)的信息進(jìn)行還原。
提高合并變量為數(shù)組隱藏變量迷惑技術(shù)彈性后的代碼如下:
在上述代碼中巧妙地利用了源代碼植入必須引用下標(biāo)表達(dá)式才能得出下標(biāo)表達(dá)式的值,但在源程序中下標(biāo)表達(dá)式的引用次數(shù)是受限制的,一旦多引用便會(huì)導(dǎo)致計(jì)算出錯(cuò)誤的下標(biāo)。如n.increase(5)-20當(dāng)且僅當(dāng)在array[n.increase(5)-20]=1這一句里使用才是應(yīng)有的下標(biāo)值,若再次引用則計(jì)算出的是錯(cuò)誤的下標(biāo)值,且它后面下標(biāo)值也必會(huì)出錯(cuò),因?yàn)樵俅我靡簿褪嵌嗾{(diào)用了一次增值函數(shù),下標(biāo)增加了一個(gè)值,結(jié)果會(huì)導(dǎo)致這以后所有下標(biāo)值都會(huì)增加一個(gè)值,元素會(huì)全部錯(cuò)位。n.increase(5)也不能連續(xù)被引用(上述代碼中increase()函數(shù)的實(shí)參都是交替出現(xiàn)的),否則也會(huì)計(jì)算出錯(cuò)誤的下標(biāo),并且這以后的數(shù)組元素下標(biāo)都會(huì)是不正確的值。迷惑后的代碼引進(jìn)了一個(gè)新的類,它有一個(gè)成員i用來(lái)記錄數(shù)組元素下標(biāo)的粗約變化情況(并不是數(shù)組元素的下標(biāo)),它的初始值可以是任意的常數(shù),其次它還有一個(gè)成員方法用來(lái)對(duì)下標(biāo)變量增加一個(gè)值,在上述代碼中增加的值是6、9和8,當(dāng)然也可以增加其他任意的常量值,在實(shí)際的應(yīng)用中,可以采用文獻(xiàn)[7]提出的隱藏常量的方法把常量隱藏起來(lái)。
設(shè)方法m的局部變量集合為L(zhǎng)ocalVars(m),V為方法被迷惑后生成的向量,則采用該方法迷惑之前的變量和迷惑之后的變量構(gòu)成一個(gè)映射f1,f1定義如下:f1:LocalVars(m)V(1)
將上述迷惑代碼中increase方法一般化得到f2(z)函數(shù)。
源程序經(jīng)合并變量為數(shù)組迷惑方法迷惑之后,局部變量表現(xiàn)形式為V[f2(cn+1)-c1],V[f2(cn+2)-c2],…,V[f2(cn+n)-cn],這時(shí)候元素之間是通過(guò)下標(biāo)來(lái)相互區(qū)分的,但是下標(biāo)f2(cn+1)-c1,f2(cn+2) -c2,f2(cn+n)-cn是不可顯式計(jì)算的,且下標(biāo)是不可多引用、連續(xù)引用的,正如前面提到的,一旦多引用或連續(xù)引用就會(huì)使程序陷入非?;靵y狀態(tài),這樣能保證變量之間徹底地混淆,而且能保證合并變量為數(shù)組迷惑方法彈性相當(dāng)高。
在合并變量為數(shù)組時(shí),可將低精度的變量先轉(zhuǎn)化為高精度的變量,再將這些同一種類型高精度的變量合并為一個(gè)數(shù)組,這樣做可以減少數(shù)組的個(gè)數(shù),增加數(shù)組元素之間關(guān)系的復(fù)雜性。
合并變量為數(shù)組迷惑方法可以運(yùn)用于方法參數(shù),方法局部變量,類的成員變量,本文只考慮用于局部變量的情況。
對(duì)于本文提出的隱藏變量的代碼迷惑方法,我們?cè)贘ava平臺(tái)上進(jìn)行了編程實(shí)現(xiàn),并進(jìn)行了實(shí)驗(yàn)驗(yàn)證,實(shí)驗(yàn)是針對(duì)源代碼進(jìn)行的,每個(gè)實(shí)驗(yàn)都劃分為預(yù)處理、變量信息收集和迷惑三個(gè)階段。
將要合并變量為數(shù)組的源代碼如下:
下頁(yè)圖2對(duì)上述源代碼分別采用了文獻(xiàn)[3]中的迷惑方法和本文提出的合并變量為數(shù)組的迷惑方法進(jìn)行了迷惑處理。通過(guò)對(duì)下頁(yè)圖2的左右兩邊代碼的對(duì)比,可以發(fā)現(xiàn)在閱讀的困難性方面,右邊的代碼要遠(yuǎn)遠(yuǎn)高于左邊,在右邊的代碼中相同的數(shù)組元素表現(xiàn)形式不一致,元素之間的關(guān)系被徹底地混淆了。當(dāng)然左邊代碼也能在一定程度上增加反編譯的困難性。
圖2 迷惑后的代碼
下頁(yè)圖3展示了采用ADAM工具對(duì)圖2的代碼進(jìn)行反迷惑處理后的結(jié)果,通過(guò)對(duì)比可以發(fā)現(xiàn)合并變量為數(shù)組的迷惑方法在反迷惑后仍然保持迷惑性,因?yàn)锳DAM工具只是替換了一下名字,迷惑的數(shù)量關(guān)系仍然保持存在,而采用文獻(xiàn)[3]方法的迷惑代碼已被反迷惑成功。所以合并變量為數(shù)組的迷惑方法能有效地對(duì)抗簡(jiǎn)單更名(如ADAM)反迷惑攻擊,同時(shí)它還能對(duì)抗源代碼植入技術(shù)攻擊。
圖3 采用ADAM工具對(duì)圖2的迷惑代碼反迷惑后的結(jié)果
下頁(yè)圖4展示了采用反編譯器Jad對(duì)圖2的迷惑代碼進(jìn)行反編譯后的結(jié)果,通過(guò)左右兩邊代碼的對(duì)比,可以發(fā)現(xiàn)采用文獻(xiàn)[3]方法的迷惑代碼經(jīng)過(guò)反編譯后,只有成員變量的不能有效的反編譯,而局部變量都已經(jīng)用新生成的變量名替換了,而采用合并變量為數(shù)組的代碼迷惑方法有效地將局部變量給混淆了,保持了局部變量迷惑的有效性。
圖4 采用Jad對(duì)圖2的迷惑代碼進(jìn)行反編譯后的結(jié)果
本文在考慮現(xiàn)有的實(shí)體更名迷惑彈性不夠的情況下,提出了一種具有一定抵抗反迷惑攻擊能力的方法。該方法結(jié)合了數(shù)據(jù)流迷惑方法到數(shù)據(jù)迷惑當(dāng)中,并巧妙地動(dòng)態(tài)變換數(shù)組元素下標(biāo),從而很好地隱藏了變量,同時(shí)對(duì)下標(biāo)的引用是調(diào)用某個(gè)函數(shù),從而使得下標(biāo)只能引用限定的次數(shù),能有效應(yīng)對(duì)源代碼植入的攻擊。當(dāng)然該方法的迷惑代價(jià)可能會(huì)比較高,因?yàn)檎{(diào)用函數(shù)過(guò)于頻繁,這也是下一步值得研究的內(nèi)容。
[1]王建民,等.Java程序混淆技術(shù)綜述[J].計(jì)算機(jī)學(xué)報(bào),2011(34):1578-1588.
[2]Christian Collberg,Clark Thomborson,Douglas Low.ATaxonomyofObfuscatingTransformations[R].Technical Report 148,Department ofComputerScience,UniversityofAuckland.July1996.
[3]Jien-Tsai Chan,Wuu Yang.Advanced obfuscation techniques for java byte-code[J].The Journal of Systems and Software,2004,71(12): 1-10.
[4]de Roo A,v.den Oord L.Stealthy obfuscation techniques:misleading the pirates[EB/OL].http://www.home.cs.utwente.nl/~oord/ paper.pdf,2007-02-12.
[5]S.Cimato,A.D.Santis,and U.F.Petrillo.Overcomingthe obfuscation ofjava programs byidentifier renaming[J].The Journal ofSystems and Software,2005(78):60-72.
[6]卿海軍,鐘誠(chéng),張蓮.基于源代碼植入的針對(duì)函數(shù)指針數(shù)組的反代碼迷惑[C]//2008計(jì)算機(jī)技術(shù)與應(yīng)用進(jìn)展.北京:中國(guó)科學(xué)技術(shù)大學(xué)出版社,2008:1095-1099.
[7]L.Ertaul,S.Venkatesh.Novel Obfuscation Algorithms for SoftwareSecurity[C]//Proceedings of the 2005 International Conference onSoftware EngineeringResearch and Practice(SERP’05).CSREAPress,2005:209-215.
An Obfuscation Method of Merging Variables to an Array
Qing Haijun1,Ji Xiaoyu2,Chen Liping3
(1.2.Wuzhou University,Wuzhou 543002,China;
3.No.1 Middle School of Wuzhou,Wuzhou 543002,China)
Since some information is stored in variables in a program,hiding variables can obfuscate the data stream to a great extent.However,the existing entity rename code obfuscation methods can’t resist the attack of obfuscations.A code obfuscation method merging variable to array is proposed in this paper.The experiment results show that it can increase the resilience and potency of hiding variable obfuscation method and it can resist the attack of auto substituting the variable.
Data obfuscation;Resilience;Merging variable to an array
TP311.1
A
1673-8535(2014)03-0014-08
卿海軍(1979-),男,湖南邵陽(yáng)人,梧州學(xué)院講師,碩士,研究方向:信息安全。
冀肖榆(1982-),男,廣西梧州人,梧州學(xué)院副教授,碩士,研究方向:旅游安全。
(責(zé)任編輯:覃華巧)
2014-03-06
梧州學(xué)院青年科研項(xiàng)目(2012D001)
陳麗萍(1980-),女,廣西梧州人,梧州市第一中學(xué)教師,研究方向:信息技術(shù)教育。