亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種抽取變量組成類的代碼迷惑方法

        2014-10-12 09:05:58卿海軍黃寄洪陳麗萍
        關(guān)鍵詞:標(biāo)識(shí)符源代碼代碼

        卿海軍,黃寄洪,陳麗萍

        (1.梧州學(xué)院 計(jì)算機(jī)科學(xué)系,廣西 梧州 543002;2.梧州市第一中學(xué),廣西 梧州 543002)

        代碼迷惑技術(shù)屬于一種重要的軟件保護(hù)技術(shù),其本質(zhì)是利用程序等價(jià)變換的方法,將原始程序轉(zhuǎn)變?yōu)檎Z義等價(jià)、難以被理解或反編譯的程序[1].它與其它技術(shù)相比簡(jiǎn)單、廉價(jià).特別是伴隨著Java和.Net語言的出現(xiàn),代碼迷惑技術(shù)已從一種可選的安全放技術(shù),演變成為一種必需的安全技術(shù),因?yàn)槿魏尾幌腴_放自己源代碼的軟件開發(fā)者,都得對(duì)源代碼進(jìn)行迷惑處理.因此,一些軟件開發(fā)環(huán)境集成了代碼迷惑功能.

        代碼迷惑技術(shù)主要分為詞法變換、控制流變換、數(shù)據(jù)流變換和類結(jié)構(gòu)變換.隱藏變量代碼迷惑技術(shù)屬于詞法變換.目前詞法變換的方法有:①引進(jìn)非法標(biāo)識(shí)符用作變量名[2],這些非法標(biāo)識(shí)符包括對(duì)于變量命名規(guī)則非法的字符、關(guān)鍵字、布爾字符、空字符等,這些非法標(biāo)識(shí)符在字節(jié)碼里是合法的,但在源程序中是不允許的,從而反編譯就會(huì)出錯(cuò);②盡可能多地使用同一變量,比如變量既是類成員變量又是方法局部變量或方法名,使嵌套類內(nèi)層類與外層類同名等.但是上面提到的這些方法并沒有對(duì)方法的參數(shù)變量及方法的局部變量進(jìn)行迷惑,這就使得迷惑不夠徹底,同時(shí)它的迷惑彈性與力度不夠,文獻(xiàn)[3]基于此提出了相應(yīng)的反迷惑方法;③將標(biāo)識(shí)符作交換而非更改成毫無意義的名字的方法進(jìn)行迷惑[4].標(biāo)識(shí)符交換包括交換變量名、交換函數(shù)名和交換類名三個(gè)步驟,同樣它的迷惑彈性也不夠.針對(duì)現(xiàn)有的一些詞法迷惑彈性不夠、不能有效抵御反迷惑的攻擊,本文提出了一種迷惑彈性較好的代碼迷惑方法.

        1 抽取變量組成類的代碼迷惑

        文獻(xiàn)[5]提出了實(shí)體更名迷惑范圍的概念,并指出了實(shí)體更名迷惑的范圍,這其中不包括方法的參數(shù)變量和方法的局部變量,這些變量在有些方法里的所有使用的變量當(dāng)中占據(jù)100%的份額.因此若把這些變量排除在迷惑范圍之外,迷惑的程度是相當(dāng)不夠的.現(xiàn)有的迷惑方法之所以把方法的參數(shù)變量和方法的局部變量排除在迷惑范圍之外是因?yàn)樽止?jié)碼文件結(jié)構(gòu)導(dǎo)致的,源代碼在編譯成字節(jié)碼時(shí)可以選擇是否保留參數(shù)變量和局部變量的信息,可見編譯時(shí)可忽略參數(shù)變量和局部變量名,只需保留它所占的相對(duì)位移信息.同樣在反編譯時(shí)也可忽略參數(shù)變量和局部變量名的存在.因此若不加處理,將參數(shù)變量及局部變量加以迷惑是無效的.

        考慮到變量若以類成員變量的形式存在,在字節(jié)碼儲(chǔ)存的是類成員變量名,而不是相對(duì)位移,自然而然地可以把參數(shù)變量和局部變量分別提取出來組成一個(gè)個(gè)的類,這樣便可以保證編譯與反編譯時(shí)不會(huì)忽略變量名的存在,然后這些類成員變量名采用無意義的易混淆的名字,從而可達(dá)到迷惑的效果.但是該方法的迷惑彈性仍然不夠,可以采用自動(dòng)的變量名替換技術(shù)將這些迷惑的變量轉(zhuǎn)變成有意義易區(qū)分的變量名,經(jīng)過分析可知,自動(dòng)的變量名替換技術(shù)必然會(huì)改變變量名字,那么這種改變變量名字后,程序是否可以察覺到呢?恰好Java提供了一種反射技術(shù),完全可以用來檢測(cè)變量名是否更改,這樣可以在進(jìn)入每個(gè)方法前都檢測(cè)變量名是否可更改,若已更改,則可以立即采取保護(hù)措施.從而使得采用自動(dòng)變量名替換技術(shù)的反迷惑方法處理后的程序不可運(yùn)行,這樣增加了反迷惑的難度,提高了迷惑技術(shù)的彈性.因?yàn)镴ava與.Net編譯技術(shù)相似,同時(shí)它們都具有反射功能,所以這種方法適用這兩種跨平臺(tái)語言,對(duì)于其他語言也有一定的借鑒意義.

        抽取變量組成類的迷惑方法對(duì)具有繼承關(guān)系的父子類也同樣是適用的,抽取變量主要是指抽取方法局部變量及方法參數(shù)變量,當(dāng)采用這種方法時(shí),父類與子類互不影響,可以各自分別運(yùn)用,特別是對(duì)于Java,一般情況下一個(gè)文件只包含一個(gè)類,此時(shí)對(duì)各個(gè)類的處理都是獨(dú)立的,無論是對(duì)于父子類之間,還是不相關(guān)的類之間.

        對(duì)于任意一個(gè)方法m,設(shè)LocalVars(m)表示方法m的局部變量集合,ParamVars(m)表示方法m的參數(shù)變量集合,Cl表示某方法局部變量組成的類,Cp表示某方法的參數(shù)變量組成的類.設(shè)源程序有有n個(gè)方法(不包括構(gòu)造方法),則迷惑后將會(huì)新生成2n個(gè)類.Fields(c)表示類C的成員變量集合,則采用抽取變量組成類方法迷惑之前的代碼與迷惑之后的代碼變量之間可描述為兩個(gè)映射f1,f2.

        2 抽取變量組成類的代碼迷惑方法實(shí)驗(yàn)

        對(duì)于本文提出的隱藏變量的代碼迷惑方法,本文在Java平臺(tái)上進(jìn)行了編程實(shí)現(xiàn),并進(jìn)行了實(shí)驗(yàn)驗(yàn)證,實(shí)驗(yàn)是針對(duì)源代碼進(jìn)行的,實(shí)驗(yàn)劃分為預(yù)處理,變量信息收集和迷惑三個(gè)階段.

        將要抽取變量的源代碼如下:

        圖1展示了分別采用文獻(xiàn)[5]和抽取變量組成類的方法迷惑后源代碼的變化情況,圖中右邊的代碼對(duì)于gcd方法生成了兩個(gè)新類它們分別為gcd方法的參數(shù)變量和局部變量所組成的類,對(duì)于構(gòu)造函數(shù)test1并沒有生成其參數(shù)變量類,因?yàn)槿绻善鋮?shù)變量類,則在生成正在迷惑的類的實(shí)例時(shí),必須把調(diào)用構(gòu)造函數(shù)的形式做一定的變化,還得更改類名,涉及到類以外的范圍,情況較為復(fù)雜,因此未加處理.從迷惑后的代碼對(duì)比來看,采用抽取變量組成類的方法進(jìn)行迷惑的程序更難以分析、理解,且代碼的規(guī)模有大幅度增加.

        圖2對(duì)圖1生成的2段迷惑代碼用反編譯器Jad分別進(jìn)行了反編譯.從圖中可以看出采用文獻(xiàn)[5]的方法對(duì)方法參數(shù)及方法局部變量進(jìn)行迷惑,經(jīng)過反編譯后是無效的,因?yàn)榉淳幾g器用自己生成的變量取代了原來的變量.與此形成對(duì)比的是將參數(shù)變量和局部變量組成類后再反編譯,變量仍然保持原來的名字,仍然具有迷惑性,從圖2右邊可以看出反編譯的效果不是很好,前面的代碼有點(diǎn)混亂.當(dāng)然抽取變量組成類的迷惑方法也擴(kuò)展了迷惑的范圍,將變量的迷惑范圍擴(kuò)展到了參數(shù)變量和局部變量.

        圖1 迷惑后的代碼Fig.1 The code after obfuscated

        附圖3采用文獻(xiàn)[3]中的ADAM工具對(duì)圖1中兩段迷惑代碼分別進(jìn)行反迷惑,在圖中左邊的代碼中變量已完全用新產(chǎn)生的變量名替換了,變量已很容易識(shí)別,可以說反迷惑已成功,但對(duì)于附圖3右邊的代碼已經(jīng)變成一個(gè)不能正常運(yùn)行的程序,首先在加載參數(shù)變量組成的類和局部變量組成的類時(shí)便會(huì)拋出找不到類的錯(cuò)誤,其次在檢查相應(yīng)的類成員變量時(shí)也會(huì)檢測(cè)到變量名已更改,當(dāng)然不會(huì)到這一步程序早已非正常結(jié)束.這時(shí),抽取變量組成類的抗攻擊效果便體現(xiàn)出來了.

        3 本文小結(jié)

        圖2 反編譯圖1的迷惑代碼Fig.2 Decompilation of the obfuscated code of figure 1

        本文在考慮現(xiàn)有的實(shí)體更名迷惑的彈性不夠的情況下,提出了一種具有一定抵抗反迷惑攻擊能力的方法.抽取變量組成類的方法很好地保持了參數(shù)變量和局部變量迷惑的有效性,同時(shí)還利用新一代語言的反射功能檢測(cè)變量名是否更改,提高了迷惑的彈性.

        [1]王建民,余志偉,王朝坤,等.Java程序混淆技術(shù)綜述[J].計(jì)算機(jī)學(xué)報(bào),2011,34(9):1578-1588.

        [2]Chan J T,Yang W.Advanced obfuscation techniques for java byte-code[J].The Journal of Systems and Software,2004,71(1/2):1-10.

        [3]Cimato S,Santis A D,Petrillo U F.Overcoming the obfuscation of java programs by identifier renaming[J].The Journal of Systems and Software,2005,78(1/2)60-72.

        [4]De Roo A,v.den Oord L.Stealthy obfuscation techniques:misleading the pirates[EB/OL].[2007-02-12].http://www.home.cs.utwente.nl/~oord/paper.pdf.

        [5]Chan J T,Yang W.Advanced obfuscation techniques for Java bytecode[J].The Journal of Systems and Software,2004,71(1/2):1-10.

        附圖3 采用ADAM工具對(duì)圖1的迷惑代碼分別進(jìn)行反迷惑后的結(jié)果BriefFig.3 The result after decompiling obfuscation code of figure 1 by ADAM tool

        猜你喜歡
        標(biāo)識(shí)符源代碼代碼
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        淺析5G V2X 通信應(yīng)用現(xiàn)狀及其側(cè)鏈路標(biāo)識(shí)符更新技術(shù)
        基于底層虛擬機(jī)的標(biāo)識(shí)符混淆方法
        基于TXL的源代碼插樁技術(shù)研究
        基于區(qū)塊鏈的持久標(biāo)識(shí)符系統(tǒng)①
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        軟件源代碼非公知性司法鑒定方法探析
        97精品一区二区三区| a级国产精品片在线观看| 一区二区在线视频大片| 久久中文字幕一区二区| 又粗又大又硬毛片免费看| 一本色道av久久精品+网站| 国产sm调教视频在线观看| 一国产区在线观看| 免费美女黄网站久久久| 91精品国产综合久久久密臀九色| 女的扒开尿口让男人桶30分钟| 亚洲级αv无码毛片久久精品| 久久久99久久久国产自输拍| 一本色道久久亚洲av红楼| 中文字幕网伦射乱中文| 1000部精品久久久久久久久| 亚洲综合色婷婷七月丁香| 白白色发布免费手机在线视频观看| 国产精品嫩草99av在线| 欧美日韩在线观看免费| 日本在线播放不卡免费一区二区 | 成在线人免费无码高潮喷水| a黄片在线视频免费播放| 久久久久久亚洲av无码蜜芽| 欧美日韩国产综合aⅴ| 久久国产女同一区二区| 97se色综合一区二区二区| 吃奶摸下的激烈视频| 亚洲成AV人久久| 国产精品亚洲精品国产| 一本无码av中文出轨人妻| 亚洲国产成人无码影院| 国产剧情亚洲一区二区三区| 岳丰满多毛的大隂户| av无码久久久久久不卡网站 | 久久99免费精品国产| 欧洲女人与公拘交酡视频| 欧性猛交ⅹxxx乱大交| 亚洲av精品一区二区三| 老女老肥熟女一区二区| 性色av无码不卡中文字幕|