• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Java的代碼混淆算法研究

      2010-05-09 07:51:28李新良羅戈夕
      關(guān)鍵詞:重命名標(biāo)識符字節(jié)

      李新良,羅戈夕

      ?

      基于Java的代碼混淆算法研究

      李新良1,羅戈夕2

      (1. 婁底職業(yè)技術(shù)學(xué)院 電子信息工程系, 湖南 婁底, 417000; 2. 漣源鋼鐵集團(tuán)有限公司 信息自動化中心, 湖南 婁底, 417000)

      首先介紹了混淆技術(shù)的現(xiàn)狀、原理及分類,然后對標(biāo)識符重命名的4種算法進(jìn)行了深入研究,通過對算法的偽代碼和性能分析,證明了4種混淆算法具有很好的混淆效果,能夠很好地保護(hù)Java軟件,為Java軟件的反編譯和逆向工程提高了程序復(fù)雜度、抗攻擊能力,且不增加程序額外的執(zhí)行開銷. 本文研究的算法對移動代碼和軟件知識產(chǎn)權(quán)的保護(hù)能起到積極作用.

      反編譯;代碼混淆;標(biāo)識符重命名混淆

      在分布式計(jì)算環(huán)境下,一個軟件系統(tǒng)可能被部署在多臺主機(jī)上,而這些主機(jī)并不能保證都是完全可信賴的. 在惡意主機(jī)環(huán)境下,軟件系統(tǒng)可以被逆向工程或被篡改,其機(jī)密性、完整性與可用性受到威脅. 為了防止惡意主機(jī)對移動代理[1]有目的的篡改,代碼混淆技術(shù)被提出,其基本做法是使用代碼混淆技術(shù)對軟件的代碼進(jìn)行混淆變換,使混淆變換后代碼的分析難度增加,從而在一定程度上阻止對軟件的篡改. 代碼混淆技術(shù)實(shí)際上是一種用于對移動代碼保護(hù)和軟件知識產(chǎn)權(quán)進(jìn)行保護(hù)的安全技術(shù). 在實(shí)際應(yīng)用中,對軟件提供絕對的安全保護(hù)是不可能,也是沒有必要的,只要能使攻擊者的攻擊付出較高的代價(jià),就可以認(rèn)為混淆技術(shù)達(dá)到了安全保護(hù)的作用. 因此,代碼混淆技術(shù)就成為保護(hù)Java軟件的有效且容易實(shí)現(xiàn)的保護(hù)技術(shù). 通過對Java字節(jié)碼混淆技術(shù)進(jìn)行研究,可以保護(hù)Java軟件開發(fā)者的知識產(chǎn)權(quán),并保障信息安全. 同時(shí)在研究過程中發(fā)現(xiàn)新問題,在解決新問題的過程中也可以推動計(jì)算機(jī)科學(xué)的發(fā)展.

      1 國內(nèi)外混淆技術(shù)研究現(xiàn)狀

      對代碼混淆技術(shù)的研究始于上世紀(jì)90年代,由Java語言的迅速發(fā)展而引起. 從1997年開始Collbe- rg等人[2]就對代碼混淆技術(shù)進(jìn)行了深入的基礎(chǔ)性研究,并陸續(xù)發(fā)表了多篇文章,后來又有更多的人加入到代碼混淆技術(shù)研究的隊(duì)伍中,他們提出了許多好的混淆算法和研究方向,對代碼混淆技術(shù)的發(fā)展起到了重要的作用. Collberg等人[2]給出了代碼混淆變換的各種類型,以及代碼混淆算法構(gòu)造的具體過程,同時(shí)實(shí)現(xiàn)了針對Java字節(jié)碼的混淆算法,后來Kelly等人[3]構(gòu)造了一種混淆執(zhí)行體機(jī)制,可以自動實(shí)現(xiàn)構(gòu)造代碼混淆算法,Tyma等人[3]根據(jù)Java語言的特點(diǎn),提出了一種新的外形混淆技術(shù).

      最近國內(nèi)的一些學(xué)者也認(rèn)識到代碼混淆技術(shù)在軟件保護(hù)方面的重要性,并做了一些研究,比如,李永祥等人[4]提出并實(shí)現(xiàn)了多分支語句的控制流迷惑技術(shù)和基于函數(shù)指針數(shù)組的迷惑技術(shù),李長青[5]等人提出了執(zhí)行流重整混淆算法,高鷹[6]等人提出了基于抽象解釋的代碼迷惑有效性比較框架.同時(shí)也有一些學(xué)?;蚪M織對代碼混淆技術(shù)進(jìn)行了研究和探索,如西北大學(xué)[7]、北京交通大學(xué)[8]、北京郵電大學(xué)[9]等. 目前對代碼混淆的研究工作主要是基于軟件保護(hù)的.

      從上面介紹的國內(nèi)外混淆技術(shù)的研究現(xiàn)狀可以看出,由于代碼混淆技術(shù)重要的應(yīng)用前景使得越來越多的計(jì)算機(jī)科學(xué)工作者認(rèn)識到了它的重要性,并且已經(jīng)做了大量的研究,我們相信在不久的將來會有越來越多的人和機(jī)構(gòu)參與到代碼混淆技術(shù)研究的隊(duì)伍中來.

      本文提出基于標(biāo)識符重命名混淆技術(shù),并提出4種標(biāo)識符重命名混淆算法,包括濫用標(biāo)識符、重載無關(guān)聯(lián)方法、非法標(biāo)識符替換以及重寫靜態(tài)方法. 對混淆算法功能有效性和產(chǎn)生的性能過載進(jìn)行簡單分析,使用該技術(shù)能使攻擊者的攻擊付出較高的代價(jià),從而達(dá)到了安全保護(hù)目的.

      2 軟件混淆技術(shù)介紹

      2.1 混淆變換原理

      代碼混淆技術(shù)是一種重要的軟件保護(hù)方法,其實(shí)質(zhì)是指對應(yīng)用程序P進(jìn)行保持語義的變換T,使得變換后的程序P′和原來的程序P具有相同的功能,即如果P錯誤地終止或不能終止,則P′也錯誤地終止或不能終止,否則,P′必須終止且產(chǎn)生與P相同的輸出結(jié)果,經(jīng)過混淆后的P′則更難被靜態(tài)分析和逆向工程所攻擊[10]. 具體的原理如圖1所示. 由圖1可以看出,混淆后程序P′由源程序P經(jīng)混淆變換T處理后得到,在對P′和P給予相同的輸出A后都得到了相同的輸出B,在這種情況下,源程序P的任何非功能性信息都被丟失,從而增加了對程序的分析難度,有效地保護(hù)了軟件.

      圖1 混淆變換原理圖

      2.2 代碼混淆的性能指標(biāo)

      對程序作混淆變換后的效果如何,通常從強(qiáng)度(potency)、耐受性(resilience)、開銷(cost)、隱蔽性(stealth)等4個方面來評估. 強(qiáng)度是指混淆變換究竟給原始的程序加上了多大的復(fù)雜度; 耐受性是指變換后的程序?qū)κ褂米詣尤セ煜ぞ哌M(jìn)行攻擊的抵抗度; 開銷是指經(jīng)過混淆變換后的程序在執(zhí)行時(shí)由變換所帶來的額外執(zhí)行時(shí)間和所需存儲空間開銷; 隱蔽性是與程序的上下文高度相關(guān)的.

      2.3 混淆的分類

      根據(jù)混淆對象和原理的不同,可將代碼混淆技術(shù)分為外形混淆、數(shù)據(jù)混淆、控制混淆和預(yù)防混淆4種.

      外形混淆. 外形混淆的基本原理是對函數(shù)和變量的名稱進(jìn)行替換,使其違背見名知義的軟件工程原則,從而達(dá)到增大攻擊難度的目的. 外形混淆是當(dāng)前Java混淆器所使用的典型方法. 這種混淆變換去除了Java類文件中所包含的源代碼格式信息,它是一種“單向”變換,因?yàn)樽畛醯母袷叫畔⒁坏┍灰瞥?,就無法再次恢復(fù). 由于這種變換沒有任何額外執(zhí)行代價(jià),因此程序的時(shí)間和空間復(fù)雜度將不會受到任何影響. 目前的Java字節(jié)碼混淆工具大多支持這一功能,可見外形混淆具有良好的可行性. 外形混淆有很多分類,其中標(biāo)識符重命名混淆是它的一個很重要的分支. 標(biāo)識符重命名技術(shù)的基本原理是使用簡單無意義的名字或特殊的名字替換源程序字節(jié)碼中的標(biāo)識符. 在本文下面的章節(jié)中將主要研究這種標(biāo)識符重命名混淆技術(shù).

      數(shù)據(jù)混淆. 數(shù)據(jù)混淆是利用數(shù)據(jù)流分析中難點(diǎn)問題,向程序中引入引起程序分析精度降低或難度增加的一些因素,從而影響對程序的分析結(jié)果. 由于正常的程序以符合邏輯的方式來組織數(shù)據(jù),因此為了增加攻擊者獲取信息的難度,實(shí)現(xiàn)對程序的有效混淆,數(shù)據(jù)混淆將不對程序的代碼進(jìn)行特意修改, 只針對程序中出現(xiàn)的各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行變換.

      控制混淆. 控制混淆是一種被廣泛使用的代碼混淆方法,其基本原理是通過改變程序的判斷條件, 或向程序中添加可控的判斷條件來增加程序的復(fù)雜度, 并且可以通過對程序的結(jié)構(gòu)和執(zhí)行流程的調(diào)

      整來增加反編譯工具對程序的反編譯時(shí)間.

      預(yù)防混淆. 預(yù)防混淆通常針對一些專用的反編譯工具而設(shè)計(jì). 一般情況下,預(yù)防混淆技術(shù)利用反編譯工具的弱點(diǎn)來設(shè)計(jì)混淆方案.

      下面對4種混淆技術(shù)進(jìn)行簡單的分析,外形混淆主要應(yīng)用于迷惑解讀程序的攻擊者,同時(shí)在抵抗反編譯工具領(lǐng)域也起到一定作用;數(shù)據(jù)混淆目前主要針對的是對布爾變量的替換;控制混淆是應(yīng)用比較廣泛的一種混淆技術(shù),主要是通過增加程序的復(fù)雜度來增強(qiáng)程序的抗攻擊能力;預(yù)防混淆是針對不同的反編譯軟件而設(shè)計(jì)的.

      數(shù)據(jù)混淆和控制混淆為了提高混淆后程序的復(fù)雜度,通常都會在程序中引入大量的布爾變量或源程序以外的結(jié)構(gòu),大大增加了程序的代碼量和程序的時(shí)空執(zhí)行開銷,雖然也增加了程序抗攻擊性, 但程序的執(zhí)行效率也大大降低. 而一般的外形混淆技術(shù)雖然沒有增加程序的執(zhí)行開銷,但程序的復(fù)雜度卻不高.

      因此,根據(jù)上面的分析,本文將研究一種既能提高程序抗攻擊能力,同時(shí)也不會降低程序執(zhí)行效率的混淆技術(shù),即標(biāo)識符重命名混淆技術(shù),該混淆技術(shù)是外形混淆的一個重要研究方向.

      3 標(biāo)識符重命名混淆算法研究

      標(biāo)識符重命名混淆的基本原理是使用簡單無意義的名字替換字節(jié)碼文件中的類名、接口名、方法名以及字段名等. 當(dāng)前的標(biāo)識符重命名混淆技術(shù)只對字節(jié)碼中的標(biāo)識符進(jìn)行簡單的名字替換,雖然沒有引入額外的執(zhí)行開銷,但抗攻擊能力不高. 為了彌補(bǔ)以上情況的不足,本節(jié)將提出4種標(biāo)識符重命名混淆算法,這4種混淆算法具有較高的抗攻擊能力,同時(shí)也不會帶來額外的執(zhí)行開銷.

      3.1 重命名的目的

      重命名方法的目的是使大型的Java程序更難理解或者更難被反編譯,但不會引入程序的額外執(zhí)行開銷. 首先,這些原始的標(biāo)識符被一些無意義或者混亂的標(biāo)識符代替,使得攻擊者要想恢復(fù)這些原始的標(biāo)識符變得不可能,因?yàn)楦鷺?biāo)識符相關(guān)的信息在重命名后完全消失. 另外,這種方法也使得一個反編譯器將字節(jié)碼文件轉(zhuǎn)換成Java源代碼變得很困難甚至不可能,或者使被反編譯的源代碼不能被重新編譯. 在這2種情況下,對標(biāo)識符進(jìn)行重命名并不會影響被混淆程序的行為.

      3.2 代碼混淆的范圍

      代碼混淆的范圍即在一個應(yīng)用程序中能被混淆工具混淆的那部分代碼就是程序的混淆范圍,一般情況下只有程序員自己開發(fā)的代碼部分才會被保護(hù),而標(biāo)準(zhǔn)庫和第三方庫中的代碼不會被保護(hù). 但是混淆的范圍并不會只局限于程序員自己寫的代碼部分,而用到的標(biāo)準(zhǔn)庫和第三方庫中的代碼也可以被包含到混淆的范圍中,但需要取得標(biāo)準(zhǔn)庫和第三方庫的所屬組織或個人的同意. 默認(rèn)情況下,參數(shù)標(biāo)識符和本地變量不在這一混淆系列中,因?yàn)楫?dāng)字節(jié)碼被編譯的時(shí)候這些信息將會被剝離掉. 一個程序的混淆范圍可以通過對程序中所有的標(biāo)識符分組來建立,然后剔除掉那些在重命名后會帶來錯誤或者誤差行為的標(biāo)識符.

      3.3 標(biāo)識符重命名混淆算法

      以前提到的基于標(biāo)識符重命名的混淆技術(shù)所使用的普遍方法是,盡可能重復(fù)地使用相同的標(biāo)識符來重命名在Java字節(jié)碼混淆范圍內(nèi)的標(biāo)識符. 由于這些標(biāo)識符的冗余度,攻擊者很難理解被反編譯的程序. 此外,通過檢查使用同一標(biāo)識符的無關(guān)實(shí)體, 反編譯器也會被欺騙. 我們所期望的效果是, 現(xiàn)存的反編譯技術(shù)很難或者完全不能對混淆過的程序反編譯,因此攻擊者不得不花費(fèi)更多時(shí)間去理解和手工調(diào)試被反編譯的程序. 事實(shí)上,可以通過靈巧地對Java字節(jié)碼中標(biāo)識很難或者完全不能對混淆過的程序反編譯,因此攻擊者不得不花費(fèi)更多時(shí)問去理解和手工調(diào)試被反編譯的程序. 事實(shí)上, 可以通過靈巧地對Java字節(jié)碼中標(biāo)識符重命名來達(dá)到這樣的效果. 因此本節(jié)提出了4種標(biāo)識符重命名算法. 表1給出了4種算法偽代碼實(shí)現(xiàn)中用到的主要符號.

      表1 算法中使用的主要符號

      (續(xù)表1)

      3.3.1 濫用標(biāo)識符算法

      Java源程序被編譯成Java字節(jié)碼后仍然保留著類、接口、方法等的名字信息,而字節(jié)碼被反編譯后這些名字信息依然清晰可見(例如方法名:getNa- me),因此攻擊者很容易讀懂反編譯后的程序. 為了阻止解讀程序的靜態(tài)攻擊者,就需要對字節(jié)碼中的標(biāo)識符進(jìn)行重命名,因此就出現(xiàn)了濫用標(biāo)識符混淆技術(shù)[5]. 濫用標(biāo)識符混淆技術(shù)是通過對Java字節(jié)碼中的標(biāo)識符重命名來實(shí)現(xiàn)的,其目的是最大限度地重復(fù)使用同一個標(biāo)識符代替一個類中出現(xiàn)的所有標(biāo)識符. 該策略之所以能夠迷惑攻擊者,是因?yàn)楣粽卟坏貌蝗ダ斫獗环淳幾g程序中出現(xiàn)的每個標(biāo)識符的行為,同時(shí),標(biāo)識符所表示的意思跟它出現(xiàn)的上下文有關(guān). 濫用標(biāo)識符算法使用隨機(jī)生成的名字替換混淆范圍內(nèi)的標(biāo)識符,隨機(jī)生成名字的機(jī)制是:首先使用隨機(jī)生成的單個字母進(jìn)行替換,如果同一個包中類的個數(shù)大于能夠使用的字母個數(shù),則剩余類中的標(biāo)識符將會使用2個字母的隨機(jī)組合進(jìn)行替換,以此類推,使用3個字母、4個字母以及更多個字母的隨機(jī)組合進(jìn)行替換. 隨機(jī)生成的名字根本沒有規(guī)律可循,因此提高了靜態(tài)攻擊的難度,延長程序破解的時(shí)間. 下面是算法的偽代碼實(shí)現(xiàn):

      算法1:

      輸入:混淆前程序

      輸出:混淆后程序

      l Foreach C in P //遍歷每個包中的類或接口

      2 s=random() //隨機(jī)生成名字

      3 Replace C with S //使用S替換遍歷過的每個類或接口名

      4 Put C<->s into mapping文件//保存映射關(guān)系

      5 Foreach m in C//遍歷類或接口C中的所有成員

      6 Replace m with s //用s替換遍歷到的m

      7 Put m<->s into mapping文件

      8 Foreach t in S //遍歷繼承關(guān)系集合S

      9 If t equals m //如果m和t具有繼承關(guān)系

      10 Replace t 對應(yīng)的子類或超類with S //用上面生成S替換t

      11 Put t<->s into mapping文件

      12 根據(jù)mapping文件更新跟混淆內(nèi)容有關(guān)的字節(jié)碼文件和重寫P

      13 end

      3.3.2 重載無關(guān)聯(lián)方法算法

      重載無關(guān)聯(lián)方法的混淆方法,通過使用相同的標(biāo)識符重命名被混淆類中的所有實(shí)體方法實(shí)現(xiàn),這種方法在任何情況下都適用. 而這種改變并不影響字節(jié)碼的行為,因?yàn)镴ava程序中的方法實(shí)體,在執(zhí)行混淆操作之前的某個編譯時(shí)刻通過一個象征性的參考, 必然會被執(zhí)行. 相反,如果用這種混淆方法操作過的程序被反編譯并被重新編譯執(zhí)行時(shí),這種改變將會徹底改變程序的行為.

      為了解釋上面這種情況,假設(shè)在源代碼中有這樣的方法,這些方法的名字截然不同,但參數(shù)類型和個數(shù)完全相同. 通過對這些方法用相同的名字重命名后,這些方法將變成重載方法. 現(xiàn)在,重新編譯的時(shí)侯,源代碼中這些重載方法被處理時(shí)將會變得很棘手,此時(shí),Java編譯器不得不選擇那些能夠和參數(shù)類型完全匹配的重載方法. 事實(shí)上,并不能保證原始(即正確)的方法會被編譯器選擇,因?yàn)榭赡軙泻洼斎腩愋湍軌蚋闷ヅ涞钠渌椒ù嬖? 重載無關(guān)聯(lián)方法的混淆算法不僅使類中的方法具有了重載關(guān)系,同時(shí)避免了破壞超類和子類之間的繼承關(guān)系. 下面是該算法的偽代碼實(shí)現(xiàn).

      算法2:

      輸入:混淆前程序

      輸出:混淆后程序

      1 Foreach C in P //遍歷每個包中的類或接口

      2 s=random() //隨機(jī)生成名字

      3 Replace C with s //用s替換類或接口名

      4 Put C<->s into mapping文件//保存映射關(guān)系

      5 Foreach m in C

      6 Replace m with s //用S替換類成員

      7 Put m<->s into mapping文件

      8 根據(jù)集合O,將具有重寫關(guān)系的方法用上面生成的S代替

      9 根據(jù)mapping文件更新跟混淆內(nèi)容有關(guān)的字節(jié)碼文件和重寫P

      10 End

      3.3.3 非法標(biāo)識符替換算法

      前面提出的2種標(biāo)識符混淆算法增加了攻擊者對程序的解讀難度, 下面提出的標(biāo)識符混淆算法將會增加反編譯工具的反編譯難度. 非法標(biāo)識符替換合法標(biāo)識符的混淆算偽代碼實(shí)現(xiàn)如下.

      算法3:

      輸入:混淆前程序

      輸出:混淆后程序

      l Foreach C in P //遍歷每個包中的類或接口

      2 p=produce(key[],Illeagal[]) //生成關(guān)鍵字跟非法字符串結(jié)合的名字

      3 Replace C with P //名字替換

      4 Put C<->p into mapping文件∥保存映射關(guān)系

      5 Foreach m in C

      6 Replace m with P //使用P替換類成員

      7 Put m<->p to mapping文件

      8 根據(jù)mapping文件更新跟混淆內(nèi)容有關(guān)的字節(jié)碼文件和重寫P

      9 End

      3.3.4 重寫靜態(tài)方法算法

      Java語言規(guī)范規(guī)定,超類中的靜態(tài)方法不能被子類中的實(shí)體方法重寫,相反,超類中的實(shí)體方法也不能被子類中的靜態(tài)方法重寫. 而Java字節(jié)碼中并沒有這種限制,在這種情況下,靜態(tài)方法和實(shí)例方法之間不存在任何模棱兩可,因?yàn)镴ava虛擬機(jī)使用不同的指令來調(diào)用它們中的任意一個. 因此,在這種情況下出現(xiàn)了重寫靜態(tài)方法的混淆算法,對靜態(tài)方法重命名的混淆方法,會處理一系列被編譯過的Java類,并且在任何可能的情況下,都可以使用定義在一個超類以及具有相同數(shù)量和形參的實(shí)例方法的名字來重命名靜態(tài)方法. 反編譯存在實(shí)例方法被靜態(tài)方法重寫的混淆代碼,將會產(chǎn)生一種不正確的Java源代碼.

      以前提出的重寫靜態(tài)方法的策略,僅僅單純地使用實(shí)例方法或靜態(tài)方法重寫超類或子類中的靜態(tài)方法或?qū)嶓w方法,雖然也增加了反編譯工具的破解難度,但仍然容易被有經(jīng)驗(yàn)的攻擊者覺察. 而本文提出的重寫靜態(tài)方法混淆算法在此基礎(chǔ)之上對重寫的方法進(jìn)行了修改,使得修改后的重寫方法稍微不同于被重寫的方法,這種細(xì)微的修改使得混淆變化不易被察覺,這樣也就額外地增加了靜態(tài)攻擊者的難度. 下面是重寫靜態(tài)方法混淆算法的偽代碼實(shí)現(xiàn):

      算法4:

      輸入:混淆前程序

      輸出:混淆后程序

      1 Foreach t in S //遍歷繼承關(guān)系集合中的類t

      2 Foreach s_m in t //遍歷類t中的靜態(tài)或?qū)嶓w方法

      3 If s_m is 靜態(tài)方法and u_m 存在//如果s_m是靜態(tài)方法并且跟t對應(yīng)的子類中存在相同簽名的實(shí)體方法

      4 s=random() //生成隨機(jī)名字

      5 Replace u_m and s_m with S //使用相同的名字替換u_m和s_m

      6 Put s<->u_m and s<->s_m to mapping文件

      7 else

      8 If s_m is靜態(tài)(或?qū)嶓w)方法//如果u_m不存在

      9 s_m’=produceFakeMethod(s_m) //偽造同s_m相似的方法

      10 Add s_m’to t’ //將偽造的方法插入到類t的超類或子類t’中

      11 根據(jù)mapping文件更新跟混淆內(nèi)容有關(guān)的字節(jié)碼文件和重寫P

      12 End

      3.4 算法分析

      程序執(zhí)行開銷是衡量一個混淆方法性能好壞的重要指標(biāo). 本文提出的濫用標(biāo)識符混淆算法和重載無關(guān)聯(lián)方法混淆算法,主要致力于消除字節(jié)碼常量池中的象征性信息,而非法標(biāo)識符替換和重寫靜態(tài)方法這2種混淆算法將會使被反編譯的程序產(chǎn)生語法和語義錯誤. 前兩種混淆算法主要是針對靜態(tài)攻擊而設(shè)計(jì)的,由它們混淆過的字節(jié)碼被反編譯后生成的代碼對于解讀程序的攻擊者來說更難理解, 同時(shí)由于使用簡短的名字代替原來的名字,字節(jié)碼文件變得更小. 后2種混淆算法主要是針對反編譯工具而設(shè)計(jì)的,被這2種算法混淆過的字節(jié)碼被反編譯且重新編譯的時(shí)候會產(chǎn)生編譯錯誤,以至攻擊者不得不花費(fèi)大量的時(shí)間和精力調(diào)試被反編譯的程序.

      因此,本文提出的混淆算法在保證混淆后程序復(fù)雜度的前提下,減小了字節(jié)碼大小和程序的加載時(shí)間,最終降低程序的執(zhí)行開銷.

      4 結(jié)論

      本文首先分析了代碼混淆技術(shù)的現(xiàn)狀、原理及分類,指出了標(biāo)識符重命名混淆技術(shù)的目的, 然后介紹了重命名混淆的范圍. 最后提出了濫用標(biāo)識符、重載無關(guān)聯(lián)方法、非法標(biāo)識符替換和重寫靜態(tài)方法4種標(biāo)識符重命名混淆算法. 通過對提出算法的性能分析,證明了4種混淆算法具有很好的混淆效果,因此能夠很好地保護(hù)Java軟件.

      [1] 朱正平. 移動代理安全之代碼迷惑技術(shù)研究[D]. 南寧:廣西大學(xué),2006.

      [2] Collberg C, Thomborson C, Low D. A Taxonomy of Obfuscating Transformations[R]. New Zealand: DePt. of Computer Science,University of Auckland, 1997.

      [3] Barak B, Goldreich O, Impagliazzo R, et al. On the (Im) possibility of obfuscating Programs[A]. Advances in Cryptology-Crypto 2001[C]. USA: Springer-Verlag, 2001: 57-59.

      [4] 李永祥. 代碼迷惑技術(shù)研究[D]. 合肥: 中國科學(xué)技術(shù)大學(xué), 2005.

      [5] 李長青,李曉永,韓臻. 基于控制轉(zhuǎn)換的軟件保護(hù)研究[J]. 信息安全與通信保密, 2006(10): 146-149.

      [6] 高鷹, 陳意云. 基于抽象解釋的代碼迷惑有效性比較框架[J]. 計(jì)算機(jī)學(xué)報(bào), 2007, 30(5): 806-808.

      [7] 宋亞奇. 基于代碼混淆的軟件保護(hù)技術(shù)研究[D]. 西安:西北大學(xué), 2005.

      [8] 李長青. 基于控制轉(zhuǎn)換的混淆器構(gòu)造[D]. 北京: 北京交通大學(xué), 2006.

      [9] 王飛. Java軟件保護(hù)技術(shù)研究及實(shí)現(xiàn)[D]. 北京: 北京郵電大學(xué), 2007.

      [10] 刁俊峰. 軟件安全中的若干關(guān)鍵技術(shù)研究[D]. 北京: 北京郵電大學(xué), 2007.

      The study of Java code obfuscation algorithm

      LI Xin- liang1, LUO Ge-xi2

      (1. Departmen of Electronic and Information Engineering, Loudi Vocational and Technical College, Loudi 417000,China; 2. Information Center, Lianyuan Steel Co.Ltd, Loudi 417000,China)

      The status of confusing technology, principles and classification was introduced, and then the identifier rename the four algorithm was studied deeply. Based on the algorithm of pseudo-code and performance analysis, it proven that four kinds of confusion algorithm had very good effect of confusion, and perfectly protected Java software, the software for Java decompilation and reverse engineering to improve the process capability, complexity, and attack the additional costs increased program execution. The algorithm is studied in this paper for mobile code and software protection of intellectual property rights can play a positive role.

      de-compilation;code obfuscation; identifier renaming obfuscation

      TP 309

      A

      1672-6146(2010)03-0064-06

      10.3969/j.issn.1672-6146.2010.03.017

      2010-07-13

      李新良(1974-), 女,副教授,碩士研究生,研究方向?yàn)檐浖_發(fā)與軟件測試.

      猜你喜歡
      重命名標(biāo)識符字節(jié)
      淺析5G V2X 通信應(yīng)用現(xiàn)狀及其側(cè)鏈路標(biāo)識符更新技術(shù)
      基于底層虛擬機(jī)的標(biāo)識符混淆方法
      No.8 字節(jié)跳動將推出獨(dú)立出口電商APP
      用好Excel,文件批量重命名其實(shí)很簡單
      批量更改網(wǎng)頁文件名稱
      Windows 10下快速修改文件名
      電腦愛好者(2020年1期)2020-04-28 12:25:29
      基于區(qū)塊鏈的持久標(biāo)識符系統(tǒng)①
      No.10 “字節(jié)跳動手機(jī)”要來了?
      簡談MC7字節(jié)碼
      數(shù)字美術(shù)館“數(shù)字對象唯一標(biāo)識符系統(tǒng)”建設(shè)需求淺議
      铜鼓县| 武隆县| 扎囊县| 威远县| 安丘市| 鲜城| 镇远县| 射洪县| 新龙县| 兴隆县| 北碚区| 武穴市| 乡城县| 贺兰县| 临桂县| 安陆市| 区。| 论坛| 准格尔旗| 禄丰县| 凤城市| 宜良县| 老河口市| 延边| 十堰市| 莎车县| 东丽区| 罗定市| 淳化县| 右玉县| 麻城市| 伊川县| 綦江县| 民丰县| 高碑店市| 武陟县| 尼木县| 宜城市| 开平市| 安塞县| 绥棱县|