卿海軍,冀肖榆,陳麗萍
(1.2.梧州學院,廣西梧州543002;3.梧州市第一中學,廣西梧州 543002)
一種合并變量為數組的隱藏變量代碼迷惑方法
卿海軍1,冀肖榆2,陳麗萍3
(1.2.梧州學院,廣西梧州543002;3.梧州市第一中學,廣西梧州 543002)
變量在程序中起著承載信息的作用,因此隱藏變量的代碼迷惑能極大地混淆程序中的數據流程,但現有的一些實體更名迷惑技術不能有效地抵抗反迷惑攻擊。該文提出了一種合并變量為數組的隱藏變量的方法,提高了隱藏變量迷惑技術的強度與彈性,實驗結果表明該方法能有效地應對變量名替換攻擊。
數據迷惑;彈性;合并變量為數組
隨著軟件產業(yè)的快速發(fā)展,一方面涌現出了各種軟件應用,另一方面各產業(yè)對信息化需求欲加強烈,這兩方面的發(fā)展都促使軟件安全技術快速地發(fā)展,代碼迷惑技術又稱為代碼混淆技術,其是一種新的軟件安全技術,在保護知識產權方面有著重要作用。
根據迷惑算法針對的對象不同,可以將代碼迷惑分為類內迷惑和類間迷惑。類內迷惑實現的方式主要包括數據迷惑、控制流迷惑、切片迷惑等[1]。目前代碼迷惑技術有效性評價主要有以下幾個指標[2]:①迷惑的強度,該指標用來描述迷惑后的程序是否更難以理解、更加復雜。②迷惑的彈性,該指標用來描述迷惑后的程序能夠在何種程度上抵抗反迷惑程序的攻擊。③迷惑的代價,該指標用來度量程序迷惑后執(zhí)行時增加的時間和空間代價。
數據迷惑的原理是通過對常量、變量和數據結構這些程序的基本組成元素進行修改,增大攻擊者進行逆向工程的難度[2]。常見數據迷惑方法有以下一些:引進非法標識符用作變量名[3]、盡可能多地重用同一變量名、交換各組成元素的標識符[4]、將靜態(tài)數據轉換為與程序相關的數據、數組重構迷惑。但是上面的幾種迷惑方法結合度不夠緊密,導致其迷惑的強度與彈性都不高。文獻[5]基于此提出了相應的反迷惑方法,能較好地破解前面提及的迷惑方法。針對現有的一些數據迷惑強度與彈性不夠、不能有效抵御反迷惑的攻擊,本文提出了一種強度與彈性較高的代碼迷惑方法。
在該方法中將結合數據流迷惑和數據迷惑,并針對現有的一些反迷惑方法提出應對措施,使得合并變量為數組的迷惑方法能大大提高其強度與彈性。
源代碼片斷如下:合并變量為數組后的代碼如下:
上面展示了將源代碼中變量合并為數組后的變化情況,左右兩邊的代碼功能是一樣的,其中array數組的三個元素分別和變量a、b及c存在一一對應關系(如圖1(a)所示)。此時變量與元素之間的關系是一目了然的,代碼的功能也是非常清楚,沒有達到迷惑效果。當然變量和向量元素的映射不一定按照某一特定的順序,可以任意設定它們的映射關系,如圖1(b)所示。
圖1 變量和向量元素的映射關系
合并變量為數組并動態(tài)變換數組元素下標后的代碼如下:
在上述代碼中,同在一個數組的數組元素表現形式幾乎一致,這對于人工閱讀來說已不能輕易區(qū)分當前使用的是哪個元素,如果源代碼量較大的話,這樣的程序閱讀起來是相當困難的。但動態(tài)變換數組元素下標后,它的彈性仍然不夠好??梢允褂迷创a植入技術[6]在運行時將這些下標變量在某個具體位置的值收集起來,這樣就可以利用這些收集起來的信息進行還原。
提高合并變量為數組隱藏變量迷惑技術彈性后的代碼如下:
在上述代碼中巧妙地利用了源代碼植入必須引用下標表達式才能得出下標表達式的值,但在源程序中下標表達式的引用次數是受限制的,一旦多引用便會導致計算出錯誤的下標。如n.increase(5)-20當且僅當在array[n.increase(5)-20]=1這一句里使用才是應有的下標值,若再次引用則計算出的是錯誤的下標值,且它后面下標值也必會出錯,因為再次引用也就是多調用了一次增值函數,下標增加了一個值,結果會導致這以后所有下標值都會增加一個值,元素會全部錯位。n.increase(5)也不能連續(xù)被引用(上述代碼中increase()函數的實參都是交替出現的),否則也會計算出錯誤的下標,并且這以后的數組元素下標都會是不正確的值。迷惑后的代碼引進了一個新的類,它有一個成員i用來記錄數組元素下標的粗約變化情況(并不是數組元素的下標),它的初始值可以是任意的常數,其次它還有一個成員方法用來對下標變量增加一個值,在上述代碼中增加的值是6、9和8,當然也可以增加其他任意的常量值,在實際的應用中,可以采用文獻[7]提出的隱藏常量的方法把常量隱藏起來。
設方法m的局部變量集合為LocalVars(m),V為方法被迷惑后生成的向量,則采用該方法迷惑之前的變量和迷惑之后的變量構成一個映射f1,f1定義如下:f1:LocalVars(m)V(1)
將上述迷惑代碼中increase方法一般化得到f2(z)函數。
源程序經合并變量為數組迷惑方法迷惑之后,局部變量表現形式為V[f2(cn+1)-c1],V[f2(cn+2)-c2],…,V[f2(cn+n)-cn],這時候元素之間是通過下標來相互區(qū)分的,但是下標f2(cn+1)-c1,f2(cn+2) -c2,f2(cn+n)-cn是不可顯式計算的,且下標是不可多引用、連續(xù)引用的,正如前面提到的,一旦多引用或連續(xù)引用就會使程序陷入非?;靵y狀態(tài),這樣能保證變量之間徹底地混淆,而且能保證合并變量為數組迷惑方法彈性相當高。
在合并變量為數組時,可將低精度的變量先轉化為高精度的變量,再將這些同一種類型高精度的變量合并為一個數組,這樣做可以減少數組的個數,增加數組元素之間關系的復雜性。
合并變量為數組迷惑方法可以運用于方法參數,方法局部變量,類的成員變量,本文只考慮用于局部變量的情況。
對于本文提出的隱藏變量的代碼迷惑方法,我們在Java平臺上進行了編程實現,并進行了實驗驗證,實驗是針對源代碼進行的,每個實驗都劃分為預處理、變量信息收集和迷惑三個階段。
將要合并變量為數組的源代碼如下:
下頁圖2對上述源代碼分別采用了文獻[3]中的迷惑方法和本文提出的合并變量為數組的迷惑方法進行了迷惑處理。通過對下頁圖2的左右兩邊代碼的對比,可以發(fā)現在閱讀的困難性方面,右邊的代碼要遠遠高于左邊,在右邊的代碼中相同的數組元素表現形式不一致,元素之間的關系被徹底地混淆了。當然左邊代碼也能在一定程度上增加反編譯的困難性。
圖2 迷惑后的代碼
下頁圖3展示了采用ADAM工具對圖2的代碼進行反迷惑處理后的結果,通過對比可以發(fā)現合并變量為數組的迷惑方法在反迷惑后仍然保持迷惑性,因為ADAM工具只是替換了一下名字,迷惑的數量關系仍然保持存在,而采用文獻[3]方法的迷惑代碼已被反迷惑成功。所以合并變量為數組的迷惑方法能有效地對抗簡單更名(如ADAM)反迷惑攻擊,同時它還能對抗源代碼植入技術攻擊。
圖3 采用ADAM工具對圖2的迷惑代碼反迷惑后的結果
下頁圖4展示了采用反編譯器Jad對圖2的迷惑代碼進行反編譯后的結果,通過左右兩邊代碼的對比,可以發(fā)現采用文獻[3]方法的迷惑代碼經過反編譯后,只有成員變量的不能有效的反編譯,而局部變量都已經用新生成的變量名替換了,而采用合并變量為數組的代碼迷惑方法有效地將局部變量給混淆了,保持了局部變量迷惑的有效性。
圖4 采用Jad對圖2的迷惑代碼進行反編譯后的結果
本文在考慮現有的實體更名迷惑彈性不夠的情況下,提出了一種具有一定抵抗反迷惑攻擊能力的方法。該方法結合了數據流迷惑方法到數據迷惑當中,并巧妙地動態(tài)變換數組元素下標,從而很好地隱藏了變量,同時對下標的引用是調用某個函數,從而使得下標只能引用限定的次數,能有效應對源代碼植入的攻擊。當然該方法的迷惑代價可能會比較高,因為調用函數過于頻繁,這也是下一步值得研究的內容。
[1]王建民,等.Java程序混淆技術綜述[J].計算機學報,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]卿海軍,鐘誠,張蓮.基于源代碼植入的針對函數指針數組的反代碼迷惑[C]//2008計算機技術與應用進展.北京:中國科學技術大學出版社,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-),男,湖南邵陽人,梧州學院講師,碩士,研究方向:信息安全。
冀肖榆(1982-),男,廣西梧州人,梧州學院副教授,碩士,研究方向:旅游安全。
(責任編輯:覃華巧)
2014-03-06
梧州學院青年科研項目(2012D001)
陳麗萍(1980-),女,廣西梧州人,梧州市第一中學教師,研究方向:信息技術教育。