摘要:隨著計(jì)算機(jī)技術(shù)突飛猛進(jìn)的發(fā)展,人們對(duì)于支持計(jì)算機(jī)各種運(yùn)行的軟件技術(shù)開(kāi)始逐步的關(guān)注,其中混淆技術(shù)在地址逆向工程和重組工程中占據(jù)了重要的位置,本文將主要闡述混淆技術(shù)的相關(guān)領(lǐng)域概念包括發(fā)展中不斷推演的理論、算法和評(píng)估。然后在通過(guò)將理論和算法應(yīng)用到混淆技術(shù)的兩個(gè)分支類(lèi)內(nèi)混淆和類(lèi)間混淆詳細(xì)說(shuō)明,結(jié)尾通過(guò)目前Java程序混淆技術(shù)的發(fā)展現(xiàn)狀,進(jìn)行對(duì)未來(lái)發(fā)展的客觀估計(jì)、大膽假設(shè)以及深切的期望。
關(guān)鍵詞:Java程序;混淆技術(shù);軟件水??;防篡改;軟件版權(quán)保護(hù)
中圖分類(lèi)號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 09-0000-02
人們對(duì)于計(jì)算機(jī)的依賴(lài)性隨著軟件技術(shù)的不斷給人們帶來(lái)便利和樂(lè)趣,使工作更富有主動(dòng)性和操作性,但是任何事物在發(fā)展過(guò)程中都會(huì)有其負(fù)面效應(yīng)與之相對(duì),隨著計(jì)算機(jī)軟件應(yīng)用量和種類(lèi)的不斷擴(kuò)展,其使用安全問(wèn)題便開(kāi)始影響到人們的正確使用,并開(kāi)始逐漸打擊使用計(jì)算機(jī)的積極性,以及對(duì)于安全問(wèn)題的無(wú)奈。主要攻擊形式是通過(guò)對(duì)軟件備份的破壞而直接將軟件徹底摧毀,根據(jù)現(xiàn)有問(wèn)題,當(dāng)前的軟件已經(jīng)經(jīng)過(guò)改良,重新調(diào)試,但是攻擊則換角度也將攻擊破解方式進(jìn)行重組,使改良的部分無(wú)法發(fā)揮其作用,這樣軟件就不會(huì)得到應(yīng)有的保護(hù),依舊能夠以非正規(guī)途徑得到軟件的任何數(shù)據(jù),從而進(jìn)行大面積的傳播,這也就是為何當(dāng)今軟件盜版現(xiàn)象嚴(yán)重的途徑之一。Java程序的出現(xiàn),首先能夠在網(wǎng)絡(luò)上加快傳播速度并且無(wú)客觀條件可以輕松普及,但同時(shí)卻能夠通過(guò)無(wú)關(guān)性對(duì)產(chǎn)權(quán)進(jìn)行有效的保護(hù),不會(huì)輕易的被人盜用。
一、軟件混淆技術(shù)基本原理
(一)基本釋義
軟件混淆技術(shù)是為了能夠在軟件受到侵害或是盜用時(shí)可以被保護(hù)的一種現(xiàn)代技術(shù),軟件技術(shù)首先咋1977年新西蘭首次被提出,其實(shí)是將原有的程序的語(yǔ)言轉(zhuǎn)換成一種密碼語(yǔ)言,不能被一般的軟件所識(shí)破的一種轉(zhuǎn)換,并且研制出能夠?qū)@種轉(zhuǎn)換進(jìn)行評(píng)估的理論計(jì)算。轉(zhuǎn)換的形式未變,只是在形式上保留原有的運(yùn)行根組成,添加一些其他能夠擾亂破壞和讀取的程序代碼。如今混淆技術(shù)開(kāi)始不斷的發(fā)展,諸多的被應(yīng)用于產(chǎn)權(quán)的保護(hù)中,所謂的混淆就是通過(guò)語(yǔ)詞的轉(zhuǎn)變但保持其語(yǔ)義依然與之前相同,這就能保證軟件在使用時(shí)功能是不變的,卻能夠防止逆向工程攻擊和被靜態(tài)分析。
(二)軟件混淆技術(shù)的分類(lèi)
當(dāng)Java文件經(jīng)過(guò)處理,在原有的基礎(chǔ)上添加了其他程序代碼成為類(lèi)文件,這種類(lèi)文件包括魔數(shù)( magic number) 、版本( version) 、常量池( constant pool ) 、訪問(wèn)標(biāo)識(shí)( access flag s) 、(this)類(lèi)、(super)類(lèi)、接口( interfaces) 、域( fields) 、方法(methods) 和屬性(attributes) 。
軟件混淆主要通過(guò)類(lèi)內(nèi)混淆和類(lèi)間混淆來(lái)根據(jù)不同的使用對(duì)象進(jìn)行劃分,類(lèi)內(nèi)混淆主要是克服(methods)中的code字段,而類(lèi)間混淆卻是針對(duì)多種類(lèi)文件的綜合體進(jìn)行混淆處理,其主要的方式是合并和拆分相對(duì)的過(guò)程處理。
下面分別介紹兩種混淆。
(1)、類(lèi)內(nèi)混淆
能夠支持類(lèi)內(nèi)混淆的途徑有數(shù)據(jù)混淆、控制混淆、切片混淆以及針對(duì)特定工具混淆四種。數(shù)據(jù)混淆是對(duì)數(shù)據(jù)的結(jié)構(gòu)組成元素原有的書(shū)寫(xiě)方式進(jìn)行修改,使其不再成為能夠被認(rèn)知的程序。主要有:變量存儲(chǔ)和編碼混淆、變量聚合混淆、順序調(diào)整混淆、詞法混淆以及移除注釋和調(diào)試信息混淆。控制混淆是在信息傳輸過(guò)程中的保護(hù),主要采取追蹤定位等方式實(shí)時(shí)監(jiān)測(cè)信息的狀態(tài),從而對(duì)其他襲擊系統(tǒng)進(jìn)行抵御。切片混淆,正常在一般的軟件中問(wèn)了能夠讓計(jì)算機(jī)更好的識(shí)讀軟件,所以增加了切片以幫助更好的理解,降低難度,而混淆了切片則能夠使其首先無(wú)法有助于難度的下降,另外會(huì)造成對(duì)于程序的誤導(dǎo)可能降低了或是更改了某些其他的程序,達(dá)到了增加難度混淆的目的。針對(duì)特定工具混淆軟件為了能夠起到保護(hù)作用,本身具有一定的反編譯和反混淆的功能,會(huì)在一定的緊急時(shí)刻自動(dòng)啟動(dòng),而針對(duì)特定工具就是抑制了自動(dòng)的傳導(dǎo),對(duì)于能夠使軟件本身內(nèi)部之間的反編譯都可以正常的進(jìn)行,但是對(duì)于外部的反編譯就不會(huì)在自動(dòng)啟動(dòng),這就是混淆的高級(jí)之處。相區(qū)別與前三者人的行為,針對(duì)特定工具混淆具有自動(dòng)的功能針對(duì)的是自動(dòng)化。如果能夠與以上三種任意搭配就能夠達(dá)到防住人機(jī)的共同目的。
(2)、類(lèi)間混淆
類(lèi)間混淆是合并拆分類(lèi)文件而造成混淆的目的其中又有三種表現(xiàn)形式:類(lèi)合并、類(lèi)拆分、隱形類(lèi)間混淆。類(lèi)合并是要面對(duì)多個(gè)文件的自身組成的函數(shù)變量,通過(guò)將函數(shù)、變量的名稱(chēng)進(jìn)行更改,注意在更改過(guò)程中一定不能同時(shí)出現(xiàn)兩個(gè)或以上的名子,如果在合并中有參數(shù)同系統(tǒng)提示無(wú)法進(jìn)行更改,則要為其中一個(gè)虛擬一個(gè)參數(shù)。另外如果合并文件中有繼承關(guān)系的則需要在合并成功后加入一個(gè)布爾型的私有變量用于區(qū)分標(biāo)識(shí)符相同的函數(shù)。類(lèi)拆分則是觀察現(xiàn)有的文件是否進(jìn)行拆分,同時(shí)并作出相應(yīng)的調(diào)整。對(duì)于結(jié)果是可拆分的類(lèi)就是將A拆分為A1與A2,為了能夠使A的要素都能夠?qū)崿F(xiàn)所以應(yīng)該是A2處于繼承A1關(guān)系。類(lèi)型隱藏是通過(guò)接口來(lái)實(shí)現(xiàn)混淆,并且能夠保證原文件并不需要改變接口,所以被稱(chēng)為隱形。相比類(lèi)合并,類(lèi)拆分和隱形類(lèi)間混淆所用的時(shí)間相對(duì)較短。
二、軟件混淆算法的攻擊模式
(一)混淆算法的理論研究
混淆技術(shù)的提出者曾經(jīng)試圖將整個(gè)運(yùn)行過(guò)程當(dāng)做是一個(gè)虛擬黑箱來(lái)看,也就是說(shuō)對(duì)于其他程序來(lái)說(shuō)這就完全是另外一個(gè)軟件和原軟件無(wú)任何聯(lián)系,從它的輸入和輸出的方式內(nèi)容和代碼都不同,這種在理論中是可以站的住的,但是在實(shí)際操作中會(huì)受到很多因素的限制,但在相對(duì)寬松的要求下還是可以實(shí)現(xiàn)混淆技術(shù)的使用。后來(lái)又根據(jù)該理論研究通過(guò)點(diǎn)函數(shù)來(lái)實(shí)現(xiàn)虛擬黑箱,總而言之其未來(lái)的研究空間還有很大,期待它的日益成熟。
(二)混淆算法的攻擊模式
1.針對(duì)數(shù)據(jù)混淆算法的攻擊
假定T 是對(duì)程序P 的一個(gè)單向的混淆變換,當(dāng)且僅當(dāng)從原始程序P 除去某些信息后,無(wú)法通過(guò)混淆后的程序Pc恢復(fù)出P。詞法變換是最典型的不可逆混淆算法。雖然對(duì)于經(jīng)過(guò)詞法變換的程序進(jìn)行攻擊不可能恢復(fù)程序的原貌,但只要理解程序各個(gè)模塊的含義就可能對(duì)程序產(chǎn)生威脅。例如根據(jù)無(wú)法被混淆的系統(tǒng)API 名稱(chēng)等關(guān)鍵字,攻擊者可以推測(cè)出該模塊的大致功能。
2.針對(duì)控制流混淆算法的攻擊
目前,針對(duì)控制流混淆算法的主要攻擊方法是動(dòng)態(tài)分析。動(dòng)態(tài)分析對(duì)大部分混淆算法的攻擊作用,并闡述攻擊模型. 對(duì)于控制流混淆而言, 變換后生成的程序中若存在始終不執(zhí)行的分支,通過(guò)動(dòng)態(tài)分析就能找到對(duì)破解程序有用的信息.針對(duì)控制流混淆,還有黑盒測(cè)試攻擊, 該方法通過(guò)對(duì)程序進(jìn)行黑盒測(cè)試,了解各個(gè)類(lèi)及其函數(shù)的功能, 從而獲取攻擊者需要的信息. 這種方法對(duì)大多數(shù)的混淆變換均能加以攻擊。同時(shí),該方法也存在著一定的局限性: 黑盒測(cè)試缺乏自動(dòng)分析工具,需要依靠大量的人力來(lái)完成分析工作。
三、對(duì)于混淆技術(shù)的未來(lái)預(yù)估
混淆技術(shù)是一種可用于抵制逆向工程和重組工程、對(duì)軟件知識(shí)產(chǎn)權(quán)進(jìn)行保護(hù)的程序變換技術(shù)。使用混淆技術(shù)雖然會(huì)使代碼的效率有一定程度的降低,但是它的實(shí)現(xiàn)代價(jià)相對(duì)較小, 因而在近年引起了廣泛的關(guān)注.由于混淆技術(shù)不改變程序功能的特性, 并且有些詞法混淆算法甚至可以減小原程序的體積, 因此混淆技術(shù)得以在保護(hù)移動(dòng)代碼方面得到廣泛的應(yīng)用. 受移動(dòng)平臺(tái)資源的限制,今后混淆技術(shù)的研究方向一方面要加大混淆的力度,增加攻擊者反編譯的難度,另一方面也要考慮降低混淆算法對(duì)目標(biāo)程序的運(yùn)行負(fù)擔(dān)。文獻(xiàn)探討了混淆技術(shù)在移動(dòng)代理上的應(yīng)用。目前保護(hù)軟件知識(shí)產(chǎn)權(quán)的新技術(shù)主要有3種:混淆技術(shù)、軟件水印技術(shù)和防篡改技術(shù)。這3種技術(shù)各有特長(zhǎng),將它們互相結(jié)合使用,可以給予目標(biāo)軟件更為可靠的保護(hù),這也是目前研究的一個(gè)重要方向。對(duì)于混淆算法的評(píng)估、正確性驗(yàn)證以及如何研制高效可靠的混淆算法, 也是將來(lái)的發(fā)展方向之一。
四、總結(jié)
混淆技術(shù)是對(duì)軟件進(jìn)行的基礎(chǔ)產(chǎn)權(quán)保護(hù),為了能夠增加破譯的難度和代價(jià),從而使產(chǎn)權(quán)盜版的情況發(fā)生率降低,同時(shí)還能提高軟件水銀的魯棒性,有人提出將程序的編譯混淆, 而不是混淆程序本身。但是該方法還有若干問(wèn)題需要考慮。使軟件的安全度進(jìn)一步提升,給人們的使用帶來(lái)了更多的福音,雖然該技術(shù)已經(jīng)廣泛運(yùn)用也頗收到好評(píng),在技術(shù)上依舊有大的發(fā)展前景,需要投入更多的研究力量。
參考文獻(xiàn):
[1]霍建雷,范訓(xùn)禮,房鼎益.Java標(biāo)識(shí)符重命名混淆算法及其實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2010,第1期
[2]咸星海.面向?qū)ο蟠a混淆技術(shù)研究及軟件實(shí)現(xiàn)[J].中國(guó)科技博覽,2010,第19期
[3]刁俊峰.軟件安全中的若干關(guān)鍵技術(shù)研究[D],北京:北京郵電大學(xué),2007
[4]李新良,羅戈夕.基于Java的代碼混淆算法研究[J].湖南文理學(xué)院學(xué)報(bào):自然科學(xué)版,2010,第3期
[5]霍建雷,范訓(xùn)禮.房鼎益,Java標(biāo)識(shí)符重命名混淆算法及其實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2010,第1期
[6]李婧.基于控制流混淆轉(zhuǎn)換的代碼保護(hù)技術(shù)[J].計(jì)算機(jī)安全,2009,第8期
[7]袁征,馮雁,溫巧燕,張華.構(gòu)造一種新的混淆Java程序的不透明謂詞[J].北京郵電大學(xué)學(xué)報(bào),2007,第6期
[作者簡(jiǎn)介]范鋒(1983.5-),男,工作單位:深圳職業(yè)技術(shù)學(xué)院,職位:機(jī)房管理員。
計(jì)算機(jī)光盤(pán)軟件與應(yīng)用2012年9期