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