類分裂的代碼混淆技術(shù)論文

時間:2022-09-17 05:41:00

導(dǎo)語:類分裂的代碼混淆技術(shù)論文一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

類分裂的代碼混淆技術(shù)論文

摘要包含有大部分或全部源碼信息的軟件發(fā)行版本的普及,比如易被反編譯成源碼的Java字節(jié)代碼,增加了軟件被惡意逆向工程攻擊的可能。文章介紹了面向?qū)ο笳Z言的類分裂混淆方法,同時也給出了混淆技術(shù)的定義、分類和評判標(biāo)準(zhǔn)。

關(guān)鍵詞逆向工程;代碼混淆;軟件保護;類分裂

1引言

計算機軟件的安全一直是軟件企業(yè)和相關(guān)研究領(lǐng)域的關(guān)注重點,當(dāng)前存在的軟件保護技術(shù)分別有硬件輔助保護、序列號保護、加密保護、服務(wù)器認(rèn)證、防篡改以及代碼混淆等。隨著JAVA語言、逆向工程的迅速發(fā)展和普遍運用以及惡意主機對軟件的逆向分析等突出安全問題的不斷涌現(xiàn),使得代碼混淆,這一新的保護軟件安全的技術(shù)正越來越受到人們的重視。

2代碼混淆的定義和分類

2.1代碼混淆定義

給定一個程序P、策略T,經(jīng)過混淆變換后得到程序P''''(見圖1)。此過程稱之為混淆變換,如果對程序進行一種功能保持的變換,變換后的程序擁有和原始程序相同的功能。更確切的說法應(yīng)該包含以下兩個條件:①如果P出錯終止或終止失敗,P''''不一定終止。②P和P''''在正常終止情況下,P''''必須產(chǎn)生與P相同的輸出。

所不同的是經(jīng)過轉(zhuǎn)換的P''''相較P更難于被靜態(tài)分析等逆向工程方法攻擊,即使被反編譯,生成的程序也難以被人閱讀和理解。

圖1代碼混淆

2.2代碼混淆分類

根據(jù)混淆對象和對其進行操作的差別,可將代碼混淆技術(shù)分為布局(layout)混淆、控制(control)混淆、數(shù)據(jù)(data)混淆、預(yù)防(preventive)混淆等幾種。

(1)外形混淆。該類混淆主要包括對程序中的變量名、常量名、類名、方法名稱等標(biāo)識符作詞法上的變換改名和刪除程序中與執(zhí)行無關(guān)的調(diào)試信息、注釋、源碼格式等。

(2)控制混淆。該類混淆的目的是使得攻擊者對程序的控制流難以理解。主要包括打亂某段代碼本身邏輯關(guān)系的聚集混淆(AggregationTransformation)、把相關(guān)語句分散到程序不同位置并實現(xiàn)某項功能的次序混淆(OrderingTransformation)和隱藏真實執(zhí)行路徑的執(zhí)行混淆(ComputationTransformation)­­等。

(3)數(shù)據(jù)混淆。數(shù)據(jù)混淆的對象是程序中的數(shù)據(jù)域。它可細(xì)分為相關(guān)數(shù)據(jù)的儲存(Storage)與編碼(Encoding)方式的混淆、組合和拆分?jǐn)?shù)據(jù)的聚集(Aggregation)混淆、位序重計的次序(Ordering)混淆等。

(4)預(yù)防混淆。與前述混淆類型針對惡意用戶不同,預(yù)防混淆主要利用一些專用反編譯器的設(shè)計缺陷,以使這些反編譯器難以反向還原混淆之后的代碼。例如,反編譯器mocha對于Return后面的指令不進行反編譯,Hosemocha就是專門針對此缺陷,故意將代碼放在Return語句后面,從而使反編譯失效。

2.3類分裂

介紹完代碼混淆的分類后,接下來我將就面向?qū)ο笳Z言中的一種混淆技術(shù):類分裂(classsplitting)進行說明。首先對類分裂進行定義:類分裂是將一個初始(原)類用兩個或兩個以上的類來替換的混淆方法。對類分裂進行敘述前,我們規(guī)定以下相關(guān)使用術(shù)語的意義:

P:JAVA程序

Classes(P):P中一般類的集合

Interfaces(P):P中接口類的集合

ct:Class或Interface中的任意類

Methods(ct):ct中的成員函數(shù)的集合

Field(ct):ct中的成員變量的集合

注:Methods(ct),F(xiàn)ield(ct)不包括從父類繼承的成員函數(shù)和成員變量,而只包括:①當(dāng)前定義類中新定義的成員函數(shù)和成員變量。②當(dāng)前定義類所覆蓋的其父類的成員函數(shù)。

依賴(depends)關(guān)系的定義:

m,nMethods(ct),如果存在m調(diào)用n,則(m,n)∈depends

andm∈Methods(ct),f∈Field(ct),如果存在m使用了f,則

(m,f)∈depends

為了便于用例的書寫,特做說明,圖2左列和右列的符號實際上表示同一類。

分裂函數(shù)usplit代表了這么一個分裂過程:原來的類的成員(成員函數(shù)或成員變量)被拆分到某個或是兩個新類中。

分裂函數(shù)的選擇必須考慮到成員函數(shù)之間或成員函數(shù)和成員變量之間的依賴關(guān)系,這是決定分裂函數(shù)是否有效的重要標(biāo)準(zhǔn)。下面的程序中,初始程序中的類Ct不能被分為混淆后的程序中兩個毫無繼承關(guān)系的新類,而應(yīng)分裂為具有繼承關(guān)系的類ct,1和ct,2。可以使用另一種表達方式描述:初始程序中類Ct的m2成員函數(shù)調(diào)用了m3成員函數(shù),因此我們不能將m2作為ct,1的成員函數(shù),m3作為ct,2的成員函數(shù),而ct,1和ct,2兩者間無繼承關(guān)系。而應(yīng)將m2作為子類ct,2的成員函數(shù),m3作為父類ct,1的成員函數(shù)。且成員函數(shù)m3不需要修改,m3依舊調(diào)用m2。

如果出現(xiàn)這種情況:由于初始程序中的類設(shè)計本身存在缺陷,導(dǎo)致該類實際等同于多個類的組合。在此前提下,可以將初始類分裂為毫無繼承關(guān)系的兩個或兩個以上新類。

將類分裂為具有繼承關(guān)系的新類的方法產(chǎn)生了大量有效的分裂函數(shù),這是因為這種分裂方法的約束條件非常簡單且只具有惟一的限制:成員函數(shù)和成員函數(shù)所使用到的成員變量必須在同一類中定義,而這個類必須是定義成員函數(shù)的類。用公式表述如下:

m∈Methods(ct):

ifct,1∈usplit(m),then

n∈Methods(ct)):depends(m,n)→ct,1∈usplit(n)and

f∈Fields(ct)):depends(m,f)→ct,1∈usplit(f)

原則的體現(xiàn)如同下面所示類分裂混淆例子所示:成員函數(shù)m3調(diào)用了成員函數(shù)m4,因此將m3和m4定義為類ct,1的成員函數(shù)。由于分裂函數(shù)usplit將m4函數(shù)分配給了類ct,2,類ct,1的成員函數(shù)m4其實只是一個虛假的程序段(函數(shù)),它使惡意逆向工程人員以為調(diào)用的是ct,1的成員函數(shù)m4。但實際情況是:程序運行期間ct,1的成員函數(shù)m4將不會被調(diào)用,它將被ct,2的m4成員函數(shù)所覆蓋。同時,類ct,1中構(gòu)造函數(shù)用到的成員變量i,d都在類ct,1定義,類ct,2中構(gòu)造函數(shù)用到的成員變量o則在類ct,2定義。

接著,當(dāng)新類產(chǎn)生后,必須要對原有的類型聲明進行替換,主要包括:

3代碼混淆的評判指標(biāo)

程序混淆效果通常從強度(potency)、耐受性(resilience)、開銷(cost)、隱蔽性(stealth)等4個方面來評估:

(1)強度。指混淆變換后的程序相對原始的程序?qū)阂庥脩衾斫獬绦蛟斐傻睦щy程度或復(fù)雜度。

(2)耐受性。指混淆變換后的程序?qū)κ褂米詣尤セ煜ぞ哌M行攻擊的抵抗度。其抵抗度大小與前述標(biāo)準(zhǔn)之一的強度的大小無直接聯(lián)系,甚至可能出現(xiàn)某些強度很高的混淆變換對自動去混淆工具的抵抗能力卻很差的情況。

(3)開銷。指經(jīng)過混淆變換后的程序在執(zhí)行時由變換所帶來的額外的執(zhí)行時間和所需存儲空間的開銷。

(4)隱蔽性。耐受性好的混淆變換不容易被自動去混淆工具所去除,但卻可能很容易被攻擊者的人工分析識破。特別是,如果一種變換所引入的代碼和原始程序有較大的差異性,就會輕易地被攻擊者識破,因此應(yīng)盡力使用與原代碼相近的語法結(jié)構(gòu)等來加強隱蔽性。

4結(jié)語

代碼混淆的目的是防止對軟件的逆向分析,從而有效保護軟件知識產(chǎn)權(quán)。它通過改變程序本身,使其轉(zhuǎn)換為極難理解和分析的新程序,最終讓惡意攻擊者在必須耗費其所不能承受的代價(時間或其它方面)面前,放棄對軟件的分析來實現(xiàn)。但代碼混淆技術(shù)作為一種新的軟件保護方法,在理論基礎(chǔ)、技術(shù)成熟度等方面依舊存在許多不足,這也將是代碼混淆技術(shù)下一步要解決的問題。

參考文獻

[1]C.Collberg,C.Thomborson,andD.Low.ATaxonomyofObfuscatingTransformations.TechnicalReport148,July1997

[2]C.S.CollbergandC.Thomborson.Watermarking,Tamper-Proofing,andObfuscation-ToolsforSoftwareProtection.IEEETransactiononSoftwareEngineering,28(8):735-746,Aug,2002

[3]H.ChangandM.Atallah.Protectingsoftwarecodebyguards.InProceedingoftheACMWorkshoponSecurityandPrivacyinDigitalRightsManagements,pages160-175,Nov.2001

[4]C.Wang.ASecurityArchitectureforSurvivabilityMechanisms.PhDthesis,UniversityofVirginia,SchoolofEngineeringandAppliedScience,October2000

[5]MikhailSosonkin,GlebNaumovichandNasirMemon.Obfuscationofdesignintentinobject-orientedapplications.DepartmentofComputerandInformationSciencePolytechnicUniversity2003

[6]羅宏,蔣劍琴,曾慶凱.用于軟件保護的代碼混淆技術(shù).計算機工程,第32卷第11期,2006.7

[7]宋亞奇.基于代碼混淆的軟件保護技術(shù)研究.碩士論文,西北工業(yè)大學(xué),2005.6