一種面向Lua語言的加擾混淆方法和解密方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及一種程序加擾混淆方法,尤其涉及一種面向Lua語言的加擾混淆方法和解密方法?!?br>背景技術(shù):
】[0002]隨著計算機(jī)技術(shù)應(yīng)用日益普及,軟件產(chǎn)業(yè)得以飛速發(fā)展,與此同時,攻擊者利用軟件逆向技術(shù)對軟件的各種攻擊和未授權(quán)使用以及盜版復(fù)制等行為也越來越多。逆向分析技術(shù)可以被用來在不知道應(yīng)用程序源代碼的情況下分析應(yīng)用程序的功能流程、篡改應(yīng)用程序的數(shù)據(jù)代碼等,逆向分析技術(shù)如果被不加限制的惡意使用,利用者可以分析獲取應(yīng)用程序的核心技術(shù),也可以篡改應(yīng)用程序的簽名和作者信息,還可以將惡意代碼注入到已有的應(yīng)用程序中并通過二次打包進(jìn)行偽裝,這些行為都極大的危害了應(yīng)用程序開發(fā)者的利益,嚴(yán)重?fù)p害了廣大用戶的隱私安全。隨著i〇S平臺移動的游戲開發(fā)成為熱點(diǎn),使得輕量級的小體積的動態(tài)腳本語言Lua在2011年6月首次突破了ΤΙ0ΒΕ編程語言的前十名。由于Lua的語法簡潔美觀和最快的運(yùn)行速度,使得Lua已成為嵌入式腳本語言的最佳選擇。Lua代碼高效的運(yùn)行速率取決于Lua代碼是在操作系統(tǒng)和移動終端上編譯并運(yùn)行的,這樣,該動態(tài)腳本語言在娛樂和用戶體驗的i〇S平臺的發(fā)展空間是非常大的。[0003]代碼混淆技術(shù)是近幾年才發(fā)展并興起的一種新技術(shù)。第一次對代碼混淆進(jìn)行系統(tǒng)研究是在上世紀(jì)90年代末開始的,是Java語言的迅速發(fā)展引起了對混淆技術(shù)的研究熱潮。這是因為Java目標(biāo)代碼一字節(jié)代碼(bytecode)很容易被反編譯為Java源代碼,這就迫切要求有效的保護(hù)字節(jié)代碼的方法。第一次對混淆轉(zhuǎn)換進(jìn)行了詳細(xì)的總結(jié)和分類的是Collberg,他在〈〈ATaxonomyofObfuscationTransformations.DepartmentofComputerScience》中第一次對混淆轉(zhuǎn)換進(jìn)行了詳細(xì)的總結(jié)和分類,也首次提出了混淆轉(zhuǎn)換的有效性與性能的若干評價標(biāo)準(zhǔn)。他將混淆轉(zhuǎn)換分為四類:外形混淆轉(zhuǎn)換、控制混淆轉(zhuǎn)換、數(shù)據(jù)混淆轉(zhuǎn)換和預(yù)防性混淆轉(zhuǎn)換。[0004]ChenxiWang在《Asecurityarchitectureforsurvivabilitymechanisms:[dissertation]》中實(shí)現(xiàn)了在C語言源代碼上的多種控制混淆轉(zhuǎn)換與數(shù)據(jù)混淆轉(zhuǎn)換;還給出了混淆轉(zhuǎn)換造成的性能過載以及混淆轉(zhuǎn)換對靜態(tài)分析工具IBMNPICtool以及RutgerPAFtoolkit的有效性。[0005]Hohhl提出用帶有時間限制的黑盒(time-limitedblackbox)方法來保護(hù)移動Agent。這里的黑盒就是指混淆轉(zhuǎn)換過的Agent程序。對移動Agent進(jìn)行逆向工程,做出有意義的發(fā)現(xiàn)或修改需要一定的時間,據(jù)此,限制移動Agent在目的主機(jī)上運(yùn)行的時間。在派發(fā)移動Agent的之前,需要對其進(jìn)行混淆轉(zhuǎn)換,這增加了逆向工程的代價,從而延長在目的主機(jī)上的運(yùn)行時間。[0006]CullenLinn在〈〈ObfuscationofexecutablecodetoimproveresistancetostaticDisassembly》中從另一個角度研究了目標(biāo)代碼混淆技術(shù),通過對反匯編過程的分析,采用一種混淆方法能夠阻撓逆向工程,使得獲取程序的匯編指令非常困難或不能正確得到程序的匯編指令。[0007]綜上所述,現(xiàn)有的加擾混淆方法大多是針對C語言和Java語言的,缺少面向Lua語言的成熟的混淆方法?!?br/>發(fā)明內(nèi)容】[0008]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種面向Lua語言的加擾混淆方法和解密方法,包括代碼預(yù)處理、混淆算法和調(diào)用棧轉(zhuǎn)換,該方法能夠保證混淆后的Lua源代碼在語義上不發(fā)生改變,不影響程序的正常執(zhí)行;同時使得混淆后的Lua源代碼難以理解,可起到保護(hù)版權(quán),防止他人剽竊軟件中的智力成果或?qū)浖M(jìn)行有目的的篡改的作用。[0009]本發(fā)明提供的技術(shù)方案是:[0010]一種面向Lua語言的加擾混淆方法,通過代碼預(yù)處理方法、混淆方法和調(diào)用棧轉(zhuǎn)換方法,使得混淆后的Lua源代碼在語義上不發(fā)生改變的同時還無法被理解,以達(dá)到保護(hù)程序代碼而又不影響程序的正常執(zhí)行的目的;包括如下步驟:[0011]A.進(jìn)行代碼預(yù)處理,執(zhí)行如下操作:[0012]A1)進(jìn)行代碼預(yù)處理設(shè)置;[0013]A2)針對代碼進(jìn)行詞法分析,根據(jù)構(gòu)詞規(guī)則識別單詞,建立數(shù)據(jù)字典:[0014]A3)針對詞法分析得到的單詞序列進(jìn)行語法分析,將單詞序列組合成語法短語,得到抽象語法樹;[0015]A4)根據(jù)A2)建立的數(shù)據(jù)字典和A3)形成的抽象語法樹進(jìn)行遍歷,獲取遍歷結(jié)果;[0016]B.對Lua源程序進(jìn)行加擾混淆,執(zhí)行如下操作:[0017]B1)設(shè)置混淆參數(shù);混淆參數(shù)包括混淆等級和混淆后源文件的輸出路徑;[0018]B2)讀取步驟A2)建立的數(shù)據(jù)字典;[0019]B3)通過最小詞匯排序法進(jìn)行初級混淆,將初級混淆前和初級混淆后的名稱存儲在數(shù)據(jù)字典中;[0020]B4)通過控制流混淆方法進(jìn)行高級混淆,改變源程序的執(zhí)行流程,在數(shù)據(jù)字典中保存高級混淆前后的調(diào)用棧信息;[0021]B5)獲得加擾混淆后的Lua代碼,保存代碼,結(jié)束操作。[0022]上述面向Lua語言的加擾混淆方法中,步驟A2)所述進(jìn)行詞法分析,建立數(shù)據(jù)字典,具體是:從左到右逐個字符讀入Lua源程序,根據(jù)構(gòu)詞規(guī)則識別單詞,建立得到所述Lua源程序的數(shù)據(jù)字典。[0023]上述面向Lua語言的加擾混淆方法中,步驟A4)所述抽象語法樹包括所述抽象語法樹的頭結(jié)點(diǎn)chunk和整個抽象語法樹對象;步驟A4)所述遍歷結(jié)果包括抽象語法樹對象CommonTree對象的所有節(jié)點(diǎn),對應(yīng)Lua源代碼中的所有模塊名。[0024]上述面向Lua語言的加擾混淆方法中,步驟B3)所述進(jìn)行初級混淆,具體是,根據(jù)Lua源文件路徑遞歸讀取目錄下的文件,讀取步驟A2)得到的所述Lua源程序的數(shù)據(jù)字典,采用最小詞匯排序法產(chǎn)生單詞對Lua源程序中的名稱進(jìn)行替換;同時將混淆前和混淆后的相應(yīng)名稱均存儲在數(shù)據(jù)字典中。[0025]上述面向Lua語言的加擾混淆方法中,所述名稱包括變量名、函數(shù)名、參數(shù)名和表名。[0026]本發(fā)明同時還提供一種針對使用上述面向Lua語言的加擾混淆方法進(jìn)行加擾混淆后的Lua源程序代碼進(jìn)行解密的方法,通過讀取Lua源程序代碼,根據(jù)數(shù)據(jù)字典中存儲的對應(yīng)關(guān)系進(jìn)行源代碼的逆向,具體執(zhí)行如下操作:[0027]C1)讀取所述Lua源程序代碼的數(shù)據(jù)字典;[0028]C2)根據(jù)數(shù)據(jù)字典,針對混淆詞匯進(jìn)行逆向,將混淆后的名稱替換為混淆前的名稱;[0029]C3)根據(jù)數(shù)據(jù)字典,讀取并解析調(diào)用棧信息;[0030]C4)轉(zhuǎn)換調(diào)用棧信息,得到轉(zhuǎn)換后的調(diào)用棧信息,即獲得解密后的Lua程序代碼。[0031]上述針對使用加擾混淆方法進(jìn)行加擾混淆后的Lua源程序代碼進(jìn)行解密的方法中,步驟C3)所述讀取并解析調(diào)用棧信息,具體包括:根據(jù)數(shù)據(jù)字典獲得混淆后的調(diào)用棧信息;根據(jù)調(diào)用棧信息解析名稱;將混淆后的名稱轉(zhuǎn)化為混淆前的名稱。[0032]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:[0033]本發(fā)明提供一種面向Lua語言的加擾混淆方法和解密方法,包括代碼預(yù)處理、混淆算法和調(diào)用棧轉(zhuǎn)換,利用本發(fā)明提供的技術(shù)方案,能夠保證混淆后的Lua源代碼在語義上不發(fā)生改變,不影響程序的正常執(zhí)行;同時使得混淆后的Lua源代碼難以理解,可以有效地對Lua源程序進(jìn)行版權(quán)保護(hù),防止其被逆向或篡改?!靖綀D說明】[0034]圖1是本發(fā)明實(shí)施例的整體流程框圖?!揪唧w實(shí)施方式】[0035]下面結(jié)合附圖,通過實(shí)施例進(jìn)一步描述本發(fā)明,但不以任何方式限制本發(fā)明的范圍。[0036]本發(fā)明提供一種面向Lua語言的加擾混淆方法,該方法能夠保證混淆后的Lua源代碼在語義上不發(fā)生改變,不影響程序的正常執(zhí)行;同時使得混淆后的Lua源代碼難以理解,可起到保護(hù)版權(quán),防止他人剽竊軟件中的智力成果或?qū)浖M(jìn)行有目的的篡改的作用。[0037]圖1是本發(fā)明實(shí)施例提供的面向Lua語言的加擾混淆方法的整體流程框圖,包括進(jìn)行預(yù)處理、加密或解密流程;操作步驟包括進(jìn)行預(yù)處理、進(jìn)行加擾混淆或逆向和轉(zhuǎn)換調(diào)用棧等。[0038]首先對Lua源代碼進(jìn)行預(yù)處理,然后根據(jù)用戶選擇的功能項(加密或解密)執(zhí)行操作,其【具體實(shí)施方式】如下:[0039]A.進(jìn)行預(yù)處理,一方面可以讀取并保存Lua源代碼中的所有模塊名,避免混淆后的Lua源文件無法運(yùn)行;另外也可以生成符號表和抽象語法樹,為混淆步驟提供便利。在對Lua源代碼進(jìn)行預(yù)處理時,執(zhí)行如下操作:[0040]A1)進(jìn)行預(yù)當(dāng)前第1頁1 2