一種腳本混淆方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種腳本混淆方法及系統(tǒng)。一種腳本混淆方法包括:根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎;根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;將所述特征引擎和所述第一腳本代碼嵌入到應(yīng)用程序中。一種腳本混淆系統(tǒng)包括:引擎混淆單元、代碼混淆單元和嵌入單元。本發(fā)明提供的腳本混淆方法對(duì)腳本引擎中的和目標(biāo)腳本代碼中的關(guān)鍵字、語法和運(yùn)算符都進(jìn)行了混淆,使得編譯之后的腳本代碼的可讀性極差,很難從中分辨出腳本的執(zhí)行邏輯,能較好的保護(hù)腳本代碼。
【專利說明】一種腳本混淆方法及系統(tǒng)【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù),特別涉及一種腳本混淆方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)技術(shù)被廣泛地應(yīng)用于各個(gè)領(lǐng)域,為人們的工作、學(xué)習(xí)和日常生活提供了極大的便利。應(yīng)用范圍的擴(kuò)大和應(yīng)用深度的擴(kuò)展,促使計(jì)算機(jī)的性能不斷提高,進(jìn)而對(duì)計(jì)算機(jī)軟件提出了更高的要求。
[0003]在這種情況下,腳本語言作為一般程序設(shè)計(jì)語言的補(bǔ)充,得到了極為迅速的發(fā)展。腳本語言又被稱為擴(kuò)建的語言,或者動(dòng)態(tài)語言,是一種用來控制應(yīng)用程序的編程語言。由于腳本語言不需要編譯,可以直接使用,而且具有小巧和高效的優(yōu)點(diǎn),因此越來越多的軟件將腳本語言嵌入到軟件中,來為應(yīng)用程序提供靈活的擴(kuò)展和定制功能。尤其在游戲軟件和殺毒軟件中,因?yàn)槌绦蜉^為復(fù)雜,腳本語言被廣泛的使用。相應(yīng)的,如果腳本代碼被泄露,會(huì)給用戶帶來不小的損失,因此需要增強(qiáng)腳本代碼的安全性。
[0004]通過對(duì)腳本代碼進(jìn)行混淆,可以增強(qiáng)腳本安全性,目前存在兩種腳本代碼混淆方法:第一種方法是對(duì)腳本代碼中的變量名、函數(shù)名和類名等內(nèi)容進(jìn)行混淆,產(chǎn)生可讀性較差的代碼;但是,這種方法最多只是對(duì)代碼中的一些敏感名稱進(jìn)行混淆,腳本的執(zhí)行邏輯依然很容易被看清楚,安全性較低;
[0005]第二種方法是將腳本編譯成二進(jìn)制碼,嵌入到程序中;程序在執(zhí)行的過程中,直接執(zhí)行二進(jìn)制碼即可。但是,市面上存在很多成熟的反編譯引擎,可以根據(jù)二進(jìn)制中間碼還原出腳本源代碼,因此安全性也不高。
【發(fā)明內(nèi)容】
[0006]為了解決上述問題,本發(fā)明提供了一種腳本混淆方法及系統(tǒng),以提高腳本安全性,技術(shù)方案如下:
[0007]一種腳本混淆方法,包括:
[0008]根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎;
[0009]根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;其中,所述目標(biāo)腳本代碼符合所述腳本引擎的代碼編寫規(guī)則;
[0010]將所述特征引擎和所述第一腳本代碼嵌入到應(yīng)用程序中;
[0011]其中,所述特定信息包括:關(guān)鍵字、語法表義符和運(yùn)算符中的至少一種,且所述腳本引擎源碼中的特定信息與所述目標(biāo)腳本代碼中的特定信息相同。
[0012]所述對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,具體包括:對(duì)腳本引擎源碼中的特定信息進(jìn)行替換處理。
[0013]所述對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,具體包括:對(duì)腳本代碼中的特定信息進(jìn)行替換處理。[0014]不同的腳本弓I擎對(duì)應(yīng)不同內(nèi)容的對(duì)應(yīng)關(guān)系庫。
[0015]較佳的,該方法進(jìn)一步包括:得到第一腳本代碼之后,對(duì)所述第一腳本代碼中的代碼特征信息進(jìn)行混淆,得到第二腳本代碼,并將所述第二腳本代碼代替所述第一腳本嵌入應(yīng)用程序中;
[0016]其中,所述代碼特征信息包括:變量名、函數(shù)名和類名中的至少一種。
[0017]本發(fā)明還提供了一種腳本混淆系統(tǒng),包括:引擎混淆單元、代碼混淆單元和嵌入單元;
[0018]所述引擎混淆單元,用于根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎;
[0019]所述代碼混淆單元,用于根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;其中,所述目標(biāo)腳本代碼符合所述腳本引擎的代碼編寫規(guī)則;
[0020]所述嵌入單元,用于將所述特征引擎和所述第一腳本代碼嵌入到應(yīng)用程序中;
[0021]其中,所述特定信息包括:關(guān)鍵字、語法表義符和運(yùn)算符中的至少一種,且所述腳本引擎源碼中的特定信息與所述目標(biāo)腳本代碼中的特定信息相同。
[0022]所述引擎混淆單元具體用于:根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行替換處理,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎。
[0023]所述代碼混淆單元具體用于:根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本代碼中的特定信息進(jìn)行替換處理,得到第一腳本代碼;其中,所述目標(biāo)腳本代碼符合所述腳本引擎的代碼編寫規(guī)則。
[0024]不同的腳本弓丨擎對(duì)應(yīng)不同內(nèi)容的對(duì)應(yīng)關(guān)系庫。
[0025]較佳的,所述代碼混淆單元進(jìn)一步用于:對(duì)所述第一腳本代碼中的代碼特征信息進(jìn)行混淆,得到第二腳本代碼;
[0026]所述嵌入單元具體用于:將所述第二腳本代碼代替第一腳本代碼,并將所述第二腳本代碼和所述特征引擎嵌入應(yīng)用程序中;
[0027]其中,所述代碼特征信息包括:變量名、函數(shù)名和類名中的至少一種。
[0028]本發(fā)明實(shí)施例中,根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的關(guān)鍵字、語法和運(yùn)算符進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎;并根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的關(guān)鍵字、語法和運(yùn)算符進(jìn)行混淆,得到第一腳本代碼;將所述特征引擎和第一腳本代碼嵌入到應(yīng)用程序中。
[0029]相對(duì)于第一種腳本代碼混淆方法,本發(fā)明對(duì)腳本引擎中的和目標(biāo)腳本代碼中的關(guān)鍵字、語法和運(yùn)算符都進(jìn)行了混淆,使得編譯之后的腳本代碼的可讀性極差,很難從中分辨出腳本的執(zhí)行邏輯,能較好的保護(hù)腳本代碼;
[0030]另外,相對(duì)于第二種腳本混淆保護(hù)方法,本發(fā)明實(shí)施例中,需要保護(hù)的代碼只能在混淆后的腳本引擎下執(zhí)行,在不清楚預(yù)設(shè)關(guān)鍵字對(duì)應(yīng)庫中對(duì)應(yīng)關(guān)系的情況下,破解和逆向就會(huì)變得較為困難,更進(jìn)一步增強(qiáng)了安全性。
【專利附圖】
【附圖說明】
[0031]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0032]圖1為本發(fā)明實(shí)施例提供的腳本混淆方法的第一種流程圖;
[0033]圖2為本發(fā)明實(shí)施例提供的腳本混淆方法的第二種流程圖;
[0034]圖3為經(jīng)過代碼信息混淆之后得到的腳本代碼片段示意圖;
[0035]圖4為本發(fā)明實(shí)施例提供的腳本混淆系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0036]首先對(duì)本發(fā)明提供的一種腳本混淆方法進(jìn)行說明,包括:
[0037]根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎;
[0038]根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;其中,所述目標(biāo)腳本代碼符合所述腳本引擎的代碼編寫規(guī)則;
[0039]將所述特征引擎和所述第一腳本代碼嵌入到應(yīng)用程序中;
[0040]其中,所述特定信息包括:關(guān)鍵字、語法表義符和運(yùn)算符中的至少一種,且所述腳本引擎源碼中的特定信息與所述目標(biāo)腳本代碼中的特定信息相同。
[0041]本發(fā)明對(duì)腳本引擎中的和目標(biāo)腳本代碼中的關(guān)鍵字、語法和運(yùn)算符都進(jìn)行了混淆,使得編譯之后的腳本代碼的可讀性極差,很難從中分辨出腳本的執(zhí)行邏輯,能較好的保護(hù)腳本代碼;
[0042]另外,本發(fā)明實(shí)施例中,需要保護(hù)的代碼只能在混淆后的腳本引擎下執(zhí)行,在不清楚預(yù)設(shè)關(guān)鍵字對(duì)應(yīng)庫中對(duì)應(yīng)關(guān)系的情況下,破解和逆向就會(huì)變得較為困難,更進(jìn)一步增強(qiáng)了安全性。
[0043]在實(shí)際應(yīng)用中,可以編寫混淆處理器,根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,分別對(duì)腳本引擎和腳本代碼進(jìn)行混淆。預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫可以制作成一個(gè)可更改內(nèi)容的文本文檔,以便隨時(shí)更改混淆策略,更好的保護(hù)腳本安全。
[0044]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0045]本發(fā)明提供的一種腳本混淆方法的第一種流程圖如圖1所示,以Iua腳本引擎為例,對(duì)該方法進(jìn)行詳細(xì)說明,可以包括以下步驟:
[0046]S101,根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎;
[0047]腳本引擎是計(jì)算機(jī)編程語言的解釋器,功能是解釋執(zhí)行用戶的程序文本,將程序文本譯成計(jì)算機(jī)能執(zhí)行的機(jī)器代碼,完成一系列的功能。
[0048]上述程序文本即為按照該腳本引擎的編碼規(guī)則編寫的腳本代碼。
[0049]腳本引擎源碼中的特定信息包括:運(yùn)算符、語法表義符和關(guān)鍵字的至少一種。
[0050]以Iua腳本語言為例,對(duì)該腳本引擎中的特定信息做詳細(xì)的說明。[0051]運(yùn)算符:運(yùn)算符用于執(zhí)行程序代碼運(yùn)算,會(huì)針對(duì)一個(gè)以上操作數(shù)項(xiàng)目來進(jìn)行運(yùn)算。Iua中的運(yùn)算符與通用的運(yùn)算符相似,在程序語言中,運(yùn)算符一般包括五種類型:算術(shù)運(yùn)算符、連接運(yùn)算符、關(guān)系運(yùn)算符、賦值運(yùn)算符和邏輯運(yùn)算符;其中,
[0052]算術(shù)運(yùn)算符是用來處理四則運(yùn)算的符號(hào),常用的有+、_、*、/等符號(hào);
[0053]連接運(yùn)算符是用來將一個(gè)或多個(gè)字符連接成一個(gè)的符號(hào),常用的是&和+ ;
[0054]關(guān)系運(yùn)算符是用來表示兩個(gè)數(shù)值關(guān)系的符號(hào),常用的有〈、>、>=等符號(hào);
[0055]賦值運(yùn)算符是用來為變量賦值的符號(hào),最常用的是=;
[0056]邏輯運(yùn)算符是用來表示兩個(gè)變量之間邏輯關(guān)系的符號(hào),常見的有!、&&、||等。
[0057]語法表義符:lua有多種語法規(guī)則,每條語法規(guī)則對(duì)應(yīng)的有至少一個(gè)語法表義符,舉例如下:
[0058]Iua中表示注釋的時(shí)候,單行注釋中,連續(xù)兩個(gè)減號(hào)“一”表示注釋的開始,一直延續(xù)到行末為止,相當(dāng)于C++語言中的“//”,因此“一”為對(duì)應(yīng)注釋這一語法規(guī)則的語法表義符;
[0059]在Iua中,語句之間可以用分號(hào)“;”隔開,也可以用空白隔開。一般來說,如果多個(gè)語句寫在同一行的話,建議總是用分號(hào)隔開。相應(yīng)的,分號(hào)和空白即為隔開語句這一語法規(guī)則的語法表義符;
[0060]關(guān)鍵字:lua中的關(guān)鍵字并不多,常見的有:and、break、do、else等。
[0061]對(duì)腳本引擎源碼進(jìn)行混淆,一般是對(duì)腳本引擎源碼中,特定信息中的至少一種進(jìn)行混淆。需要說明的是,對(duì)于不同的腳本語言,運(yùn)算符一般都是相似的,但語法表義符和關(guān)鍵字可能有所不同,因此在對(duì)腳本引擎進(jìn)行混淆的時(shí)候,所需要的預(yù)設(shè)的對(duì)應(yīng)關(guān)系可以不同。
[0062]例如,Iua腳本語言的語法規(guī)則并不嚴(yán)格,因此可以對(duì)語法表義符進(jìn)行格式上的混淆。舉例來說,將回車符去掉,或者將空格去掉,都無礙于腳本代碼的運(yùn)行。而對(duì)于某些腳本語言,比如python,其語法規(guī)則比較嚴(yán)格,在對(duì)python腳本引擎源碼進(jìn)行混淆的時(shí)候,不能輕易打亂格式。因此,相對(duì)而言,python的混淆程度比不上lua。但是,本發(fā)明是同時(shí)對(duì)腳本引擎和腳本代碼進(jìn)行混淆,并不是只針對(duì)語法表義符,因此就算對(duì)語法表義符進(jìn)行程度不深的混淆,最后得到的代碼可讀性依然很差,對(duì)混淆結(jié)果產(chǎn)生的影響并不大。
[0063]可以理解的是,如果對(duì)運(yùn)算符,或者一些程序語言中通用的關(guān)鍵字進(jìn)行混淆,那么對(duì)于不同的腳本引擎,對(duì)應(yīng)關(guān)系庫可以相同。但是為了能更好的保護(hù)腳本安全,本發(fā)明的優(yōu)選實(shí)施例中,對(duì)不同的腳本引擎,選取不同的對(duì)應(yīng)關(guān)系庫。
[0064]預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫可以由用戶自行設(shè)置,并可根據(jù)實(shí)際情況隨時(shí)更改。對(duì)于不同的腳本,可以使用不同的對(duì)應(yīng)關(guān)系庫對(duì)腳本進(jìn)行混淆,讓外人無法逆向得出對(duì)應(yīng)關(guān)系庫的具體內(nèi)容,能夠更進(jìn)一步地增強(qiáng)了腳本的安全性。
[0065]可以理解的是,預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫中,并不一定要對(duì)所有的運(yùn)算符、語法表義符和關(guān)鍵字進(jìn)行混淆,可以在每一種特定信息中選擇一部分進(jìn)行混淆,具體選取方法本發(fā)明不做限制。
[0066]對(duì)腳本引擎源碼進(jìn)行混淆可以采用多種方法,本發(fā)明實(shí)施例對(duì)腳本引擎中的特定信息進(jìn)行替換處理,換成對(duì)應(yīng)關(guān)系庫中的相應(yīng)內(nèi)容。具體的替換方法可以利用任意一種現(xiàn)有技術(shù)實(shí)現(xiàn),本發(fā)明對(duì)此不做限制。[0067]S102,根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;
[0068]與步驟SlOl相似,本發(fā)明實(shí)施例對(duì)目標(biāo)腳本代碼進(jìn)行混淆,即是對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行替換處理。
[0069]需要說明的是,步驟SlOl和步驟S102中需要進(jìn)行混淆的特定信息必須相同,否則腳本引擎無法對(duì)混淆后的腳本代碼進(jìn)行解釋。例如,如果對(duì)腳本引擎源碼進(jìn)行混淆的時(shí)候,需要進(jìn)行混淆的特定信息是運(yùn)算符中的全部算術(shù)運(yùn)算符和全部賦值運(yùn)算符,那么,對(duì)腳本代碼進(jìn)行混淆的時(shí)候,需要混淆的特定信息也必須是全部算術(shù)運(yùn)算符和全部賦值運(yùn)算符。
[0070]另外,目標(biāo)腳本代碼應(yīng)該符合腳本引擎的編碼規(guī)則。以Iua為例,如果SlOl中是對(duì)Iua腳本引擎源碼進(jìn)行混淆,那么,在步驟S102中進(jìn)行混淆的必須是Iua引擎能解釋的Iua腳本代碼。
[0071]需要說明的是,步驟SlOl和步驟S102的順序并沒有嚴(yán)格的限制,兩者可以同時(shí)進(jìn)行,也可以先后進(jìn)行,先后的次序也沒有限制。
[0072]S103,將所述特征引擎和所述第一腳本代碼嵌入到應(yīng)用程序中;
[0073]本發(fā)明實(shí)施例中,經(jīng)過混淆、并且重新編譯之后,針對(duì)腳本引擎,會(huì)生成新的lua_eng.1ib文件;針對(duì)目標(biāo)腳本代碼,會(huì)生成新的xl.1ua文件,其中xl并非具體的文件名,僅用作示意性說明。
[0074]將lua_eng.1ib和xl.1ua重新嵌入到應(yīng)用程序中。當(dāng)程序運(yùn)行到Iua代碼時(shí),會(huì)由混淆后的腳本引擎解釋該代碼,并不影響程序運(yùn)行。具體嵌入方法可以是任何一種現(xiàn)有技術(shù),本發(fā)明不做限制。
[0075]為了進(jìn)一步保護(hù)腳本安全,在對(duì)目標(biāo)腳本代碼進(jìn)行混淆,得到第一腳本代碼之后,還可以對(duì)第一腳本代碼進(jìn)行進(jìn)一步的處理。針對(duì)這種情況,本發(fā)明提供的腳本代碼保護(hù)方法的第二種流程圖如圖2所示,仍然以Iua為例,可以包括以下步驟:
[0076]S201,根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎;
[0077]該步驟的內(nèi)容與步驟SlOl基本相同,在此不做贅述。
[0078]S202,根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;
[0079]該步驟的內(nèi)容與步驟S102基本相同,在此不做贅述。
[0080]S203,對(duì)所述第一腳本代碼中的代碼特征信息進(jìn)行混淆,得到第二腳本代碼;
[0081]這里的代碼特征信息指的是,代碼中的變量名、函數(shù)名和類名中的至少一種。
[0082]代碼特征信息是在代碼編寫的過程中,由程序員自行設(shè)定的。但是,很多時(shí)候,程序員為了使代碼易讀,在為變量名等特征信息命名的時(shí)候,會(huì)聯(lián)系實(shí)際情況進(jìn)行命名。這樣的話,容易從這些特征信息中讀出腳本的一些相關(guān)信息,不利于腳本安全。例如,對(duì)于一個(gè)名為StudentParentName的變量,從變量名上便可以看出該變量表示的是學(xué)生的父母名字。
[0083]因此,在對(duì)目標(biāo)腳本代碼進(jìn)行特定信息的混淆之后,還可以對(duì)目標(biāo)腳本代碼的特征信息進(jìn)行混淆,這樣能更好的保護(hù)腳本安全。
[0084]可以理解的是,由于第二腳本代碼只是對(duì)程序員自主創(chuàng)建的一些特征信息做混淆,對(duì)腳本引擎并沒有任何改動(dòng),因此步驟S201中得到的特征引擎仍然可以解釋經(jīng)過二次混淆的第二腳本代碼。
[0085]S204,將所述特征引擎和所述第二腳本代碼嵌入到應(yīng)用程序中;
[0086]經(jīng)過步驟S203,針對(duì)目標(biāo)腳本代碼,會(huì)生成一個(gè)x2.1ua文件,可以將該文件和之前得到的lua_eng.1ib文件嵌入到應(yīng)用程序中。
[0087]圖3為經(jīng)過兩次混淆之后的Iua代碼片段。從圖中可以看出,該片段沒有任何Iua的語法跡象,但是可以使用特征引擎解釋,不影響應(yīng)用程序的運(yùn)行。
[0088]通過上述方法,對(duì)腳本引擎和目標(biāo)腳本代碼中的特定信息進(jìn)行了全面混淆,并且還對(duì)目標(biāo)腳本代碼中的代碼特征信息也做了混淆,增強(qiáng)了腳本的安全。
[0089]本發(fā)明還提供了一種腳本混淆系統(tǒng),該系統(tǒng)的結(jié)構(gòu)示意圖如圖4所示,仍然以Iua語言為例,該系統(tǒng)可以包括:引擎混淆單元001、代碼混淆單元002和嵌入單元003 ;
[0090]引擎混淆單元001,用于根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎;
[0091]本發(fā)明實(shí)施例中對(duì)腳本引擎進(jìn)行混淆,是指根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系,對(duì)腳本引擎源碼中的特定信息進(jìn)行替換處理。其中,所述特定信息指的是,運(yùn)算符、語法表義符和關(guān)鍵字中的至少一種。
[0092]可以理解的是,由于腳本引擎的不同,可以有不同的對(duì)應(yīng)關(guān)系庫,而且對(duì)應(yīng)關(guān)系庫中的內(nèi)容可以由用戶隨時(shí)進(jìn)行更改,以更好的對(duì)腳本進(jìn)行保護(hù)。如果只是對(duì)運(yùn)算符,或是一些通用的關(guān)鍵字進(jìn)行混淆,對(duì)于不同的腳本引擎,對(duì)應(yīng)關(guān)系庫也可以相同。
[0093]代碼混淆單元002,用于根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;
[0094]本發(fā)明實(shí)施例中對(duì)目標(biāo)腳本代碼進(jìn)行混淆,是指根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系,對(duì)腳本引擎源碼中的特定信息進(jìn)行替換處理。其中,所述特定信息指的是,運(yùn)算符、語法表義符和關(guān)鍵字中的至少一種。
[0095]其中,目標(biāo)腳本代碼必須符合所述腳本引擎的代碼編寫規(guī)則。也就是說,如果引擎混淆單元中是對(duì)Iua腳本引擎進(jìn)行混淆,那么代碼混淆單元中進(jìn)行混淆的必須是Iua腳本代碼。
[0096]需要說明的是,代碼混淆單元中需要進(jìn)行混淆的特定信息,與引擎混淆單元中需要進(jìn)行混淆的特征信息必須是相同的。否則,特征引擎無法對(duì)第一腳本代碼進(jìn)行解釋。
[0097]嵌入單元003,用于將所述特征引擎和所述第一腳本代碼嵌入到應(yīng)用程序中;
[0098]經(jīng)過混淆、并且重新編譯之后,針對(duì)Iua引擎,會(huì)生成新的lua_eng.1ib文件,針對(duì)目標(biāo)腳本代碼,會(huì)生成新的xl.1ua文件,其中xl并非具體的文件名,僅僅用作示意性說明。
[0099]將lua_eng.1ib和xl.1ua重新嵌入到應(yīng)用程序中。當(dāng)程序運(yùn)行到Iua代碼時(shí),會(huì)由引擎混淆單元中得到的特征引擎解釋該代碼,并不影響應(yīng)用程序的運(yùn)行。
[0100]為了對(duì)腳本進(jìn)行更進(jìn)一步的保護(hù),所述腳本混淆單元002可以進(jìn)一步用于,對(duì)所述第一腳本代碼中的代碼特征信息進(jìn)行混淆,得到第二腳本代碼;其中,所述代碼特征信息包括:變量名、函數(shù)名和類名中的至少一種。
[0101]相應(yīng)地,嵌入單元003具體用于:將所述第二腳本代碼代替第一腳本代碼,并將第二腳本代碼和所述特征弓I擎嵌入應(yīng)用程序中。[0102]經(jīng)過進(jìn)一步的混淆,目標(biāo)腳本代碼生成一個(gè)新的x2.1ua文件,將lua_eng.1ib和x2.1ua重新嵌入到應(yīng)用程序中。由于代碼特征信息是由程序員定義的,與腳本引擎無關(guān),因此特征引擎仍然可以解釋第二腳本代碼,并不影響程序運(yùn)行。
[0103]對(duì)于系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
[0104]需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
[0105]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施方式中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲(chǔ)于計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,這里所稱得的存儲(chǔ)介質(zhì),如:R0M/RAM、磁碟、光盤等。
[0106]以上所述僅為 本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種腳本混淆方法,其特征在于,包括: 根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎; 根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;其中,所述目標(biāo)腳本代碼符合所述腳本引擎的代碼編寫規(guī)則; 將所述特征引擎和所述第一腳本代碼嵌入到應(yīng)用程序中; 其中,所述特定信息包括:關(guān)鍵字、語法表義符和運(yùn)算符中的至少一種,且所述腳本引擎源碼中的特定信息與所述目標(biāo)腳本代碼中的特定信息相同。
2.如權(quán)利要求1所述的方法,其特征在于,所述對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,具體包括:對(duì)腳本引擎源碼中的特定信息進(jìn)行替換處理。
3.如權(quán)利要求1所述的方法,其特征在于,所述對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,具體包括:對(duì)腳本代碼中的特定信息進(jìn)行替換處理。
4.如權(quán)利要求1所述的方法,其特征在于,不同的腳本引擎對(duì)應(yīng)不同內(nèi)容的對(duì)應(yīng)關(guān)系庫。
5.如權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括:得到第一腳本代碼之后,對(duì)所述第一腳本代碼中的代碼特征信息進(jìn)行混淆,得到第二腳本代碼,并將所述第二腳本代碼代替所述第一腳本嵌入應(yīng)用程序中; 其中,所述代碼特征信息包括:變量名、函數(shù)名和類名中的至少一種。
6.一種腳本混淆系統(tǒng),其特征在于,包括:引擎混淆單元、代碼混淆單元和嵌入單元; 所述引擎混淆單元,用于根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行混淆,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎; 所述代碼混淆單元,用于根據(jù)所述預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)目標(biāo)腳本代碼中的特定信息進(jìn)行混淆,得到第一腳本代碼;其中,所述目標(biāo)腳本代碼符合所述腳本引擎的代碼編寫規(guī)則; 所述嵌入單元,用于將所述特征引擎和所述第一腳本代碼嵌入到應(yīng)用程序中; 其中,所述特定信息包括:關(guān)鍵字、語法表義符和運(yùn)算符中的至少一種,且所述腳本引擎源碼中的特定信息與所述目標(biāo)腳本代碼中的特定信息相同。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述引擎混淆單元具體用于:根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本引擎源碼中的特定信息進(jìn)行替換處理,得到特征引擎源碼,編譯所述特征引擎源碼,得到特征引擎。
8.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述代碼混淆單元具體用于:根據(jù)預(yù)設(shè)的對(duì)應(yīng)關(guān)系庫,對(duì)腳本代碼中的特定信息進(jìn)行替換處理,得到第一腳本代碼;其中,所述目標(biāo)腳本代碼符合所述腳本引擎的代碼編寫規(guī)則。
9.如權(quán)利要求6所述的系統(tǒng),其特征在于,不同的腳本引擎對(duì)應(yīng)不同內(nèi)容的對(duì)應(yīng)關(guān)系庫。
10.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述代碼混淆單元進(jìn)一步用于:對(duì)所述第一腳本代碼中的代碼特征信息進(jìn)行混淆,得到第二腳本代碼; 所述嵌入單元具體用于:將所述第二腳本代碼代替第一腳本代碼,并將所述第二腳本代碼和所述特征引擎嵌入應(yīng)用程序中;其中,所述代碼特征 信息包括:變量名、函數(shù)名和類名中的至少一種。
【文檔編號(hào)】G06F9/44GK103927164SQ201410086817
【公開日】2014年7月16日 申請(qǐng)日期:2014年3月10日 優(yōu)先權(quán)日:2014年3月10日
【發(fā)明者】薛小昊, 王鑫, 陳勇 申請(qǐng)人:珠海市君天電子科技有限公司