国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

跨語言的項目級代碼混淆方法

2018-02-27 03:06張潤潔吳毅堅趙文耘
計算機(jī)應(yīng)用與軟件 2018年1期
關(guān)鍵詞:源代碼關(guān)聯(lián)性名稱

張潤潔 吳毅堅 趙文耘

1(復(fù)旦大學(xué)軟件學(xué)院 上海 201203) 2(復(fù)旦大學(xué)計算機(jī)科學(xué)技術(shù)學(xué)院 上海 201203) 3(上海市數(shù)據(jù)科學(xué)重點實驗室 上海 200433)

0 引 言

代碼混淆是一種在保證代碼功能性不變的前提下將原有代碼轉(zhuǎn)化為在形式上難于閱讀和理解的代碼變換技術(shù),能夠提升軟件逆向工程的難度[1]。隨著代碼混淆研究的發(fā)展,混淆技術(shù)在代碼保護(hù)強度和保護(hù)代價方面做到了很好的平衡,被應(yīng)用到了數(shù)字水印[2]、版權(quán)保護(hù)[3]等很多實用領(lǐng)域。代碼混淆器的發(fā)展也日趨成熟,Java混淆器ProGuard[4]、JavaScript混淆器JavaScript Obfuscator[13]等在工業(yè)界得到廣泛應(yīng)用。

目前,隨著軟件項目復(fù)雜性的提高,一個項目通常由多種語言一起編寫,且不同類型代碼間通常具有關(guān)聯(lián)關(guān)系。例如在基于Struts2的 Web項目中,action的名稱在前臺JavaScript代碼、Struts配置代碼和后臺Java代碼之間必須保持一致。然而,傳統(tǒng)的混淆方法通常只針對局部混淆,當(dāng)混淆了一個或者部分子系統(tǒng)的代碼后,可能造成混淆后的代碼元素不再相互關(guān)聯(lián),導(dǎo)致整個軟件系統(tǒng)無法組裝運行。因此,為實現(xiàn)全局混淆,需要對關(guān)聯(lián)代碼進(jìn)行特殊處理。目前通常采取人工設(shè)置混淆配置項的方式,逐一標(biāo)識關(guān)聯(lián)性代碼元素的混淆方式?;煜藛T需要花費大量精力處理源代碼細(xì)節(jié),且繁瑣的配置項極易引入錯誤,造成引用程序集失效的問題,導(dǎo)致混淆后的項目無法正常運行。

本文設(shè)計了跨語言的代碼元素及其關(guān)聯(lián)關(guān)系的描述規(guī)則,其中定義統(tǒng)一代碼模型,抽取代碼元素信息,實現(xiàn)對不同代碼元素的統(tǒng)一化描述。并提出關(guān)聯(lián)規(guī)則的概念,作為代碼關(guān)聯(lián)關(guān)系的統(tǒng)一描述規(guī)則,結(jié)合正則模式匹配技術(shù),獲取項目代碼關(guān)聯(lián)關(guān)系。在此基礎(chǔ)上,提出跨語言的項目級代碼混淆方法,實現(xiàn)對同一項目中不同類型代碼的代碼元素的統(tǒng)一化混淆以及代碼關(guān)聯(lián)性的自動化維護(hù),保證混淆前后代碼關(guān)聯(lián)性的一致,提高了項目整體混淆效率和混淆程度。

1 跨語言的項目級代碼混淆方法

1.1 研究動機(jī)

本文以業(yè)界常用的基于Struts2框架的Web項目為例,前后臺代碼與配置代碼三者間存在一定的關(guān)聯(lián)關(guān)系。例如在前臺JS代碼、Struts配置代碼和后臺Java代碼中表示Action的名稱的代碼元素是相互關(guān)聯(lián)保持一致的,如圖1所示。

圖1 Struts2項目代碼元素關(guān)聯(lián)性示例

現(xiàn)有混淆方法一般無法深度混淆前后臺交互的Action名稱。例如,當(dāng)混淆方法對后臺Java代碼的方法名進(jìn)行混淆后,仍然無法更改Struts2框架的配置文件中存在的方法名,此時前臺發(fā)送的方法調(diào)用請求按照配置文件中的映射規(guī)則,在相應(yīng)的Java文件中找不到相應(yīng)的方法,從而產(chǎn)生錯誤。另外,由于前臺代碼中的字符串通常以明文形式存在,而Action是Struts2中是非常重要的組成部分,因此,為了更好地保護(hù)軟件產(chǎn)品的利益,需要混淆能夠反映代碼的邏輯信息的Action名稱,提升軟件保護(hù)的門檻。

針對上述問題,我們提出了跨語言的項目級代碼混淆方法,設(shè)計了代碼元素及其關(guān)聯(lián)關(guān)系的描述規(guī)則,對不同類型代碼中的各類代碼元素進(jìn)行統(tǒng)一化的描述。通過獲取項目代碼關(guān)聯(lián)關(guān)系,將相互關(guān)聯(lián)并需要一起混淆的代碼元素梳理在一起,解決了現(xiàn)有混淆方法易造成的混淆后代碼關(guān)聯(lián)性丟失問題。

1.2 跨語言的項目級代碼混淆方法過程概述

跨語言的項目級代碼混淆方法過程,如圖2所示。

圖2 跨語言的項目級代碼混淆方法過程示意圖

主要包括以下三個步驟:

(1) 代碼元素信息抽取。以項目程序源代碼和用戶配置文件作為輸入元素,用戶配置文件信息指明源代碼中待混淆代碼元素的所屬文件類型、代碼文件范圍、代碼元素類型等信息。利用本文定義的描述不同類型代碼中各類代碼元素的統(tǒng)一代碼模型UCM(Unified Code Model)在程序解析工具的支持下分析匹配源代碼,將不同的代碼元素轉(zhuǎn)換成統(tǒng)一的程序抽象形式,為后續(xù)代碼關(guān)聯(lián)關(guān)系的獲取以及混淆執(zhí)行提供了統(tǒng)一形式的輸入元素。

(2) 關(guān)聯(lián)關(guān)系識別。本文定義了描述項目代碼映射規(guī)則的關(guān)聯(lián)規(guī)則CR(Connection Rule),利用正則匹配技術(shù),使用關(guān)聯(lián)規(guī)則作為匹配模式串對項目配置文件進(jìn)行模式匹配,獲取項目代碼關(guān)聯(lián)關(guān)系,依據(jù)項目關(guān)聯(lián)關(guān)系判定代碼元素的關(guān)聯(lián)性,將相互關(guān)聯(lián)的需要一起混淆的代碼元素梳理在一起。

(3) 混淆執(zhí)行。利用關(guān)聯(lián)關(guān)系識別步驟中得到的項目關(guān)聯(lián)關(guān)系列表,以保持混淆后代碼關(guān)聯(lián)性為前提生成混淆算法。依據(jù)代碼元素的特征描述信息如代碼文件類型、代碼元素類型、代碼元素名稱等,調(diào)用相應(yīng)的程序修改方法,執(zhí)行混淆,最終得到混淆后的項目代碼。

1.3 跨語言的項目級代碼混淆方法設(shè)計與實現(xiàn)

1.3.1 統(tǒng)一代碼模型

本文定義了描述不同類型代碼中各類代碼元素的統(tǒng)一代碼模型(UCM),如圖3所示。其中,Code Type表示代碼元素類,用于定義不同類型的代碼元素,由不少于一個的Code Element構(gòu)成。Code Element代表一種名稱確定的代碼元素,并包含多個具體實例Instance。Instance對代碼元素的名稱、起始標(biāo)志、結(jié)束標(biāo)志以及源代碼文件路徑進(jìn)行了明確的定義,用于描述每一個代碼元素的具體存在信息。Code Pair表示關(guān)聯(lián)代碼元素對,用于定義一對相互關(guān)聯(lián)的代碼元素,每個Code Pair由兩個Code Element構(gòu)成。

圖3 統(tǒng)一代碼模型

1.3.2 代碼元素信息抽取

由于統(tǒng)一代碼模型(UCM)中包含了準(zhǔn)確描述每一個代碼元素所必須的屬性特征。本文利用統(tǒng)一代碼模型對軟件項目中具體的源代碼進(jìn)行分析以及匹配,從中抽取代碼元素在源代碼中具體的屬性信息,從而將同一項目中多樣化的代碼元素轉(zhuǎn)換為統(tǒng)一表示形式,為后續(xù)獲取代碼元素間的關(guān)聯(lián)關(guān)系以及跨語言的混淆算法實施提供了統(tǒng)一的代碼元素對象。例如,我們對基于Struts2框架的Web項目中JavaScript代碼的Action名稱,Class代碼中的方法名以及struts.xml文件中的Action名稱和方法名進(jìn)行信息抽取,代碼元素信息抽取結(jié)果如圖4所示。另外,分析源代碼的過程需要程序解析技術(shù)的支持,我們開發(fā)了相應(yīng)的程序解析工具,目前支持Class、JavaScript以及XML、JSP、HTML等各類文本文件類型的源代碼文件。

1.3.3 關(guān)聯(lián)規(guī)則

關(guān)聯(lián)規(guī)則(CR)是項目代碼關(guān)聯(lián)關(guān)系的統(tǒng)一描述規(guī)則,其完整文本模式描述稱為Pattern,代表關(guān)聯(lián)規(guī)則整體的文本模式,由多個子模式(Sub_pattern)組成。Sub_pattern代表子文本模式,Sub_pattern之間相互獨立,獨立用“#”表示,如圖5所示。

圖5 關(guān)聯(lián)規(guī)則

CR的完整性定義為:CR={P,F(xiàn)Q,F(xiàn)S,F(xiàn)L,F(xiàn)T,F(xiàn)H,F(xiàn)R,BQ,BS,BL,BT,BH,BR},CR各組成元素的名稱及定義如表1所示。前部元素與后部元素為關(guān)聯(lián)關(guān)系所描述的兩個關(guān)聯(lián)代碼對象,例如FS和BS分別為一條關(guān)聯(lián)規(guī)則中前部元素全稱與后部元素全稱的文本模式描述。利用正則表達(dá)式[14]描述文本模式,CR各組成元素均為正則表達(dá)式集合,這源于對網(wǎng)絡(luò)安全監(jiān)測領(lǐng)域經(jīng)常利用正則表達(dá)描述攻擊特征[15]的借鑒。此外,以基于Struts2框架的Web項目為例,Struts2示例列給出符合框架代碼映射規(guī)則的CR內(nèi)容。

表1 關(guān)聯(lián)規(guī)則組成元素

1.3.4 關(guān)聯(lián)關(guān)系識別

本文利用正則匹配技術(shù),使用關(guān)聯(lián)規(guī)則作為模式串對項目配置文件進(jìn)行過濾,匹配結(jié)果即為項目代碼關(guān)聯(lián)關(guān)系列表。當(dāng)關(guān)聯(lián)關(guān)系包含通配符時,需要進(jìn)一步明確代碼間的映射關(guān)系。我們利用包含通配符的關(guān)聯(lián)關(guān)系構(gòu)建模式串,正則匹配代碼元素抽象信息,獲取代碼元素間明確的對應(yīng)關(guān)系。例如,利用表1中Struts2示例內(nèi)容解析項目配置文件struts.xml中圖6所示代碼片段,得到圖6關(guān)聯(lián)關(guān)系編號1,即代碼類型為js、html或jsp且名稱為“one_*”的前部元素與代碼文件名為“action.getAction”的后部元素關(guān)聯(lián)。完善后得到圖6關(guān)聯(lián)關(guān)系編號2,確定了名稱“one_copy”的前部代碼元素與名稱為“copy”后部代碼元素關(guān)聯(lián)。

圖6 關(guān)聯(lián)關(guān)系獲取示意圖

最后,利用關(guān)聯(lián)關(guān)系信息分別對前部和后部代碼元素進(jìn)行匹配,符合關(guān)聯(lián)關(guān)系信息描述的代碼元素即為關(guān)聯(lián)性代碼元素。在關(guān)聯(lián)性代碼元素中,前部元素與后部元素通過所匹配的關(guān)聯(lián)關(guān)系條目編號關(guān)聯(lián)在一起,并在后續(xù)的代碼混淆過程中一起混淆,從而實現(xiàn)關(guān)聯(lián)代碼的混淆聯(lián)動。

1.3.5 混淆執(zhí)行

混淆算法依賴于完善后的關(guān)聯(lián)關(guān)系列表,利用列表中關(guān)聯(lián)關(guān)系條目的位置信息替換具有實際意義的明文信息,使得混淆后代碼元素人眼難辨而機(jī)器可識。同時,依據(jù)項目關(guān)聯(lián)規(guī)則對代碼元素名稱的特征描述,獲取代碼元素混淆后的名稱格式,使用關(guān)聯(lián)代碼元素對具有的相同位置信息作為名稱內(nèi)容,生成混淆后的代碼元素名稱,保證混淆前后代碼元素關(guān)聯(lián)性一致。例如,圖6關(guān)聯(lián)關(guān)系編號2包含了前部元素“one_copy”與后部元素“copy”關(guān)聯(lián)信息,使用該條關(guān)聯(lián)信息在關(guān)聯(lián)關(guān)系列表中的位置信息替換明文信息后,前部元素“one_copy”被混淆成“A00003_S00006”, 后部元素“copy”被混淆成“S0006”,其中數(shù)字3和數(shù)字6均與該關(guān)聯(lián)信息條目在關(guān)聯(lián)關(guān)系列表中的位置有關(guān)。

最后在明確了混淆算法的前提下,根據(jù)代碼元素的具體屬性特征,如所屬文件類型、代碼元素類型等,調(diào)用相應(yīng)的程序修改方法,執(zhí)行混淆。例如,利用UCM對圖1示例中前臺JS代碼的Action名稱元素,后臺Java代碼的方法名元素以及Struts配置代碼元素進(jìn)行信息抽取,經(jīng)關(guān)聯(lián)關(guān)系識別和混淆執(zhí)行后,混淆結(jié)果如圖7所示。其中前臺JS代碼的Action名稱元素 “tree_getLevel”被混淆成“A00001”,后臺Java代碼方法名元素“get”被混淆成 “S00001”,通過混淆后的Struts配置代碼保持了代碼元素間的關(guān)聯(lián)關(guān)系。

圖7 混淆后Struts2項目代碼元素關(guān)聯(lián)關(guān)系示例

2 實 驗

2.1 工具實現(xiàn)

基于本文方法,研發(fā)了跨語言的項目級代碼混淆工具?;煜ぞ咭罁?jù)用戶配置文件對項目中不同類型代碼的代碼元素建模,獲取項目代碼關(guān)聯(lián)關(guān)系,生成混淆算法,完成關(guān)聯(lián)性代碼元素的統(tǒng)一混淆并在混淆過程中維護(hù)了代碼關(guān)聯(lián)關(guān)系,最終得到混淆后可正常運行的項目代碼。

2.2 實驗及評價

實驗選取兩個基于Struts2框架的實際Web項目源程序作為實驗對象,分別對這兩個項目進(jìn)行混淆實驗,實驗設(shè)置信息如表2所示。實驗中,混淆人員通過用戶配置文件描述源代碼具體信息,運行工具進(jìn)行代碼混淆。本文分別對各組實驗的工具運行時間,混淆前后項目程序體積變化情況,被混淆代碼元素的數(shù)量和名稱變換情況進(jìn)行了統(tǒng)計。從混淆方法的可行性及有效性兩個方面分析實驗結(jié)果,最后對本文混淆方法的局限性進(jìn)行說明。

表2 實驗設(shè)置信息

續(xù)表2

2.2.1 混淆方法的可行性評估

通過記錄各組實驗中工具的運行時間,結(jié)合實驗對象的有效代碼行數(shù)進(jìn)行分析,如圖8所示。項目A的混淆時間為76秒,項目B的混淆時間為95秒,項目代碼有效行數(shù)越多,工具運行總時間越長,但隨著代碼行數(shù)的增長,工具單位時間處理的代碼行數(shù)并未降低。這是因為混淆時間還與單位數(shù)量的代碼行中所包含的關(guān)聯(lián)代碼元素數(shù)量有關(guān)。另外,混淆工具均在較短的有效時間內(nèi)完成了項目混淆工作。

圖8 有效代碼行數(shù)與混淆時間

此外,兩組實驗最終均得到了可正常運行的混淆后項目程序,利用自動化測試工具UFT[5]進(jìn)行功能測試,對比混淆前后項目功能測試結(jié)果,說明混淆后項目功能的正確性,并統(tǒng)計各功能模塊覆蓋的被混淆代碼元素數(shù)量。以項目A為例,共混淆81個Action名稱,功能測試中各測試用例的執(zhí)行情況以及Action名稱覆蓋情況如表3所示。

表3 測試用例執(zhí)行結(jié)果及Action名稱覆蓋表

分析實驗結(jié)果可知,60個測試用例均執(zhí)行通過,說明混淆前后項目程序保持了功能性的一致,測試覆蓋到的Action名稱數(shù)量占混淆名稱總量的90%以上,反映了混淆前后Action名稱代碼元素關(guān)聯(lián)性的一致。綜上所述,工具能在有效時間內(nèi)混淆關(guān)聯(lián)代碼,并保證混淆后項目的正常運行,說明本文混淆方法以及混淆工具在實際的項目混淆中是具有可行性的。

2.2.2 混淆方法的有效性評估

混淆后項目A與項目B的程序體積增長率分別為2.90%及3.10%。由于本文混淆算法選取了較長的標(biāo)識符替換代碼元素原有名稱,混淆后程序體積均有所增長。但整體來看,混淆后程序體積增長率均不大,這是由于本文混淆算法不會產(chǎn)生冗余代碼,因此不會導(dǎo)致程序代碼體積的大幅增加。

兩組實驗中發(fā)生混淆的代碼元素種類及數(shù)量情況如圖9所示。由圖9可知,待混淆項目中關(guān)聯(lián)性代碼元素數(shù)量眾多,且分布于不同類型的代碼中,說明了混淆關(guān)聯(lián)性代碼元素對于提高項目混淆程度有所幫助,同時驗證了所提方法具備了跨語言混淆的能力。

圖9 混淆代碼元素數(shù)量統(tǒng)計圖

實驗過程中,我們記錄了混淆前后的Action的名稱的變化情況。以項目A為例,從混淆結(jié)果中隨機(jī)選取10條代碼元素名稱的變換信息,如表4所示。由混淆前后的Action名稱對比情況可以看出,混淆前名稱里諸如doQuery、bindSqlData這種有意義的名稱,容易給用戶造成聯(lián)想,產(chǎn)生攻擊嘗試,本文混淆方法隱藏了代碼元素名稱所具有的意義,增加了人工閱讀和理解代碼的難度。

表4 以A項目為例混淆前后部分Action名稱對比表

續(xù)表4

然而,本文方法具有一定的局限性,由于本文方法目前只考慮關(guān)聯(lián)性代碼元素的混淆,因此只能夠處理關(guān)聯(lián)代碼的混淆聯(lián)動問題,仍然需要依賴傳統(tǒng)的混淆方法處理局部混淆。此外,本文混淆方法對于不依賴于變量名的邏輯分析工具仍然是沒有作用的,只提升了人工分析的門檻。

3 相關(guān)工作

代碼混淆技術(shù)作為一種軟件安全保護(hù)技術(shù)而興起,隨Java語言的迅速發(fā)展而備受關(guān)注,近十幾年來很多組織和研究人員致力于代碼混淆技術(shù)在軟件安全保護(hù)方面的研究。

Collberg等[1]最早對碼混淆進(jìn)行了準(zhǔn)確定義,將混淆轉(zhuǎn)換分為數(shù)據(jù)混淆、詞法混淆、控制混淆,以及預(yù)防性混淆,并提出普適于高級語言的混淆算法,但未涉及實現(xiàn)細(xì)節(jié)??刂苹煜矫娴难芯肯鄬^多,平展控制流混淆算法[6]及不透明謂詞混淆算法[7]是較為著名的研究成果。本文設(shè)計跨語言的代碼混淆算法,結(jié)合布局混淆和數(shù)據(jù)混淆兩方面的混淆變換技術(shù),對不同類型代碼元素進(jìn)行統(tǒng)一化混淆。

Barak 等[8]給出了程序混淆的形式化定義,突破了此前代碼混淆算法評估只能定性描述的局限。此后利用密碼學(xué)等數(shù)學(xué)理論為重點的代碼混淆技術(shù)成果不斷涌現(xiàn),例如通用混淆被證明是難以實現(xiàn),而對某些具體函數(shù)類的混淆構(gòu)造是可以有效實現(xiàn)的[9],以及利用密碼學(xué)理論對反混淆的NP復(fù)雜度問題進(jìn)行證明[10]。至今,軟件工程學(xué)與密碼學(xué)現(xiàn)在仍然是代碼混淆技術(shù)的兩個最主要的研究方向。

混淆模型方面,混淆新模型是程序混淆方面的一個重點研究方向,Barak等[8]指出雖然研究混淆的不同定義類型具有一定的實際應(yīng)用意義。例如,對軟件項目混淆時可以結(jié)合硬件的輔助,如公鑰混淆[11]以及帶硬件假設(shè)的安全混淆[12]。公鑰混淆與一個公鑰系統(tǒng)相結(jié)合,輸出的結(jié)果是原函數(shù)的輸出結(jié)果在此公鑰系統(tǒng)下的加密密文。帶硬件假設(shè)的安全混淆中將軟件部分和一個硬件部分共同組成混淆函數(shù),混淆的功能性由軟件部分和硬件部分共同完成,而安全性只考慮軟件部分的安全性。本文研究工作從混淆軟件整體項目代碼的角度出發(fā),通過設(shè)計項目級代碼混淆方法模型,實現(xiàn)項目關(guān)聯(lián)代碼的統(tǒng)一化混淆,從而提升項目整體的混淆強度。

代碼混淆技術(shù)也帶動了很多有效混淆工具的開發(fā),對現(xiàn)實軟件產(chǎn)品內(nèi)部核心算法和知識產(chǎn)權(quán)進(jìn)行保護(hù)。ProGuard[4]面向 Java類文件提供壓縮和優(yōu)化功能,利用布局混淆和數(shù)據(jù)混淆來實現(xiàn)混淆保護(hù),通過刪除或者重命名類、字段、方法與屬性,最大程度地優(yōu)化字節(jié)碼文件。在JS語言方面,Javascript Obfuscator[13]通過布局混淆將對JS源代碼轉(zhuǎn)換成不可讀的形式,并具有較強壓縮能力。目前混淆工具的設(shè)計通常只針對特定編程語言類型的代碼,本文基于所提方法研發(fā)跨語言的項目級代碼混淆工具,能夠?qū)崿F(xiàn)跨語言的代碼混淆以及關(guān)聯(lián)代碼元素關(guān)聯(lián)性的維護(hù),使得混淆后的項目程序能夠正常運行,從而實現(xiàn)對現(xiàn)實軟件產(chǎn)品全局業(yè)務(wù)邏輯代碼的有效保護(hù)。

4 結(jié) 語

本文從提升軟件項目整體混淆效果的角度出發(fā),提出跨語言的項目級代碼混淆方法。通過設(shè)計描述不同類型代碼的各類代碼元素的統(tǒng)一代碼模型,以及定義關(guān)聯(lián)規(guī)則對項目關(guān)聯(lián)關(guān)系進(jìn)行統(tǒng)一化描述,實現(xiàn)了項目關(guān)聯(lián)關(guān)系的識別和自動化維護(hù)以及跨語言的代碼混淆,提高了項目代碼整體的混淆程度,提升了軟件保護(hù)的門檻。基于所提方法,研發(fā)跨語言的項目級代碼混淆工具,并在基于Struts2框架的真實源代碼項目中進(jìn)行了混淆實驗,對所提方法及技術(shù)的可行性和有效性進(jìn)行說明。

然而,本文方法目前局限于混淆項目關(guān)聯(lián)代碼,代碼的局部邏輯混淆仍然依賴于傳統(tǒng)的混淆方法。另外,所提方法中對于項目關(guān)聯(lián)關(guān)系的獲取仍需解析源代碼文件,因此在實際應(yīng)用中受到文件解析工具能力的限制。關(guān)聯(lián)規(guī)則目前僅限于描述二元元素間的關(guān)聯(lián)關(guān)系,如何進(jìn)一步完善關(guān)聯(lián)規(guī)則的統(tǒng)一化的定義,設(shè)計更為通用的描述規(guī)則以適應(yīng)更多類型的項目是我們需要繼續(xù)研究的問題。

[1] Collberg C,Thomborson C,Low D.A taxonomy of obfuscating transformations[R].Technical Report 148,University of Auckland,1997:325-350.

[2] Giacobazzi R.Hiding information in completeness holes:New perspectives in code obfuscation and watermarking[C]//Software Engineering and Formal Methods (SEFM),2008:7-18.

[3] Zhu W,Thomborson C.A provable scheme for homomorphic obfuscation in software security[C]//Communication,Network and Information Security (CNIS’05),2005:208-212.

[4] Proguard.ProGuard Java Optimizer and Obfuscator[EB/OL].2016-09-20.http://www.guardsquare.com/en/proguard.

[5] HPE UFT.The complete solution for automation of web,mobile,API,and packaged applications[EB/OL].2015-11.https://www.hpe.com/h20195/V2/GetPDF.aspx/4AA5-6938ENW.pdf.

[6] Chow S,Johnson H.An approach to the obfuscation of control flow of sequential computer programs[C]//Proceedings of the 4th International Conference on Information Security.Springer Verlag London,2001:144-155.

[7] Collberg C,Thomborson C,Low D.Manufacturing cheap,resilient,and stealthy opaque constructs[C]//Proceedings of the 25th ACM Sigplan-sigact Symposium on Principles of Programming Languages,1998:184-196.

[8] Barak B,Goldreich O,Impagliazzo R.On the impossibility of obfuscating programs[M].Journal of ACM,2001:1-18.

[9] Bitansky N,Canetti R,Paneth O,et al.More on the impossibility of virtual black-box obfuscation with auxiliary input[R].Cryptology ePrint Archive,Report 701,2013.

[10] Andrew W.Deobfuscation is in np[EB/OL].2002-08-21.http://www.cs.princeton.edu/~appel/papers/deobfus.pdf.

[11] Ostrovsky R,Skeith W E.Private searching on streaming data[M].Journal of Cryptology.Springer New York,2007,20(4):1432-1378.

[12] Goyal V,Ishai Y,Sahai A.Founding cryptography on tamper-proof hardware tokens[M]//Theory of Cryptography (TCC),Springer berlin heidelberg,2010:308-326.

[13] 宣以廣,周華.基于字符熵的JavaScript代碼混淆自動檢測方法[J].計算機(jī)應(yīng)用與軟件,2015,32(1):309-312.

[14] 朱文琰,鄭肖雄.基于正則表達(dá)式構(gòu)建學(xué)習(xí)的網(wǎng)頁信息抽取方法[J].計算機(jī)應(yīng)用與軟件,2017,34(2):14-19,79.

[15] 張樹壯,羅浩,方濱興,等.一種面向網(wǎng)絡(luò)安全檢測的高性能正則表達(dá)式匹配算法[J].計算機(jī)學(xué)報,2010,33(10):1976-1986.

猜你喜歡
源代碼關(guān)聯(lián)性名稱
基于單元視角的關(guān)聯(lián)性閱讀教學(xué)策略淺探
學(xué)貫中西(4):AI的時序性推論技能
飲用油茶與糖尿病患病風(fēng)險的關(guān)聯(lián)性分析
基于TXL的源代碼插樁技術(shù)研究
ECG檢查T波動態(tài)變化與急性心肌梗死患者LVEF的關(guān)聯(lián)性分析
保護(hù)好自己的“源代碼”
滬港通一周成交概況
滬港通一周成交概況
滬港通一周成交概況
滬港通一周成交概況