本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種可執(zhí)行程序的保護方法及裝置。
背景技術(shù):
隨著微軟可擴展標(biāo)記語言的網(wǎng)絡(luò)分布式模塊化組件服務(wù)平臺(microsoft.netxmlwebservices,簡稱.net)的逐步普及,對.net平臺下可執(zhí)行程序的保護也逐步受到人們的重視。其中,.net平臺為一款微軟公司開發(fā)的技術(shù)平臺,旨在實現(xiàn)平臺上不同編程語言的可執(zhí)行程序間數(shù)據(jù)的通訊和共享。該平臺可以面向多種編程語言,例如c++(thec++programminglanguage,一種編程語言,簡稱c++語言)、c#(thec#programminglanguage,一種編程語言,簡稱c#語言)或vb(visualbasic,一種編程語言,簡稱vb語言)等編程語言。通常情況下,.net平臺可以將上述編程語言轉(zhuǎn)化成微軟中間語言(microsoftintermediatelanguage,簡稱msil),即中間語言(intermediatelanguage,msil的縮寫,簡稱il)指令。然而經(jīng).net平臺轉(zhuǎn)化成il指令的可執(zhí)行程序很容易被反編譯軟件還原成可執(zhí)行程序的源代碼并破解,例如,通常使用reflector軟件來進行可執(zhí)行程序的破解。因此,在.net平臺下轉(zhuǎn)換為il指令的可執(zhí)行程序都需要進行必要的保護。
目前,在對.net平臺下可執(zhí)行程序的保護過程中,通常使用兩種保護方法:一種方法是基于軟件的保護方法,該方法主要是通過保護軟件對il指令的指令順序進行改變,以達到混淆il指令的目的,進而實現(xiàn)對可執(zhí)行程序的保護,其中,所述保護軟件可以為.netreactor、dotfuscator等;另一種方法是基于硬件的保護方法,該方法主要是挑選il指令中的部分指令,通過將所述部分il指令轉(zhuǎn)譯成其他編程代碼,并將所述轉(zhuǎn)譯后的代碼移植在預(yù)置的保護裝置中,以實現(xiàn)對可執(zhí)行程序的保護。然而,前者基于軟件的保護方法是基于純il層面上,通過混淆il指令的順序以實現(xiàn)保護功能,導(dǎo)致經(jīng)混淆后il指令的抗分析性較差,容易被破解軟件破解,進而影響轉(zhuǎn)化為il指令的可執(zhí)行程序的安全性;后者基于硬件的保護方法中,由于轉(zhuǎn)譯后的代碼需移植到保護裝置中,導(dǎo)致所移植的代碼數(shù)量易受硬件的空間限制,進而影響轉(zhuǎn)化為il指令的可執(zhí)行程序的安全性。因此,現(xiàn)有技術(shù)中對轉(zhuǎn)化為il指令的可執(zhí)行程序的保護效果較差,進而導(dǎo)致可執(zhí)行程序的安全性易受到影響。
技術(shù)實現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的可執(zhí)行程序的保護方法及裝置。
為達到上述目的,本發(fā)明主要提供如下技術(shù)方案:
一方面,本發(fā)明提供了一種可執(zhí)行程序的保護方法,該方法包括:
從可執(zhí)行程序中提取待保護語句,并對所述待保護語句進行分組,得到分組語句;
混淆所述分組語句的分組順序;
根據(jù)特定規(guī)則對混淆后的分組語句進行操作,生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組;
通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及連接語句的代碼;
將所述包含所述秘鑰數(shù)組及所述連接語句的代碼注入到已提取待保護語句的可執(zhí)行程序中。
另一方面,本發(fā)明還提供一種可執(zhí)行程序的保護裝置,該裝置包括:
分組單元,用于從可執(zhí)行程序中提取待保護語句,并對所述待保護語句進行分組,得到分組語句;
混淆單元,用于混淆所述分組單元進行過分組操作后的所述分組語句的分組順序;
操作單元,用于根據(jù)特定規(guī)則對所述混淆單元混淆后的分組語句進行操作,生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組;
生成單元,用于通過對所述操作單元操作后得到的秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及所述連接語句的代碼;
注入單元,用于將所述生成單元生成的包含所述秘鑰數(shù)組及所述連接語句的代碼注入到已提取待保護語句的可執(zhí)行程序中。
借由上述技術(shù)方案,本發(fā)明提供的一種可執(zhí)行程序的保護方法及裝置,與現(xiàn)有基于軟件的保護方法相比,本發(fā)明通過在混淆可執(zhí)行程序的待保護語句的語句順序之后,繼續(xù)對所述可執(zhí)行程序的待保護語句進行相關(guān)的操作:其中,首先通過特定規(guī)則,將所述待保護語句進行加密操作并生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組,由于所述秘鑰數(shù)組中記錄了對應(yīng)的所述分組語句的分組順序,且秘鑰數(shù)組根據(jù)特定規(guī)則生成,因此增加了在未知特定規(guī)則的前提下對秘鑰數(shù)組進行分析的難度,進而提高了所述分組語句的抗分析能力;隨后通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及連接語句的代碼,由于所述連接語句的連接邏輯由本地代碼的種類決定,通過更換本地代碼即可改變當(dāng)前秘鑰數(shù)組的連接關(guān)系,并且連接語句的生成是通過秘鑰數(shù)組與本地代碼交互運算后動態(tài)生成的,因此可以進一步提高所述包含秘鑰數(shù)組及連接語句的代碼的抗分析能力,進而克服了現(xiàn)有技術(shù)的保護方法中,僅混淆待保護語句的順序?qū)е驴蓤?zhí)行程序的抗分析性較差的問題,進而提高對可執(zhí)行程序保護效果,進一步提高了安全性。此外,與現(xiàn)有基于硬件的保護方法相比,本發(fā)明通過本地代碼中的連接語句,連接所述秘鑰數(shù)組,生成包含所述秘鑰數(shù)組及所述連接語句的代碼,并將將所述代碼注入到已提取待保護語句的可執(zhí)行程序中。由于所述代碼仍保存在可執(zhí)行程序中,無需經(jīng)過轉(zhuǎn)譯編碼的過程,避免現(xiàn)有基于硬件保護方法中對待保護語句的轉(zhuǎn)譯過程,并且所述代碼最后仍注入到可執(zhí)行程序中,與所述可執(zhí)行程序存儲在一起,無需通過額外硬件空間存儲,因此所述代碼的數(shù)量不受硬件空間限制,可以根據(jù)需要進行增減,進而避免了現(xiàn)有技術(shù)中因轉(zhuǎn)譯后的代碼數(shù)量受硬件空間限制進而影響可執(zhí)行程序安全性的問題,進而改善了保護效果,進一步提高了可執(zhí)行程序的安全性。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1為本發(fā)明實施例提供的一種可執(zhí)行程序的保護方法流程圖;
圖2為本發(fā)明實施例提供的另一種可執(zhí)行程序的保護方法流程圖;
圖3為本發(fā)明實施例提供的一種可執(zhí)行程序的保護裝置的組成框圖;
圖4為本發(fā)明實施例提供的另一種可執(zhí)行程序的保護裝置的組成框圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
為使本發(fā)明技術(shù)方案的優(yōu)點更加清楚,下面結(jié)合附圖和實施例對本發(fā)明作詳細說明。
本發(fā)明實施例提供了一種可執(zhí)行程序的保護方法,如圖1所示,所述方法包括:
101、從可執(zhí)行程序中提取待保護語句,并對待保護語句進行分組,得到分組語句。
其中,所述的待保護語句可以為所述可執(zhí)行程序中某一段語句、某幾段語句或能夠?qū)崿F(xiàn)某個功能的語句集合。
在計算機領(lǐng)域中,可執(zhí)行程序由大量的語句構(gòu)成,不同的語句之間根據(jù)不同語言環(huán)境形成完整的邏輯及功能。在此,以常見的編程語言c語言為例,選取一個帶有測試功能的語句集合,如下所示:
在上述的語句中,不同語句在c語言的語言環(huán)境下形成完整的測試功能。因此,在本發(fā)明實施例中,所述可執(zhí)行程序的待保護語句可以是可執(zhí)行程序的語句集合中某一段語句或某幾段語句的集合。但是需要說明的是,待保護語句應(yīng)為能形成某種功能的語句集合。因為,之所以對某些語句或某段語句進行保護,主要是通過對所述語句進行保護以實現(xiàn)對其對應(yīng)功能的保護。因此,待保護語句應(yīng)該是包含某種功能或能實現(xiàn)某種指令的語句集合,否則,單獨保護某一段沒有功能的語句,或是能實現(xiàn)某功能的語句集合中的某一部分是沒有意義的。
需要說明的是,在本實施例中,所述可執(zhí)行程序中待保護語句的選取根據(jù)需要自行選取,且進行分組時的分組數(shù)量在此也不做具體的限定,可以根據(jù)需要進行選取。
102、混淆分組語句的分組順序。
在對所述分組語句進行混淆時,可以選擇的多種混淆軟件或混淆器,在此不做限定,但是混淆軟件或混淆器的選擇應(yīng)與所述分組語句的類別相對應(yīng)。
例如,若所述分組語句類別為vb語言時,則應(yīng)選擇對應(yīng)vb語言的混淆軟件或混淆器;若所述分組語句的類別為c#語言時,則應(yīng)選擇對應(yīng)c#語言的混淆軟件或混淆器。
103、根據(jù)特定規(guī)則對混淆后的分組語句進行操作,生成與混淆后的分組語句對應(yīng)的秘鑰數(shù)組。
其中,所述不同的秘鑰數(shù)組與不同的混淆后的分組語句一一對應(yīng)。例如,若所述混淆后的分組語句數(shù)量為5組,則在本步驟中在進行操作后生成的秘鑰數(shù)組也應(yīng)該是5個,每一個秘鑰數(shù)組對應(yīng)每一個分組語句。
在生成秘鑰數(shù)組的過程中,所述秘鑰數(shù)組的生成方式可以根據(jù)需要進行選取。具體的,首先可以選擇一個數(shù)字,然后根據(jù)特定的方式對所選擇的數(shù)字進行加密操作,結(jié)合分組語句的順序,生成對應(yīng)每一個分組語句的數(shù)字或數(shù)字串,所述的數(shù)字或數(shù)字串中包含對應(yīng)的分組語句的順序。所述數(shù)字或字符串即可以為本步驟中的秘鑰數(shù)組。
當(dāng)然,所述對數(shù)字進行加密操作的方式是根據(jù)我們的需要自行設(shè)定的,據(jù)此可以確保生成的秘鑰數(shù)組的安全性,在此不做限定。進一步的,所述秘鑰數(shù)組中可以不僅包含當(dāng)前對應(yīng)分組語句的分組順序,還可以包含其他相關(guān)的該分組語句的信息,具體包含的信息則與本步驟所選擇的操作方式有關(guān)。其中,還可以對所述秘鑰數(shù)組進行進一步的加密,一般可以選擇一個本地加密秘鑰作為進一步加密的依據(jù),而這個本地加密秘鑰保存在相關(guān)技術(shù)開發(fā)人員的手中,以此可以確保在加密過程中,秘鑰數(shù)組的安全性。
104、通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含秘鑰數(shù)組及連接語句的代碼。
在本步驟中,所述的本地代碼為根據(jù)需要自行選取的代碼,具體的可以為c語言、c++、c#或vb等編程語言。其中,不同的編程語言的連接語句各不相同。在進行本步驟中的交互運算時,由于選擇的本地代碼的種類是根據(jù)需要自行選取的,因此交互運算后得到的所述連接語句也是不同的,即生成包含所述秘鑰數(shù)組及連接語句的代碼中所述連接語句是動態(tài)的,進而以此可以提高所述代碼的安全性。需要注意的是,在通過交互運算后生成包含所述秘鑰數(shù)組與連接語句的代碼時,其中,所使用的所述連接語句在進行連接時,需要注意所述本地代碼對應(yīng)編程語言的邏輯規(guī)則。
105、將所述包含所述秘鑰數(shù)組及所述連接語句的代碼注入到已提取待保護語句的可執(zhí)行程序中。
若所述可執(zhí)行程序的待保護語句為在.net平臺下的語句時,根據(jù)所述.net平臺的特點,在本步驟中注入的方式可以通過微軟提供的元數(shù)據(jù)的應(yīng)用程序編程接口命令(applicationprograminterface,應(yīng)用程序編程接口,簡稱api)來實現(xiàn)。
具體的,所述注入的方式根據(jù)所注入的代碼的類別,由不同的函數(shù)密令實現(xiàn)。例如:若注入的代碼的類別為類時,采用definetypedef函數(shù);若注入的代碼的類別為方法時,采用definemethod函數(shù)。其中,所述的類及所述的方法均為.net平臺下不同代碼指令的類別。
借由上述技術(shù)方案,本發(fā)明實施例提供的一種可執(zhí)行程序的保護方法,與現(xiàn)有基于軟件的保護方法相比,本發(fā)明實施例通過在混淆可執(zhí)行程序的待保護語句的語句順序之后,繼續(xù)對所述可執(zhí)行程序的待保護語句進行相關(guān)的操作:其中,首先通過特定規(guī)則,將所述待保護語句進行加密操作并生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組,由于所述秘鑰數(shù)組中記錄了對應(yīng)的所述分組語句的分組順序,且秘鑰數(shù)組根據(jù)特定規(guī)則生成,因此增加了在未知特定規(guī)則的前提下對秘鑰數(shù)組進行分析的難度,進而提高了所述分組語句的抗分析能力;隨后通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及所述連接語句的代碼,由于所述連接語句的連接邏輯由本地代碼的種類決定,通過更換本地代碼即可改變當(dāng)前秘鑰數(shù)組的連接關(guān)系,并且連接語句的生成是通過秘鑰數(shù)組與本地代碼交互運算后動態(tài)生成的,因此可以進一步提高所述包含秘鑰數(shù)組及連接語句的代碼的抗分析能力,進而克服了現(xiàn)有技術(shù)的保護方法中,僅混淆待保護語句的順序?qū)е驴蓤?zhí)行程序的抗分析性較差的問題,進而提高對可執(zhí)行程序保護效果,進一步提高了安全性。此外,與現(xiàn)有基于硬件的保護方法相比,本發(fā)明實施例通過本地代碼中的連接語句,連接所述秘鑰數(shù)組,生成包含所述秘鑰數(shù)組及所述連接語句的代碼,并將將所述代碼注入到已提取待保護語句的可執(zhí)行程序中。由于所述代碼仍保存在可執(zhí)行程序中,無需經(jīng)過轉(zhuǎn)譯編碼的過程,避免現(xiàn)有基于硬件保護方法中對待保護語句的轉(zhuǎn)譯過程,并且所述代碼最后仍注入到可執(zhí)行程序中,與所述可執(zhí)行程序存儲在一起,無需通過額外硬件空間存儲,因此所述代碼的數(shù)量不受硬件空間限制,可以根據(jù)需要進行增減,進而避免了現(xiàn)有技術(shù)中因轉(zhuǎn)譯后的代碼數(shù)量受硬件空間限制進而影響可執(zhí)行程序安全性的問題,進而改善了保護效果,進一步提高了可執(zhí)行程序的安全性。
本發(fā)明實施例提供了另一種可執(zhí)行程序的保護方法,如圖2所示,所述方法包括:
201、從可執(zhí)行程序中提取待保護語句,并對待保護語句進行分組,得到分組語句。
其中,所述可執(zhí)行程序中待保護語句為所述可執(zhí)行程序在.net平臺下轉(zhuǎn)化成il指令集中對應(yīng)的il指令。
具體的,在本步驟中,對所述待保護語句進行分組,得到分組語句,包括:根據(jù)所述待保護語句對應(yīng)的il指令,分析所述il指令中不同指令對應(yīng)的不同功能;根據(jù)所述不同指令對應(yīng)的不同功能,將形成完整功能的il指令分成一組。
在計算機領(lǐng)域中,不同的程序由不同的語句構(gòu)成,不同功能由不同的程序?qū)崿F(xiàn),在這其中,不同的語句均由不同的語言編譯而成。以人機交互的角度來說,我們把這些語言分成三類:編程語言、中間語言及機器語言。其中機器語言由01代碼構(gòu)成,計算機可以直接識別。但機器語言的分析性和可讀性上較差,普通的技術(shù)人員難以掌握并識別這種機器語言。而編程語言是用于編譯不同的計算機代碼及程序而來,因此其分析性和可讀性較好。但不同的編程語言由于其語言環(huán)境和邏輯算法的不同,很難實現(xiàn)完美的對接和轉(zhuǎn)換。因此,介于機器語言和編程語言的中間語言,完美的實現(xiàn)了不同編譯語言間的對接,并且比起機器語言有相對較好的分析性和可讀性。但中間語言的代碼往往很容易被反編譯軟件破解,進而威脅中間語言的代碼對應(yīng)的編程語言程序的安全性,因此通常會對轉(zhuǎn)化為中間語言的代碼進行相關(guān)的保護以避免反編譯和破解。其中,.net平臺通過將不同編程語言的語句轉(zhuǎn)化成msil中間語言,即il指令,來實現(xiàn)不同的編程語言之間數(shù)據(jù)的通訊和共享的功能。因此,在本發(fā)明實施例中,所述可執(zhí)行程序中待保護語句為所述可執(zhí)行程序在.net平臺下轉(zhuǎn)化成il指令集中對應(yīng)的il指令。
具體的,本發(fā)明實施例以保護安裝有微軟windowsxp32位操作系統(tǒng)的系統(tǒng)環(huán)境為例,具體來描述一個實現(xiàn).net平臺下可執(zhí)行程序的保護的具體過程。
為了方便說明,本實施例選取了一個具體的.net平臺下的可執(zhí)行程序,具體如下:
根據(jù)本步驟中的方法,若所述可執(zhí)行程序的待保護語句為上述可執(zhí)行程序的test語句對應(yīng)的il指令時,則所述test語句在.net平臺轉(zhuǎn)化的il指令如下:
根據(jù)本步驟所述的方法,分析上述il指令的不同功能,并根據(jù)功能對其進行分組。在本發(fā)明實施例,我們可以將上述test語句對應(yīng)的il指令分為以下五組:
其中,第一個分組為
第二個分組為
第三個分組為
第四個分組為
第五個分組為
其中,上述的五組分組il指令中,每一個分組il指令都具有不同的功能。根據(jù)本步驟中的方法,我們還可以將所述分組il指令進行組合,譬如可以將第一組與第二組合并成一組。但不能將所述分組il指令再進一步的分組拆分。若再進行拆分,則拆分后的分組il指令無法實現(xiàn)具體的功能。也就是說,在本發(fā)明實施例中,我們可以將多種功能的分組il指令合并成一組,使該組il指令具有多個功能,但是不能將僅能實現(xiàn)一個功能的分組il指令進行進一步的拆分。因此,在本發(fā)明實施例中,根據(jù)示例中的il指令對應(yīng)的test語句中的五種功能,最多可以將上述il指令分為五組。
202、混淆分組語句的分組順序。
具體的,在本步驟中,以前述步驟201中所述的分組il指令為例,可以將所述分組il指令的分組順序進行混淆。譬如,可以將所述第一組分組il指令與所述第三組分組il指令的順序進行混淆,或?qū)⑺鑫宸纸Mil指令與所述第二組il指令的順序進行混淆?;煜?guī)則可以為隨機混淆,也可以選擇其他方式,具體的可以根據(jù)實際需要進行選取,在此不做限定。
203、根據(jù)特定規(guī)則對混淆后的分組語句進行操作,生成與混淆后的分組語句對應(yīng)的秘鑰數(shù)組。
具體的,本步驟包括:首先,選擇一個二進制數(shù)字,所述二進制數(shù)字用于記錄所述混淆后的分組il指令的分組數(shù)量及分組順序;然后,根據(jù)特定規(guī)則將所述二進制數(shù)字的高位進行清零操作,并將所述混淆后分組il指令的分組數(shù)量記錄到所述清零后二進制數(shù)字的高位中;之后,根據(jù)特定規(guī)則將所述二進制數(shù)字進行向左移位操作,并將所述混淆后分組il指令的分組順序記錄到所述向左移位后二進制數(shù)字的低位中;之后,將記錄所述分組數(shù)量及所述分組順序的二進制數(shù)存儲至不同的秘鑰數(shù)組;最后,將所述不同的秘鑰數(shù)組匹配給對應(yīng)所述分組順序的分組il指令。
例如:以前述步驟201中所述的分組il指令為例,對于本發(fā)明實施例來說,生成秘鑰的規(guī)則可以為:在將所述分組il指令的分組順序隨機混淆后,首先選取一個數(shù)字q,所述q為一個二進制的32位的隨機數(shù)。隨后對數(shù)字q進行加密操作生成對應(yīng)所述分組il指令的秘鑰數(shù)組key。其中,秘鑰數(shù)組key的高位記錄對應(yīng)分組il指令的分組數(shù)量,低位記錄分組il指令的分組順序。具體的,以其中第i個key生成的規(guī)則為例,如下所示:
key[i]=q-q%blocks.count+keyid[i]
key[i]=q&0x00ffffff
key[i]=q+blocks.cout<<24
204、通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含秘鑰數(shù)組及連接語句的代碼。
具體的,本步驟包括:首先,根據(jù)本地代碼的種類,編譯調(diào)用函數(shù),所述調(diào)用函數(shù)用于根據(jù)不同的秘鑰數(shù)組調(diào)用對應(yīng)的分組il指令;然后,根據(jù)所述秘鑰數(shù)組對應(yīng)的分組il指令的功能,從所述本地代碼中調(diào)用連接語句;之后,判斷所述本地代碼的中連接語句的邏輯算法,并分析所述全部秘鑰數(shù)組對應(yīng)的分組il指令整體功能;最后,通過所述調(diào)用的連接語句和所述調(diào)用函數(shù),結(jié)合所述全部秘鑰數(shù)組對應(yīng)的分組il指令的整體功能及所述本地代碼的中連接語句的邏輯算法,將所述秘鑰數(shù)組連接起來,生成包含所述秘鑰數(shù)組及所述連接語句的代碼。
以步驟201-203中所述的示例為例,根據(jù)本步驟中具體的實施方法,本步驟的具體實施方式如下所示:
在上述代碼中,arg_0d_0的初始值為第一個秘鑰數(shù)組key的秘鑰值,所述本地代碼的種類為c#語言,通過對秘鑰數(shù)組及本地代碼的交互運算,動態(tài)選取的連接語句為switch語句。具體的連接方式由c#語言中switch的邏輯規(guī)則確定,所述邏輯規(guī)則在此不做贅述。
其中,根據(jù)本步驟中的方法:根據(jù)本地代碼的種類,編譯調(diào)用函數(shù),所述調(diào)用函數(shù)用于根據(jù)不同的秘鑰數(shù)組調(diào)用對應(yīng)的分組il指令。所述秘鑰數(shù)組key的調(diào)用函數(shù)如下所示:
205、將包含秘鑰數(shù)組及連接語句的代碼注入到已提取待保護語句的可執(zhí)行程序中。
根據(jù)本發(fā)明實施例中前述步驟201-204所述,根據(jù)所述.net平臺的特點,在本步驟中注入的方式可以通過微軟提供的元數(shù)據(jù)的應(yīng)用程序編程接口命令api來實現(xiàn)。具體注入的方式根據(jù)所注入的代碼的類別,由不同的函數(shù)密令實現(xiàn)。例如:若注入的代碼的類別為類時,采用definetypedef函數(shù);若注入的代碼的類別為方法時,采用definemethod函數(shù)。其中,所述的類及所述的方法均為.net平臺下不同代碼指令的類別。
例如,對于本發(fā)明實施例來說,所述可執(zhí)行程序中包含program類。所述program中包含.ctor、main和test三個方法。本發(fā)明實施例中選取的示例為方法test的相關(guān)語句。
根據(jù)本步驟的方法,由于所述包含秘鑰數(shù)組及連接語句的代碼最終注入到已提取待保護語句的可執(zhí)行程序中。因此所述經(jīng)過了步驟201-204相關(guān)操作的待保護語句的代碼無需通過額外的硬件空間進行存儲,亦無需在額外的模擬器中執(zhí)行。
借由上述技術(shù)方案,本發(fā)明實施例提供的另一種可執(zhí)行程序的保護方法,與現(xiàn)有基于軟件的保護方法相比,本發(fā)明實施例通過在混淆可執(zhí)行程序的待保護語句的語句順序之后,繼續(xù)對所述可執(zhí)行程序的待保護語句進行相關(guān)的操作:其中,首先通過特定規(guī)則,將所述待保護語句進行加密操作并生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組,由于所述秘鑰數(shù)組中記錄了對應(yīng)的所述分組語句的分組順序,且秘鑰數(shù)組根據(jù)特定規(guī)則生成,因此增加了在未知特定規(guī)則的前提下對秘鑰數(shù)組進行分析的難度,進而提高了所述分組語句的抗分析能力;隨后通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及所述連接語句的代碼,由于所述連接語句的連接邏輯由本地代碼的種類決定,通過更換本地代碼即可改變當(dāng)前秘鑰數(shù)組的連接關(guān)系,并且連接語句的生成是通過秘鑰數(shù)組與本地代碼交互運算后動態(tài)生成的,因此可以進一步提高所述包含秘鑰數(shù)組及連接語句的代碼的抗分析能力,進而克服了現(xiàn)有技術(shù)的保護方法中,僅混淆待保護語句的順序?qū)е驴蓤?zhí)行程序的抗分析性較差的問題,進而提高對可執(zhí)行程序保護效果,進一步提高了安全性。此外,與現(xiàn)有基于硬件的保護方法相比,本發(fā)明實施例通過本地代碼中的連接語句,連接所述秘鑰數(shù)組,生成包含所述秘鑰數(shù)組及所述連接語句的代碼,并將將所述代碼注入到已提取待保護語句的可執(zhí)行程序中。由于所述代碼仍保存在可執(zhí)行程序中,無需經(jīng)過轉(zhuǎn)譯編碼的過程,避免現(xiàn)有基于硬件保護方法中對待保護語句的轉(zhuǎn)譯過程,并且所述代碼最后仍注入到可執(zhí)行程序中,與所述可執(zhí)行程序存儲在一起,無需通過額外硬件空間存儲,因此所述代碼的數(shù)量不受硬件空間限制,可以根據(jù)需要進行增減,進而避免了現(xiàn)有技術(shù)中因轉(zhuǎn)譯后的代碼數(shù)量受硬件空間限制進而影響可執(zhí)行程序安全性的問題,進而改善了保護效果,進一步提高了可執(zhí)行程序的安全性。此外,通過對分組前的il指令進行分析,并將能夠形成完整功能的il指令分成一組,確保了分組后的分組il指令都能實現(xiàn)一個完整的功能,避免了后續(xù)的調(diào)用及連接過程中出現(xiàn)無法實現(xiàn)功能的問題,確保了整個待保護語句功能的完整性。并且,在生成秘鑰數(shù)組的過程中,通過將隨機選取的二進制數(shù)高位和低位進行清零和移位操作,并在其高位記錄所述分組il指令的分組數(shù)量、在其低位記錄分組順序,并將生成的秘鑰數(shù)組匹配給對應(yīng)其分組順序的分組il指令。確保了所述秘鑰數(shù)組的準(zhǔn)確性,進而提高了對可執(zhí)行程序中待保護語句的安全性。同時,通過根據(jù)本地代碼的種類編譯調(diào)用函數(shù),確保了在連接過程中對所述秘鑰數(shù)組調(diào)用的準(zhǔn)確性,進而確保了可執(zhí)行程序中待保護語句的功能的完整。
進一步地,本發(fā)明實施例提供一種可執(zhí)行程序的保護裝置,如圖3所示,所述裝置包括:分組單元31、混淆單元32、操作單元33、生成單元34與注入單元35,其中
分組單元31,可以用于從可執(zhí)行程序中提取待保護語句,并對所述待保護語句進行分組,得到分組語句。
混淆單元32,可以用于混淆所述分組單元31進行過分組操作后的所述分組語句的分組順序。
操作單元33,可以用于根據(jù)特定規(guī)則對所述混淆單元32混淆后的分組語句進行操作,生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組。
生成單元34,可以用于通過對所述操作單元33操作后得到的秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及所述連接語句的代碼。
注入單元35,可以用于將所述生成單元34生成的包含所述秘鑰數(shù)組及所述連接語句的代碼注入到已提取待保護語句的可執(zhí)行程序中。
需要說明的是,本發(fā)明實施例提供的一種可執(zhí)行程序的保護裝置所涉及各功能單元的其他相應(yīng)描述,可以參考圖1所示方法的對應(yīng)描述,在此不再贅述,但應(yīng)當(dāng)明確,本實施例中的裝置能夠?qū)?yīng)實現(xiàn)前述方法實施例中的全部內(nèi)容。
本發(fā)明實施例提供的一種可執(zhí)行程序的保護裝置。所述裝置包括:分組單元、混淆單元、操作單元、生成單元與注入單元。與現(xiàn)有基于軟件的保護方法相比,本發(fā)明實施例通過在混淆可執(zhí)行程序的待保護語句的語句順序之后,繼續(xù)對所述可執(zhí)行程序的待保護語句進行相關(guān)的操作:其中,首先通過特定規(guī)則,將所述待保護語句進行加密操作并生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組,由于所述秘鑰數(shù)組中記錄了對應(yīng)的所述分組語句的分組順序,且秘鑰數(shù)組根據(jù)特定規(guī)則生成,因此增加了在未知特定規(guī)則的前提下對秘鑰數(shù)組進行分析的難度,進而提高了所述分組語句的抗分析能力;隨后通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及連接語句的代碼,由于所述連接語句的連接邏輯由本地代碼的種類決定,通過更換本地代碼即可改變當(dāng)前秘鑰數(shù)組的連接關(guān)系,并且連接語句的生成是通過秘鑰數(shù)組與本地代碼交互運算后動態(tài)生成的,因此可以進一步提高所述包含秘鑰數(shù)組及連接語句的代碼的抗分析能力,進而克服了現(xiàn)有技術(shù)的保護方法中,僅混淆待保護語句的順序?qū)е驴蓤?zhí)行程序的抗分析性較差的問題,進而提高對可執(zhí)行程序保護效果,進一步提高了安全性。此外,與現(xiàn)有基于硬件的保護方法相比,本發(fā)明實施例通過本地代碼中的連接語句,連接所述秘鑰數(shù)組,生成包含所述秘鑰數(shù)組及所述連接語句的代碼,并將將所述代碼注入到已提取待保護語句的可執(zhí)行程序中。由于所述代碼仍保存在可執(zhí)行程序中,無需經(jīng)過轉(zhuǎn)譯編碼的過程,避免現(xiàn)有基于硬件保護方法中對待保護語句的轉(zhuǎn)譯過程,并且所述代碼最后仍注入到可執(zhí)行程序中,與所述可執(zhí)行程序存儲在一起,無需通過額外硬件空間存儲,因此所述代碼的數(shù)量不受硬件空間限制,可以根據(jù)需要進行增減,進而避免了現(xiàn)有技術(shù)中因轉(zhuǎn)譯后的代碼數(shù)量受硬件空間限制進而影響可執(zhí)行程序安全性的問題,進而改善了保護效果,進一步提高了可執(zhí)行程序的安全性。
進一步地,本發(fā)明實施例提供另一種可執(zhí)行程序的保護裝置,如圖4所示,所述裝置包括:分組單元41、混淆單元42、操作單元43、生成單元44與注入單元45,其中
分組單元41,可以用于從可執(zhí)行程序中提取待保護語句,并對所述待保護語句進行分組,得到分組語句。
混淆單元42,可以用于混淆所述分組單元41進行過分組操作后的所述分組語句的分組順序。
操作單元43,可以用于根據(jù)特定規(guī)則對所述混淆單元42混淆后的分組語句進行操作,生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組。
生成單元44,可以用于通過對所述操作單元43操作后得到的秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及連接語句的代碼。
注入單元45,可以用于將所述生成單元44生成的包含所述秘鑰數(shù)組及所述連接語句的代碼注入到已提取待保護語句的可執(zhí)行程序中。
進一步的,所述分組單元41,包括:第一分析模塊4101與分組模塊4102。
所述第一分析模塊4101,可以用于根據(jù)所述待保護語句對應(yīng)的il指令,分析所述il指令中不同指令對應(yīng)的不同功能。
所述分組模塊4102,可以用于根據(jù)所述分析模塊4101分析出的不同指令對應(yīng)的不同功能,將形成完整功能的il指令分成一組。
進一步的,所述操作單元43,包括:選擇模塊4301、清零模塊4302、第一記錄模塊4303、移位模塊4304、第二記錄模塊4305、存儲模塊4306及匹配模塊4307。
選擇模塊4301,可以用于選擇一個二進制數(shù)字,所述二進制數(shù)字用于記錄所述混淆后的分組il指令的分組數(shù)量及分組順序。
清零模塊4302,可以用于根據(jù)特定規(guī)則將所述選擇模塊所選擇的二進制數(shù)字的高位進行清零操作。
第一記錄模塊4303,可以用于將所述混淆后分組il指令的分組數(shù)量記錄到所述清零模塊清零后的二進制數(shù)字的高位中。
移位模塊4304,可以用于根據(jù)特定規(guī)則將所述選擇模塊4301所選擇的二進制數(shù)字進行向左移位操作。
第二記錄模塊4305,可以用于將所述混淆后分組il指令的分組順序記錄到所述移位模塊4304進行了向左移位后的二進制數(shù)字的低位中。
存儲模塊4306,可以用于將經(jīng)由所述第一記錄模塊4303記錄分組數(shù)量及經(jīng)由所述第二記錄模塊4305記錄分組順序的二進制數(shù)存儲至不同的秘鑰數(shù)組。
匹配模塊4307,可以用于將所述存儲模塊4306存儲不同的秘鑰數(shù)組匹配給對應(yīng)所述分組順序的分組il指令。
進一步的,所述生成單元44,包括:編譯模塊4401、調(diào)用模塊4402、判斷模塊4403、第二分析模塊4404及連接模塊4405。
編譯模塊4401,可以用于根據(jù)本地代碼的種類,編譯調(diào)用函數(shù),所述調(diào)用函數(shù)用于根據(jù)不同的秘鑰數(shù)組調(diào)用對應(yīng)的分組il指令。
調(diào)用模塊4402,可以用于根據(jù)所述秘鑰數(shù)組對應(yīng)的分組il指令的功能,從所述本地代碼中調(diào)用連接語句。
判斷模塊4403,可以用于判斷所述本地代碼的中連接語句的邏輯算法。
第二分析模塊4404,可以用于分析所述全部秘鑰數(shù)組對應(yīng)的分組il指令整體功能。
連接模塊4405,可以用于通過所述調(diào)用模塊4402調(diào)用的連接語句和所述編譯模塊4401編譯的調(diào)用函數(shù),結(jié)合所述第二分析模塊4404分析出的全部秘鑰數(shù)組對應(yīng)的分組il指令的整體功能及所述判斷模塊4403判斷出的本地代碼的中連接語句的邏輯算法,將所述秘鑰數(shù)組連接起來,生成包含所述秘鑰數(shù)組及所述連接語句的代碼。
需要說明的是,本發(fā)明實施例提供的另一種可執(zhí)行程序的保護裝置所涉及各功能單元的其他相應(yīng)描述,可以參考圖2所示方法的對應(yīng)描述,在此不再贅述,但應(yīng)當(dāng)明確,本實施例中的裝置能夠?qū)?yīng)實現(xiàn)前述方法實施例中的全部內(nèi)容。
本發(fā)明實施例提供的另一種可執(zhí)行程序的保護裝置。所述裝置包括:分組單元、混淆單元、操作單元、生成單元與注入單元。與現(xiàn)有基于軟件的保護方法相比,本發(fā)明實施例通過在混淆可執(zhí)行程序的待保護語句的語句順序之后,繼續(xù)對所述可執(zhí)行程序的待保護語句進行相關(guān)的操作:其中,首先通過特定規(guī)則,將所述待保護語句進行加密操作并生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組,由于所述秘鑰數(shù)組中記錄了對應(yīng)的所述分組語句的分組順序,且秘鑰數(shù)組根據(jù)特定規(guī)則生成,因此增加了在未知特定規(guī)則的前提下對秘鑰數(shù)組進行分析的難度,進而提高了所述分組語句的抗分析能力;隨后通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及所述連接語句的代碼,由于所述連接語句的連接邏輯由本地代碼的種類決定,通過更換本地代碼即可改變當(dāng)前秘鑰數(shù)組的連接關(guān)系,并且連接語句的生成是通過秘鑰數(shù)組與本地代碼交互運算后動態(tài)生成的,因此可以進一步提高所述包含秘鑰數(shù)組及連接語句的代碼的抗分析能力,進而克服了現(xiàn)有技術(shù)的保護方法中,僅混淆待保護語句的順序?qū)е驴蓤?zhí)行程序的抗分析性較差的問題,進而提高對可執(zhí)行程序保護效果,進一步提高了安全性。此外,與現(xiàn)有基于硬件的保護方法相比,本發(fā)明實施例通過本地代碼中的連接語句,連接所述秘鑰數(shù)組,生成包含所述秘鑰數(shù)組及所述連接語句的代碼,并將將所述代碼注入到已提取待保護語句的可執(zhí)行程序中。由于所述代碼仍保存在可執(zhí)行程序中,無需經(jīng)過轉(zhuǎn)譯編碼的過程,避免現(xiàn)有基于硬件保護方法中對待保護語句的轉(zhuǎn)譯過程,并且所述代碼最后仍注入到可執(zhí)行程序中,與所述可執(zhí)行程序存儲在一起,無需通過額外硬件空間存儲,因此所述代碼的數(shù)量不受硬件空間限制,可以根據(jù)需要進行增減,進而避免了現(xiàn)有技術(shù)中因轉(zhuǎn)譯后的代碼數(shù)量受硬件空間限制進而影響可執(zhí)行程序安全性的問題,進而改善了保護效果,進一步提高了可執(zhí)行程序的安全性。此外,通過對分組前的il指令進行分析,并把能夠形成完整功能的il指令分成一組,確保了分組后的分組il指令都能實現(xiàn)一個完整的功能,避免了后續(xù)的調(diào)用及連接過程中出現(xiàn)無法實現(xiàn)功能的問題,確保了整個待保護語句功能的完整性。并且,通過在生成秘鑰數(shù)組的過程中,通過將隨機選取的二進制數(shù)高位和低位進行清零和移位操作,并將其高位記錄所述分組il指令的分組數(shù)量、低位記錄分組順序,并將生成的秘鑰數(shù)組匹配給對應(yīng)其分組順序的分組il指令。確保了所述秘鑰數(shù)組的準(zhǔn)確性,進而提高了對可執(zhí)行程序中待保護語句的安全性。同時,通過根據(jù)本地代碼的種類編譯調(diào)用函數(shù),確保了在連接過程中對所述秘鑰數(shù)組調(diào)用的準(zhǔn)確性,進而確保了可執(zhí)行程序中待保護語句的功能的完整。
所述可執(zhí)行程序的保護裝置包括處理器和存儲器,上述分組單元、混淆單元、操作單元、生成單元與注入單元等均作為程序單元存儲在存儲器中,由處理器執(zhí)行存儲在存儲器中的上述程序單元來實現(xiàn)相應(yīng)的功能。
處理器中包含內(nèi)核,由內(nèi)核去存儲器中調(diào)取相應(yīng)的程序單元。內(nèi)核可以設(shè)置一個或以上,通過調(diào)整內(nèi)核參數(shù)來改善可執(zhí)行程序的保護效果,提高可執(zhí)行程序的安全性。
存儲器可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram),存儲器包括至少一個存儲芯片。
本申請還提供了一種計算機程序產(chǎn)品,當(dāng)在數(shù)據(jù)處理設(shè)備上執(zhí)行時,適于執(zhí)行初始化有如下方法步驟的程序代碼:從可執(zhí)行程序中提取待保護語句,并對所述待保護語句進行分組,得到分組語句;混淆所述分組語句的分組順序;根據(jù)特定規(guī)則對混淆后的分組語句進行操作,生成與所述混淆后的分組語句對應(yīng)的秘鑰數(shù)組;通過對所述秘鑰數(shù)組和本地代碼進行交互運算,生成包含所述秘鑰數(shù)組及連接語句的代碼;將所述包含所述秘鑰數(shù)組及所述連接語句的代碼注入到已提取待保護語句的可執(zhí)行程序中。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
存儲器可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。存儲器是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
以上僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。