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

        ?

        一種JAVA控制流混淆方案

        2017-05-15 08:09:36余沛釗夏夢(mèng)森
        關(guān)鍵詞:控制流壓扁分支

        葛 華, 余沛釗, 夏夢(mèng)森

        (武漢理工大學(xué) a.信息工程學(xué)院; b.計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 武漢 430072)

        一種JAVA控制流混淆方案

        葛 華a, 余沛釗a, 夏夢(mèng)森b

        (武漢理工大學(xué) a.信息工程學(xué)院; b.計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 武漢 430072)

        在逆向分析的領(lǐng)域里,JAVA軟件最需要保護(hù)的地方毫無(wú)疑問(wèn)是整個(gè)軟件的結(jié)構(gòu)。本文在總結(jié)代碼混淆領(lǐng)域中的一些混淆策略后,提出一個(gè)基于結(jié)構(gòu)代碼塊的控制流混淆方案。該方案不是以基本代碼塊為基礎(chǔ)來(lái)提出具體的混淆策略,而是從軟件結(jié)構(gòu)角度上,只對(duì)那些復(fù)雜的結(jié)構(gòu)塊進(jìn)行混淆處理。該方案首先插入含有垃圾代碼塊的分支路徑,然后以結(jié)構(gòu)代碼塊為基礎(chǔ)進(jìn)行壓扁操作。分析表明該方案具有較好的效率。

        代碼混淆;控制流混淆;代碼塊

        1 代碼混淆

        當(dāng)我們將一段JAVA代碼通過(guò)混淆變化后生成一段新的代碼,在保證前后運(yùn)行結(jié)果相同的情況下,如果新生成的代碼比原來(lái)的代碼更具有迷惑作用,我們就把這個(gè)過(guò)程稱為代碼混淆[1-3]。

        依據(jù)混淆原理與所需進(jìn)行混淆處理的對(duì)象的不同,可以將代碼混淆分成以下幾類[4-5]:

        圖1 代碼混淆分類

        控制流混淆是靜態(tài)混淆的一種,近來(lái)得到學(xué)者的廣泛關(guān)注。

        2 控制流混淆

        對(duì)于JAVA應(yīng)用來(lái)說(shuō),攻擊者大多是通過(guò)解析出來(lái)的程序結(jié)構(gòu)來(lái)進(jìn)行破解,數(shù)據(jù)混淆和結(jié)構(gòu)混淆對(duì)于這種情況是沒(méi)有明顯的作用,因?yàn)楣粽咭琅f能夠?qū)⒊绦蚪Y(jié)構(gòu)重新構(gòu)造出來(lái),要想對(duì)JAVA應(yīng)用有一個(gè)很好的保護(hù),運(yùn)用控制流混淆去隱蔽并且改變它的運(yùn)行結(jié)構(gòu)是個(gè)很好的選擇[6-8]。

        將一段按照先后次序運(yùn)行的語(yǔ)句稱作為基本代碼塊,它先從首條語(yǔ)句開(kāi)始運(yùn)行,直到最后一條語(yǔ)句執(zhí)行完就結(jié)束。由多個(gè)基本代碼塊組成的結(jié)構(gòu)稱之為結(jié)構(gòu)代碼塊。

        壓扁的思想是將一個(gè)正常按照次序執(zhí)行的程序塊打亂,并把這些打亂的程序塊通過(guò)結(jié)構(gòu)進(jìn)行重新排列組合,將放在一個(gè)循環(huán)里,每次在程序塊運(yùn)行結(jié)束之前對(duì)一個(gè)全局變量進(jìn)行。這樣做不但打亂了原有的結(jié)構(gòu)而且確保能夠按照原來(lái)正確的次序運(yùn)行。結(jié)構(gòu)如圖2所示:

        圖2 結(jié)構(gòu)圖

        本文的控制流混淆方案分為兩步執(zhí)行:

        第一步模仿原基本代碼塊構(gòu)造出結(jié)構(gòu)相似但是數(shù)據(jù)不同的垃圾代碼塊,將垃圾代碼安插到原程序結(jié)構(gòu)中形成分支路徑,再往里面添加一個(gè)不透明謂詞來(lái)使得逆向攻擊者不知道程序接下來(lái)往哪條路徑走。

        第二步將部分的垃圾代碼塊和原基本塊進(jìn)行處理,為了控制混淆帶來(lái)的花銷,剩下的垃圾代碼塊將進(jìn)行刪除操作。

        本文基于結(jié)構(gòu)代碼塊JAVA控制流混淆過(guò)程是:首先對(duì)原程序進(jìn)行仔細(xì)的分析研究,對(duì)于一些結(jié)構(gòu)不是很復(fù)雜的結(jié)構(gòu)代碼塊我們將不進(jìn)行混淆操作,而對(duì)于那些結(jié)構(gòu)比較復(fù)雜的結(jié)構(gòu)代碼塊,我們把里面的基本代碼塊全部提取出來(lái),接著對(duì)其進(jìn)行插入分支路徑的操作,然后對(duì)不同種類的基本代碼塊進(jìn)行對(duì)應(yīng)的壓扁混淆操作,經(jīng)過(guò)這一系列的操作后得到一個(gè)混淆后的程序。

        3 控制流混淆算法

        3.1 基于不透明謂詞的分支路徑

        在對(duì)原程序進(jìn)行插入分支路徑前,我們首先要對(duì)整個(gè)JAVA代碼進(jìn)行遍歷分析,選取復(fù)雜度高的結(jié)構(gòu)進(jìn)行接下來(lái)的混淆操作。插入分支路徑第一步就是選取不透明謂詞和構(gòu)造垃圾代碼塊[9-10]。當(dāng)我們?cè)趯?duì)一JAVA代碼進(jìn)行保護(hù)的時(shí)候,如果一個(gè)表達(dá)式的值我們很容易得到,但是逆向攻擊者卻要花費(fèi)巨大時(shí)間來(lái)判定這個(gè)表達(dá)式的值,那么這個(gè)表達(dá)式就被叫做不透明謂詞。本文用PT來(lái)代表值永遠(yuǎn)為真的不透明謂詞,用PF來(lái)代表值永遠(yuǎn)為假,用P?代表值真假不確定,在圖3中,實(shí)線箭頭表示運(yùn)行程序時(shí)會(huì)走到的路徑,虛線箭頭表示運(yùn)行程序時(shí)永遠(yuǎn)不會(huì)到達(dá)的路徑即分支路徑。

        圖3 不透明謂詞類別

        在虛線箭頭的一邊插入垃圾代碼塊。這里需要指出的是插入垃圾代碼只會(huì)給原軟件帶來(lái)文件大小上的開(kāi)銷,因?yàn)槠溆肋h(yuǎn)不會(huì)被運(yùn)行到,所以不會(huì)增加程序的運(yùn)行時(shí)間。垃圾代碼最好構(gòu)造得和原代碼塊外形看起來(lái)一樣,我們常常通過(guò)保持兩者程序結(jié)構(gòu)相同的情況下改變垃圾代碼塊中的數(shù)據(jù),這樣做會(huì)使混淆后的程序變得更加難以逆向破解。

        3.2 壓扁控制流

        在進(jìn)行插入多余分支路徑后我們接下來(lái)對(duì)程序進(jìn)行壓扁操作,使整個(gè)程序結(jié)構(gòu)更難被逆向攻擊。本文的壓扁控制流的特點(diǎn)是只對(duì)部分的原程序塊和垃圾代碼塊進(jìn)行壓扁操作[11-13],剩下的垃圾代碼塊直接刪除。

        由基本塊的判斷條件不同將壓扁控制流相關(guān)算法細(xì)分為if語(yǔ)句,while語(yǔ)句,for語(yǔ)句,switch語(yǔ)句,do-while語(yǔ)句等基本代碼塊算法。

        當(dāng)我們對(duì)原程序進(jìn)行壓扁操作的時(shí)候,其實(shí)我們利用的條件基本代碼塊的壓扁控制流算法,首先將整個(gè)程序看成一個(gè)結(jié)構(gòu)塊,然后對(duì)每一層進(jìn)行分析,得到該層的嵌套類型,由此就知道了我們接下來(lái)將要調(diào)用哪一個(gè)壓扁控制流算法。

        (1)分支結(jié)構(gòu)壓扁控制流算法

        該算法首先分析程序結(jié)構(gòu),只對(duì)程序結(jié)構(gòu)復(fù)雜的進(jìn)行壓扁操作,在進(jìn)行壓扁的時(shí)候抽取一半的原基本代碼塊和1/4的垃圾代碼塊進(jìn)行壓扁,剩余的垃圾代碼塊直接刪除。

        下面是一個(gè)具體基于基本代碼塊壓扁控制流混淆算法的范例,將if語(yǔ)句進(jìn)行壓扁控制流混淆。

        圖4(a) 原if語(yǔ)句代碼

        圖4(b) 混淆后if語(yǔ)句代碼

        圖5(a) 原if語(yǔ)句控制流

        圖5(b) 壓扁后的if語(yǔ)句控制流

        圖4 (a)是原if語(yǔ)句代碼,圖4 (b)混淆后if語(yǔ)句代碼,圖5(a)和圖5(b)是混淆前后的控制流圖,混淆之后的代碼與原代碼語(yǔ)義等價(jià),但結(jié)構(gòu)不同。

        (2)循環(huán)語(yǔ)句基本代碼塊壓扁控制流算法

        在這里需要指出的是,循環(huán)語(yǔ)句的判斷條件有時(shí)候可能是隨機(jī)條件或者根據(jù)本循環(huán)基本代碼塊結(jié)構(gòu)以外的條件隨機(jī)產(chǎn)生的,這樣我們就不能確切的指定出循環(huán)的次數(shù)。本文按照在程序運(yùn)行前是否能確定循環(huán)次數(shù)的條件,將循環(huán)語(yǔ)句基本代碼塊壓扁控制流算法分為兩種情況來(lái)討論。

        (1)不能確定循環(huán)次數(shù)的情況下,抽取一半的原基本代碼塊和1/4的垃圾代碼塊進(jìn)行壓扁,剩余的垃圾代碼塊直接刪除。

        (2)能確定循環(huán)次數(shù)的情況下,將程序結(jié)構(gòu)分成兩個(gè)部分,對(duì)前一半的結(jié)構(gòu)不進(jìn)行壓扁操作,我們只對(duì)后一半的結(jié)構(gòu)進(jìn)行壓扁操作。

        下面是一個(gè)具體的基本代碼塊壓扁控制流混淆范例,將語(yǔ)句進(jìn)行壓扁控制流混淆。

        圖6(a) 原while語(yǔ)句代碼

        圖6(b) 壓扁后while語(yǔ)句代碼

        圖7(a) 原while語(yǔ)句控制流

        圖7(b) 壓扁后while語(yǔ)句控制流

        圖6 (a)是原while語(yǔ)句代碼,圖6 (b)混淆后while語(yǔ)句代碼,圖7(a)和圖7(b)是壓扁前后的控制流圖,壓扁之后的代碼與原代碼語(yǔ)義等價(jià),但結(jié)構(gòu)不同。

        4 小結(jié)

        本文首先對(duì)代碼混淆的定義和分類做出了介紹,接著詳細(xì)介紹了控制流混淆方案,抽取結(jié)構(gòu)復(fù)雜度較高的結(jié)構(gòu)代碼塊進(jìn)行混淆。選擇正確的位置插入不透明分支路徑和進(jìn)行壓扁操作,最后對(duì)分支機(jī)構(gòu)和循環(huán)結(jié)構(gòu)基本塊的混淆算法做出了非常詳細(xì)的論述,并且將混淆前后范例代碼和結(jié)構(gòu)圖進(jìn)行了展現(xiàn)。

        [1]Cimato S, De Santis A, Ferraro Petrillo U. Overcoming the obfuscation of Java programs by identifier renaming[J]. Journal of Systems & Software, 2005, 78(1):60-72.

        [2]宋亞奇, 李莉. 基于隨機(jī)插入策略的Java混淆器設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2009, 30(4):887-889.

        [3]Sun Y, Huang G. A control flow obfuscation scheme based on garbage code[J]. Journal of Theoretical & Applied Information Technology, 2012.

        [4]蔣華, 劉勇, 王鑫. 基于控制流的代碼混淆技術(shù)研究[J]. 計(jì)算機(jī)應(yīng)用研究, 2013, 30(3):897-899.

        [5]Kulkarni A, Metta R. A New Code Obfuscation Scheme for Software Protection[C]// IEEE, International Symposium on Service Oriented System Engineering. IEEE, 2014:409-414.

        [6]陳喆, 王志, 王曉初, 賈春福. 基于代碼移動(dòng)的二進(jìn)制程序控制流混淆方法[J]. 計(jì)算機(jī)研究與發(fā)展, 2015, 52(8):1902-1909.

        [7]邵孟良, 齊德昱, 劉東文. 一種多態(tài)內(nèi)聯(lián)代碼混淆算法[J]. 計(jì)算機(jī)應(yīng)用研究, 2015, 32(6):1787-1790.

        [8]王志, 賈春福, 劉偉杰, 王曉初, 張海寧, 于曉旭,等. 一種抵抗符號(hào)執(zhí)行的路徑分支混淆技術(shù)[J]. 電子學(xué)報(bào),2015,(5):870-878.

        [9]Ceccato M, Penta M D, Falcarin P, et al. A family of experiments to assess the effectiveness and efficiency of source code obfuscation techniques[J]. Empirical Software Engineering, 2014, 19(4):1040-1074.

        [10]姚琴. 基于數(shù)據(jù)混淆的軟件保護(hù)研究[D]. 武漢理工大學(xué), 2010.

        [11]趙玉潔, 湯戰(zhàn)勇, 王妮, 房鼎益, 顧元祥. 代碼混淆算法有效性評(píng)估[J]. 軟件學(xué)報(bào), 2012, 23(3):700-711.

        [12]付劍晶, 王珂. 軟件迷惑變換的魯棒性量化評(píng)價(jià)[J]. 軟件學(xué)報(bào), 2013, 24(4):730-748.

        [13]林水明, 吳偉民, 陶桂華, 林志毅, 蘇慶. 基于主成分分析的代碼混淆有效性綜合評(píng)估模型[J]. 計(jì)算機(jī)應(yīng)用研究, 2016, 33(9):2819-2822.

        A Code Obfuscation Policy for Java Control Flows

        GE Hua, YU Pei-zhao, XIA Meng-sen

        (School of Information Engineering, Wuhan 430072, China)

        In the reverse analysis field, the structure of Java-based software often needs to be protected. This paper proposes a control flow obfuscation policy based on the structure code blocks under the conclusion of certain conventional code obfuscation policies. This policy is built on the complex structure blocks based on the software structure rather than on basic code. It firstly embeds the branches with junk code blocks, and then carries out the flattening operations based on the structure code blocks. The analysis of the policy indicates that this policy is rather efficient in practice.

        code obfuscation; control flow obfuscation; code block

        2017-01-15

        葛 華(1977-),女,湖北武漢人,副教授,研究方向?yàn)殡娮有畔ⅰ?余沛釗(1996-),男,湖北宜昌人,研究方向?yàn)殡娮涌茖W(xué)與技術(shù)。本文的共同第一作者、通訊作者。 夏夢(mèng)森(1992-), 男,碩士研究生,研究方向?yàn)樾畔踩?/p>

        TP31

        A

        1674-344X(2017)2-0034-04

        猜你喜歡
        控制流壓扁分支
        城鎮(zhèn)燃?xì)饩垡蚁┕艿缐罕庾钄嚓P(guān)鍵技術(shù)分析
        煤氣與熱力(2023年1期)2023-02-10 02:53:54
        抵御控制流分析的Python 程序混淆算法
        工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
        電子科技(2021年2期)2021-01-08 02:25:58
        抵御控制流分析的程序混淆算法
        Carry-on Bags
        巧分支與枝
        塔架加強(qiáng)桿壓扁成型實(shí)驗(yàn)及力學(xué)性能研究
        楔形機(jī)構(gòu)壓扁工裝設(shè)計(jì)與應(yīng)用
        一類擬齊次多項(xiàng)式中心的極限環(huán)分支
        基于控制流隱藏的代碼迷惑
        国产精品二区三区在线观看| 最新亚洲人成无码网站| 91爱爱视频| 亚洲视频在线免费观看一区二区| 黄片视频免费观看蜜桃| 国产精品伦一区二区三级视频| 热99精品| 中文字幕中文字幕人妻黑丝| 森中文字幕一区二区三区免费| 天堂无码人妻精品av一区| 久久噜噜噜| 亚洲精品女同在线观看| 日本一区二区三区视频网站| 少妇性荡欲视频| 亚洲情a成黄在线观看动漫尤物| 国产精品一区又黄又粗又猛又爽| 女人18片毛片60分钟| 亚洲精品97久久中文字幕无码| 九九在线精品视频xxx| 亚洲日产乱码在线中文字幕| 一本色道久久综合狠狠躁篇| 熟妇五十路六十路息与子| 白白色发布永久免费观看视频| 东北熟妇露脸25分钟| 久久99精品九九九久久婷婷 | 亚洲av无码片一区二区三区| 人妻少妇精品一区二区三区| 国产成人大片在线播放| 人人爽久久涩噜噜噜丁香| 国产欧美精品一区二区三区,| 国产精品自拍视频免费看| 无码人妻精品一区二区三区蜜桃| 亚洲巨乳自拍在线视频| 中文字幕精品亚洲无线码二区| 亚洲毛片在线观看免费| 无码人妻久久一区二区三区免费| 无码不卡免费一级毛片视频| 日本高清不卡二区三区| 亚洲人成网网址在线看| 久久ri精品高清一区二区三区| 久久夜色精品国产九色|