彭凱
【摘要】 在軟件應(yīng)用當(dāng)中,代碼混淆技術(shù)是保護(hù)軟件安全的一項(xiàng)重要技術(shù),在軟件安全領(lǐng)域當(dāng)中,具有十分重要的意義,受到了很多軟件開發(fā)企業(yè)的重視。但是,由于其在我國(guó)產(chǎn)生的時(shí)間較晚,屬于一項(xiàng)新型的技術(shù),因此在很多方面還不夠成熟。因此,本文對(duì)基于JAVA語(yǔ)言的混淆器設(shè)計(jì)模型及設(shè)計(jì)思路進(jìn)行了研究,進(jìn)而對(duì)主要的設(shè)計(jì)模塊進(jìn)行了分析。
【關(guān)鍵詞】 JAVA語(yǔ)言 混淆器 設(shè)計(jì)模型
隨著軟件事業(yè)的不斷發(fā)展和應(yīng)用,產(chǎn)生了很大的利潤(rùn),因此逐漸出現(xiàn)了很多盜版軟件,對(duì)軟件開發(fā)企業(yè)的利益造成了很大的損害,也影響了軟件產(chǎn)業(yè)的健康發(fā)展。代碼混淆技術(shù)是目前保護(hù)軟件版權(quán)的重要技術(shù),它能夠混淆轉(zhuǎn)換源程序,產(chǎn)生性能等價(jià)的混淆代碼,使逆向工程的難度增加,對(duì)于軟件盜版是一種很有效的打擊手段。
一、基于JAVA語(yǔ)言混淆器的設(shè)計(jì)思路
1.1防御靜態(tài)分析
1、設(shè)計(jì)混淆。設(shè)計(jì)混淆是在外形方面進(jìn)行混淆,它作為第一道保護(hù)軟件的措施,目前已經(jīng)相對(duì)成熟。主要方式為改名和刪除操作,以此來(lái)混淆轉(zhuǎn)換代碼。2、類結(jié)構(gòu)混淆。類結(jié)構(gòu)混淆要首先融合或分裂軟件的類結(jié)構(gòu),然后隱藏具體的類型,使系統(tǒng)類圖的結(jié)構(gòu)得到破壞,進(jìn)而對(duì)真正的設(shè)計(jì)目的進(jìn)行隱藏,以完成相應(yīng)的混淆轉(zhuǎn)換。3、類內(nèi)混淆。首先應(yīng)當(dāng)隱藏類內(nèi)部的控制流跳轉(zhuǎn),通過(guò)類內(nèi)部的方法進(jìn)行融合,防止調(diào)用重構(gòu)方法。然后進(jìn)一步縮小粒度,考慮內(nèi)部循環(huán)操作[1]。再加入不透明謂詞在程序控制流當(dāng)中。最后交換整個(gè)方法的控制流,使攻擊者無(wú)法理解程序控制流的轉(zhuǎn)換,從而達(dá)到保護(hù)軟件安全的目的。4、數(shù)據(jù)混淆。在類內(nèi)部方法間和方法內(nèi)完成混淆轉(zhuǎn)換控制流之后,雖然能夠起到有效的軟件保護(hù)作用,但是一些重要數(shù)據(jù)仍然顯示存在于程序之中。而軟件盜版者恰恰極為重視這一方面,因此,還需要混淆轉(zhuǎn)換數(shù)據(jù),例如變量重組混淆、數(shù)組重構(gòu)混淆等,將關(guān)鍵性數(shù)據(jù)進(jìn)行隱藏。5、預(yù)防性混淆。預(yù)防性混淆的主要目的是為了防止反編譯算、反匯編等方法進(jìn)行軟件盜版,對(duì)這些方法的實(shí)際應(yīng)用進(jìn)行阻止,以達(dá)到對(duì)軟件安全的保護(hù)。
1.2防御動(dòng)態(tài)分析
防御動(dòng)態(tài)主要是將一些動(dòng)態(tài)運(yùn)行過(guò)程中的標(biāo)記性信息和程序中的調(diào)試信息進(jìn)行刪除,同時(shí)將反跟蹤調(diào)試代碼進(jìn)行嵌入。不過(guò),在當(dāng)前的實(shí)際應(yīng)用中,防御動(dòng)態(tài)分析技術(shù)還缺乏足夠的成熟性。由于它主要是用來(lái)對(duì)相應(yīng)程序的運(yùn)行信息進(jìn)行分析,而就目前的相關(guān)技術(shù)來(lái)說(shuō),要實(shí)現(xiàn)這一點(diǎn)還存在著很大的困難。因此,防御動(dòng)態(tài)分析技術(shù)還需要不斷的進(jìn)行提高和完善,以達(dá)到更好的軟件保護(hù)效果[2]。
二、混淆轉(zhuǎn)換系統(tǒng)的設(shè)計(jì)
1、預(yù)處理模塊的設(shè)計(jì)。在混淆轉(zhuǎn)換系統(tǒng)中,開始運(yùn)行的是模塊預(yù)處理模塊,主要是預(yù)先分析源程序代碼,在選擇階段提供相應(yīng)的信息給混淆轉(zhuǎn)換算法選擇。程序代碼分析技術(shù)是預(yù)處理模塊的主要技術(shù),通過(guò)預(yù)處理模塊的數(shù)據(jù)流程分析、控制流程分析和其它基本分析,源程序會(huì)生成JAVA類關(guān)系樹、數(shù)據(jù)流程圖、程序符號(hào)表等程序信息,在以后的程序分析中,以這些信息作為主要信息。預(yù)處理模塊中包含了數(shù)據(jù)流程、控制流程、基本程序等幾種分析方法,每種分析方法都具有不同的作用,各種方法的合作,共同完成了預(yù)處理模塊的設(shè)計(jì)[3]。
2、混淆算法池的設(shè)計(jì)。由于軟件的種類很多,因此沒有任何一種混淆算法能夠滿足所有種類軟件的安全要求。對(duì)此,應(yīng)當(dāng)將幾種混淆算法進(jìn)行組合,形成混淆算法池,這樣才能有效的對(duì)各類軟件的安全進(jìn)行保護(hù)。要進(jìn)行這樣的設(shè)計(jì),就應(yīng)當(dāng)具有一個(gè)能夠?qū)Υ罅康幕煜惴ㄟM(jìn)行管理和儲(chǔ)存的模塊存在于代碼混淆轉(zhuǎn)換系統(tǒng)當(dāng)中。其中的基本操作對(duì)象就是各種混淆算法,混淆算法池的任務(wù)是對(duì)這些混淆算法進(jìn)行運(yùn)用、存儲(chǔ)和管理。
3、混淆轉(zhuǎn)換執(zhí)行器的設(shè)計(jì)。在混淆算法的應(yīng)用中,混淆轉(zhuǎn)換執(zhí)行器應(yīng)當(dāng)具有選擇功能以及排序功能[4]。在混淆轉(zhuǎn)換執(zhí)行器的設(shè)計(jì)過(guò)程中,需要設(shè)計(jì)混淆算法應(yīng)用模塊和混淆算法選擇模塊。將混淆算法池中選擇的混淆算法和預(yù)處理模塊分析處理后的程序信息輸入到混淆轉(zhuǎn)換執(zhí)行器當(dāng)中,混淆算法選擇模塊對(duì)最為合適的混淆算法進(jìn)行選擇和組合,實(shí)現(xiàn)程序的混淆轉(zhuǎn)換。在每次執(zhí)行完混淆算法之后,如果并沒有達(dá)到預(yù)期的性能要求,將會(huì)返回混淆算法應(yīng)用模塊當(dāng)中,重新選擇和組合混淆算法進(jìn)行混淆轉(zhuǎn)換,直到最后達(dá)到要求,才會(huì)輸出混淆之后的程序信息。
結(jié)論:在當(dāng)今社會(huì)中,隨著計(jì)算機(jī)技術(shù)和信息技術(shù)的快速發(fā)展和廣泛應(yīng)用,軟件產(chǎn)業(yè)在迅速發(fā)展的同時(shí)產(chǎn)生了十分可觀的利潤(rùn),這就給盜版軟件的出現(xiàn)創(chuàng)造了可能。為此,應(yīng)當(dāng)加強(qiáng)對(duì)軟件安全的保護(hù),降低盜版軟件帶來(lái)的危害?;贘AVA語(yǔ)言的混淆技術(shù)是一種十分有效的技術(shù),本文對(duì)其設(shè)計(jì)思想及設(shè)計(jì)模塊進(jìn)行了分析,希望能夠推動(dòng)軟件安全保護(hù)的進(jìn)一步發(fā)展。
參 考 文 獻(xiàn)
[1]張寶國(guó). 基于JAVA的代碼混淆研究[D].電子科技大學(xué),2012.
[2]楊樂(lè). 用于軟件保護(hù)的代碼混淆技術(shù)研究[D].江西師范大學(xué),2013.
[3]李旭. 基于Java語(yǔ)言的操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)技術(shù)研究[D].國(guó)防科學(xué)技術(shù)大學(xué),2013.
[4]李勇. 基于Windows平臺(tái)的目標(biāo)代碼混淆[D].電子科技大學(xué),2012.