本發(fā)明涉及計(jì)算機(jī)安全領(lǐng)域,具體涉及一種對(duì)可執(zhí)行文件進(jìn)行加固的方法和裝置。
背景技術(shù):
:一般地,為了能夠保護(hù)可執(zhí)行文件中的代碼不被攻擊者逆向破解,通過為可執(zhí)行文件加殼可以實(shí)現(xiàn)防止攻擊者逆向我們代碼邏輯的目的,加殼的手段一般是給可執(zhí)行文件的部分或者全部進(jìn)行加密。但是目前而言,加密方法往往是單層次的,這樣很容易被破解者找到應(yīng)對(duì)手段,不能滿足需求。技術(shù)實(shí)現(xiàn)要素:鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的對(duì)可執(zhí)行文件進(jìn)行加固的方法和裝置。依據(jù)本發(fā)明的一個(gè)方面,提供了一種對(duì)可執(zhí)行文件進(jìn)行加固的方法,包括:將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ),其中,N為大于一的自然數(shù);為每個(gè)待加密的函數(shù)選擇對(duì)應(yīng)的加密方法;依次對(duì)N個(gè)待加密的函數(shù)進(jìn)行加密,其中,對(duì)第一個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密;對(duì)第M個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密后,再以第M-1個(gè)函數(shù)所使用的所有加密方法,按所述第M-1個(gè)函數(shù)所使用加密方法的次序進(jìn)行加密;其中,M為大于一的自然數(shù)??蛇x地,所述將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ)包括:將該N個(gè)待加密的函數(shù)按次序存儲(chǔ)至可執(zhí)行文件中的同一代碼區(qū)段??蛇x地,該方法還包括:獲取該N個(gè)待加密的函數(shù)在所述可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序,使該N個(gè)待加密的函數(shù)的存儲(chǔ)次序與該N個(gè)待加密的函數(shù)在所述可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序一致。可選地,該方法在所有步驟之前還包括:將所述可執(zhí)行文件轉(zhuǎn)換為二進(jìn)制形式。可選地,該方法還包括:向加固后的可執(zhí)行文件添加解密邏輯。可選地,所述解密邏輯包括:與各待加密方法對(duì)應(yīng)的解密方法。可選地,所述解密邏輯包括:在可執(zhí)行文件被加載后,在需要調(diào)用所述代碼區(qū)段中被加密的函數(shù)時(shí),以該函數(shù)對(duì)應(yīng)的解密方法對(duì)所述代碼區(qū)段進(jìn)行解密??蛇x地,所述可執(zhí)行文件為安卓安裝包中的可執(zhí)行文件??蛇x地,所述方法還包括:對(duì)安卓安裝包進(jìn)行解包,得到至少一個(gè)可執(zhí)行文件;將加固后的可執(zhí)行文件打包到對(duì)應(yīng)的安裝包中。依據(jù)本發(fā)明的另一方面,提供了一種對(duì)可執(zhí)行文件進(jìn)行加固的裝置,包括:待加密函數(shù)預(yù)處理單元,適于將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ),其中,N為大于一的自然數(shù);加密方法選擇單元,適于為每個(gè)待加密的函數(shù)選擇對(duì)應(yīng)的加密方法;加密單元,適于依次對(duì)N個(gè)待加密的函數(shù)進(jìn)行加密,其中,對(duì)第一個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密;對(duì)第M個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密后,再以第M-1個(gè)函數(shù)所使用的所有加密方法,按所述第M-1個(gè)函數(shù)所使用加密方法的次序進(jìn)行加密;其中,M為大于一的自然數(shù)??蛇x地,所述待加密函數(shù)預(yù)處理單元,適于將該N個(gè)待加密的函數(shù)按次序存儲(chǔ)至可執(zhí)行文件中的同一代碼區(qū)段??蛇x地,所述待加密函數(shù)預(yù)處理單元,還適于獲取該N個(gè)待加密的函數(shù)在所述可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序,使該N個(gè)待加密的函數(shù)的存儲(chǔ)次序與該N個(gè)待加密的函數(shù)在所述可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序一致。可選地,該裝置還包括:可執(zhí)行文件轉(zhuǎn)換單元,適于將所述可執(zhí)行文件轉(zhuǎn)換為二進(jìn)制形式??蛇x地,該裝置還包括:解密單元,適于向加固后的可執(zhí)行文件添加解密邏輯??蛇x地,所述解密邏輯包括:與各待加密方法對(duì)應(yīng)的解密方法??蛇x地,所述解密邏輯包括:在可執(zhí)行文件被加載后,在需要調(diào)用所述代碼區(qū)段中被加密的函數(shù)時(shí),以該函數(shù)對(duì)應(yīng)的解密方法對(duì)所述代碼區(qū)段進(jìn)行解密??蛇x地,所述可執(zhí)行文件為安卓安裝包中的可執(zhí)行文件??蛇x地,所述裝置還包括:解包單元,適于對(duì)安卓安裝包進(jìn)行解包,得到至少一個(gè)可執(zhí)行文件;打包單元,適于將加固后的可執(zhí)行文件打包到對(duì)應(yīng)的安裝包中。由上述可知,本發(fā)明的技術(shù)方案,將可執(zhí)行文件中的多個(gè)待加密的函數(shù)按次序存儲(chǔ),在為每個(gè)函數(shù)選擇對(duì)應(yīng)的加密方法的基礎(chǔ)上,在具體加密時(shí),對(duì)每個(gè)函數(shù)按次序遞進(jìn),使用不同層次的加密方法進(jìn)行加密。該技術(shù)方案既能夠選擇較少的加密方法,還通過加密手段的復(fù)雜化使得得破解的可能性大大降低,對(duì)可執(zhí)行文件進(jìn)行加固的效率高,效果好。上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。附圖說明通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)可執(zhí)行文件進(jìn)行加固的方法的流程示意圖;圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的對(duì)可執(zhí)行文件進(jìn)行加固的裝置的結(jié)構(gòu)示意圖。具體實(shí)施方式下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種對(duì)可執(zhí)行文件進(jìn)行加固的方法的流程示意圖,如圖1所示,該方法包括:步驟S110,將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ),其中,N為大于一的自然數(shù)。步驟S120,為每個(gè)待加密的函數(shù)選擇對(duì)應(yīng)的加密方法。具體地,每個(gè)加密方法可以是一種加密算法或加密函數(shù)。步驟S130,依次對(duì)N個(gè)待加密的函數(shù)進(jìn)行加密,其中,對(duì)第一個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密;對(duì)第M個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密后,再以第M-1個(gè)函數(shù)所使用的所有加密方法,按第M-1個(gè)函數(shù)所使用加密方法的次序進(jìn)行加密;其中,M為大于一的自然數(shù)。例如,F(xiàn)UNC1、FUNC2、FUNC3為三個(gè)待加密的函數(shù)。FUNC1對(duì)應(yīng)的加密函數(shù)為E1,F(xiàn)UNC2對(duì)應(yīng)的加密函數(shù)為E2,F(xiàn)UNC3對(duì)應(yīng)的加密函數(shù)為E3。那么在加密時(shí):1)對(duì)FUNC1函數(shù)的函數(shù)體用加密函數(shù)E1進(jìn)行加密:Encrypt_func1=E1(FUNC1_body);2)對(duì)FUNC2函數(shù)的函數(shù)體先用加密函數(shù)E2加密,再用加密函數(shù)E1加密:Encrypt_func2=E1(E2(FUNC2_body));3)對(duì)FUNC3函數(shù)的函數(shù)體先用加密函數(shù)E3加密,再用加密函數(shù)E2加密,最后用加密函數(shù)E1加密:Encrypt_func3=E1(E2(E3(FUNC3_body)));可見,圖1所示的方法,將可執(zhí)行文件中的多個(gè)待加密的函數(shù)按次序存儲(chǔ),在為每個(gè)函數(shù)選擇對(duì)應(yīng)的加密方法的基礎(chǔ)上,在具體加密時(shí),對(duì)每個(gè)函數(shù)按次序遞進(jìn),使用不同層次的加密方法進(jìn)行加密。該技術(shù)方案既能夠選擇較少的加密方法,還通過加密手段的復(fù)雜化使得得破解的可能性大大降低,對(duì)可執(zhí)行文件進(jìn)行加固的效率高,效果好。在本發(fā)明的一個(gè)實(shí)施例中,上述方法中,將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ)包括:將該N個(gè)待加密的函數(shù)按次序存儲(chǔ)至可執(zhí)行文件中的同一代碼區(qū)段。例如上面的三個(gè)函數(shù)FUNC1、FUNC2、FUNC3可以被存儲(chǔ)到下面這樣的section(代碼區(qū)段)中:FUNC1_bodyFUNC2_bodyFUNC3_body而對(duì)這三個(gè)函數(shù)進(jìn)行了如上述的加密后,section中存儲(chǔ)的數(shù)據(jù)為:E1(FUNC1_body)E1(E2(FUNC2_body))E1(E2(E3(FUNC3_body)))在本發(fā)明的一個(gè)實(shí)施例中,上述方法還包括:獲取該N個(gè)待加密的函數(shù)在可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序,使該N個(gè)待加密的函數(shù)的存儲(chǔ)次序與該N個(gè)待加密的函數(shù)在可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序一致。這樣的存儲(chǔ)順序既使得函數(shù)的調(diào)用變得方便,也方便對(duì)函數(shù)進(jìn)行解密,同時(shí)代碼也美觀大方。在本發(fā)明的一個(gè)實(shí)施例中,上述方法在所有步驟之前還包括:將可執(zhí)行文件轉(zhuǎn)換為二進(jìn)制形式。也即是說,本實(shí)施例在進(jìn)行上述處理的過程中,也是對(duì)二進(jìn)制形式的函數(shù)體進(jìn)行處理。在本發(fā)明的一個(gè)實(shí)施例中,上述方法還包括:向加固后的可執(zhí)行文件添加解密邏輯。具體地,解密邏輯包括:與各待加密方法對(duì)應(yīng)的解密方法??蓤?zhí)行文件中的代碼想要被系統(tǒng)正確地運(yùn)行,就必須在運(yùn)行前對(duì)要運(yùn)行的代碼進(jìn)行解密,否則直接運(yùn)行加密后的代碼指令是會(huì)讓可執(zhí)行文件崩潰的。通常,對(duì)可執(zhí)行文件進(jìn)行加固可以通過對(duì)可執(zhí)行文件進(jìn)行加殼來實(shí)現(xiàn),普通的殼都會(huì)在可執(zhí)行文件被執(zhí)行前,對(duì)可執(zhí)行文件進(jìn)行比較完全的解殼,這樣,在內(nèi)存中會(huì)存在一份完全解密后的可執(zhí)行文件。這樣一來,攻擊者只要在內(nèi)存中找出完全解密后的可執(zhí)行文件,就可以將其讀取出來,這樣就獲取到了一份完全解密后的可執(zhí)行文件了。這個(gè)從內(nèi)存中讀取解密后可執(zhí)行文件的過程叫做dump。解密后的可執(zhí)行文件一旦被dump出來,攻擊者就可以非常容易的對(duì)可執(zhí)行文件中的代碼進(jìn)行逆向,那么代碼邏輯就暴露給了攻擊者。而上述實(shí)施例中對(duì)可執(zhí)行文件進(jìn)行的加固則不會(huì)出現(xiàn)該問題,這是由于在解密時(shí),可以不對(duì)整個(gè)可執(zhí)行文件進(jìn)行完全解密。具體地,在本發(fā)明的一個(gè)實(shí)施例中上述方法中的解密邏輯包括:在可執(zhí)行文件被加載后,在需要調(diào)用代碼區(qū)段中被加密的函數(shù)時(shí),以該函數(shù)對(duì)應(yīng)的解密方法對(duì)代碼區(qū)段進(jìn)行解密。這樣在內(nèi)存中不會(huì)存在完全解密的該代碼區(qū)段。具體地,依然以FUNC1、FUNC2、FUNC3這三個(gè)函數(shù)的加密為例,在解密時(shí):1)運(yùn)行FUNC1函數(shù)前,利用解密函數(shù)D1對(duì)整個(gè)section進(jìn)行解密:解密函數(shù)D1是和加密函數(shù)E1相對(duì)應(yīng)的,利用解密函數(shù)D1對(duì)可以對(duì)FUNC1函數(shù)的函數(shù)體進(jìn)行解密:FUNC1_body=D1(E1(FUNC1_body));而與此同時(shí),對(duì)FUNC2和FUNC3函數(shù)的函數(shù)體都利用D1進(jìn)行了處理:E2(FUNC2_body)=D1(E1(E2(FUNC2_body)));E2(E3(FUNC3_body))=D1(E1(E2(E3(FUNC3_body))));這樣一來,F(xiàn)UNC2和FUNC3函數(shù)的第一層加密就被解密了。2)在運(yùn)行FUNC2函數(shù)前,利用解密函數(shù)D2對(duì)整個(gè)section進(jìn)行解密:解密函數(shù)D2是和加密函數(shù)E2相對(duì)應(yīng)的。利用解密函數(shù)D2對(duì)FUNC2函數(shù)的函數(shù)體進(jìn)行解密:FUNC2_body=D2(E2(FUNC2_body));與此同時(shí),對(duì)FUNC1和FUNC3函數(shù)利用解密函數(shù)D2進(jìn)行處理:D2(FUNC1_body);這樣對(duì)FUNC1,又利用D1對(duì)其進(jìn)行了加密;而對(duì)FUNC3:E3(FUNC3_body)=D2(E2(E3(FUNC3_body)));這樣一來,F(xiàn)UNC3函數(shù)的第二層加密也被解密了。3)在運(yùn)行FUNC3函數(shù)之前,利用解密函數(shù)D3對(duì)整個(gè)section進(jìn)行解密:解密函數(shù)D3和加密函數(shù)E3相對(duì)應(yīng)。利用解密函數(shù)D3對(duì)FUNC3函數(shù)的函數(shù)體進(jìn)行解密:FUNC3_body=D3(E3(FUNC3_body))同時(shí),對(duì)FUNC1和FUNC2函數(shù)利用解密函數(shù)D3進(jìn)行處理:D3(D2(FUNC1_body));這樣一來,又對(duì)FUNC1做了一層加密;D3(FUNC2_body);這樣一來,也對(duì)FUNC2函數(shù)進(jìn)行了加密??梢?,無論是FUNC1、FUNC2、FUNC3中哪個(gè)函數(shù)在運(yùn)行,其余兩個(gè)函數(shù)都處于被加密的狀態(tài)。也就是說,在可執(zhí)行文件的執(zhí)行過程中,不存在可執(zhí)行文件被完全解密的時(shí)間點(diǎn),也就不會(huì)被攻擊者一次dump出一個(gè)完全解密的可執(zhí)行文件。在本發(fā)明的一個(gè)實(shí)施例中,上述方法中,可執(zhí)行文件為安卓安裝包中的可執(zhí)行文件,例如安卓虛擬機(jī)執(zhí)行DEX文件DEX(DalvikVMexecutes)中的DalvikVM是安卓系統(tǒng)中的虛擬機(jī),DEX文件可以在安卓應(yīng)用的運(yùn)行時(shí)動(dòng)態(tài)加載。在本發(fā)明的一個(gè)實(shí)施例中,上述方法還包括:對(duì)安卓安裝包進(jìn)行解包,得到至少一個(gè)可執(zhí)行文件;將加固后的可執(zhí)行文件打包到對(duì)應(yīng)的安裝包中。在上述實(shí)施例中由于對(duì)可執(zhí)行文件進(jìn)行了加固處理,還需進(jìn)一步將其與安卓安裝包的其他文件,例如安卓資源文件、安卓配置文件等一同打包為完整的安卓安裝包。其中,可執(zhí)行文件、安卓資源文件等可以是開發(fā)者分別提供的,例如在一個(gè)開發(fā)團(tuán)隊(duì)內(nèi)部,由不同的項(xiàng)目組提供不同類別的文件,最后由安全組對(duì)可執(zhí)行文件進(jìn)行加密和全部文件的打包;也可以由專門的安全服務(wù)提供方對(duì)開發(fā)者提供的未加固安卓安裝包進(jìn)行解包處理,對(duì)其中的可執(zhí)行文件進(jìn)行加固后重新進(jìn)行打包。圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種對(duì)可執(zhí)行文件進(jìn)行加固的裝置的結(jié)構(gòu)示意圖,如圖2所示,對(duì)可執(zhí)行文件進(jìn)行加固的裝置200包括:待加密函數(shù)預(yù)處理單元210,適于將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ),其中,N為大于一的自然數(shù)。加密方法選擇單元220,適于為每個(gè)待加密的函數(shù)選擇對(duì)應(yīng)的加密方法。加密單元230,適于依次對(duì)N個(gè)待加密的函數(shù)進(jìn)行加密,其中,對(duì)第一個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密;對(duì)第M個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密后,再以第M-1個(gè)函數(shù)所使用的所有加密方法,按第M-1個(gè)函數(shù)所使用加密方法的次序進(jìn)行加密;其中,M為大于一的自然數(shù)??梢?,圖2所示的裝置,將可執(zhí)行文件中的多個(gè)待加密的函數(shù)按次序存儲(chǔ),在為每個(gè)函數(shù)選擇對(duì)應(yīng)的加密方法的基礎(chǔ)上,在具體加密時(shí),對(duì)每個(gè)函數(shù)按次序遞進(jìn),使用不同層次的加密方法進(jìn)行加密。該技術(shù)方案既能夠選擇較少的加密方法,還通過加密手段的復(fù)雜化使得得破解的可能性大大降低,對(duì)可執(zhí)行文件進(jìn)行加固的效率高,效果好。在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,待加密函數(shù)預(yù)處理單元210,適于將該N個(gè)待加密的函數(shù)按次序存儲(chǔ)至可執(zhí)行文件中的同一代碼區(qū)段。在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,待加密函數(shù)預(yù)處理單元210,還適于獲取該N個(gè)待加密的函數(shù)在可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序,使該N個(gè)待加密的函數(shù)的存儲(chǔ)次序與該N個(gè)待加密的函數(shù)在可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序一致。在本發(fā)明的一個(gè)實(shí)施例中,上述裝置還包括:可執(zhí)行文件轉(zhuǎn)換單元,適于將可執(zhí)行文件轉(zhuǎn)換為二進(jìn)制形式。在本發(fā)明的一個(gè)實(shí)施例中,上述裝置還包括:解密單元,適于向加固后的可執(zhí)行文件添加解密邏輯。在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,解密邏輯包括:與各待加密方法對(duì)應(yīng)的解密方法。在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,解密邏輯包括:在可執(zhí)行文件被加載后,在需要調(diào)用代碼區(qū)段中被加密的函數(shù)時(shí),以該函數(shù)對(duì)應(yīng)的解密方法對(duì)代碼區(qū)段進(jìn)行解密。在本發(fā)明的一個(gè)實(shí)施例中,上述裝置中,可執(zhí)行文件為安卓安裝包中的可執(zhí)行文件。在本發(fā)明的一個(gè)實(shí)施例中,上述裝置還包括:解包單元,適于對(duì)安卓安裝包進(jìn)行解包,得到至少一個(gè)可執(zhí)行文件;打包單元,適于將加固后的可執(zhí)行文件打包到對(duì)應(yīng)的安裝包中。需要說明的是,上述各裝置實(shí)施例的具體實(shí)現(xiàn)方式與前述對(duì)應(yīng)方法實(shí)施例的具體實(shí)施方式相同,在此不再贅述。綜上所述,本發(fā)明的技術(shù)方案,將可執(zhí)行文件中的多個(gè)待加密的函數(shù)按次序存儲(chǔ),在為每個(gè)函數(shù)選擇對(duì)應(yīng)的加密方法的基礎(chǔ)上,在具體加密時(shí),對(duì)每個(gè)函數(shù)按次序遞進(jìn),使用不同層次的加密方法進(jìn)行加密。該技術(shù)方案既能夠選擇較少的加密方法,還通過加密手段的復(fù)雜化使得得破解的可能性大大降低,對(duì)可執(zhí)行文件進(jìn)行加固的效率高,效果好。需要說明的是:在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的對(duì)可執(zhí)行文件進(jìn)行加固的裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。本發(fā)明的實(shí)施例公開了A1、一種對(duì)可執(zhí)行文件進(jìn)行加固的方法,其中,該方法包括:將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ),其中,N為大于一的自然數(shù);為每個(gè)待加密的函數(shù)選擇對(duì)應(yīng)的加密方法;依次對(duì)N個(gè)待加密的函數(shù)進(jìn)行加密,其中,對(duì)第一個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密;對(duì)第M個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密后,再以第M-1個(gè)函數(shù)所使用的所有加密方法,按所述第M-1個(gè)函數(shù)所使用加密方法的次序進(jìn)行加密;其中,M為大于一的自然數(shù)。A2、如A1所述的方法,其中,所述將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ)包括:將該N個(gè)待加密的函數(shù)按次序存儲(chǔ)至可執(zhí)行文件中的同一代碼區(qū)段。A3、如A1所述的方法,其中,該方法還包括:獲取該N個(gè)待加密的函數(shù)在所述可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序,使該N個(gè)待加密的函數(shù)的存儲(chǔ)次序與該N個(gè)待加密的函數(shù)在所述可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序一致。A4、如A1所述的方法,其中,該方法在所有步驟之前還包括:將所述可執(zhí)行文件轉(zhuǎn)換為二進(jìn)制形式。A5、如A1所述的方法,其中,該方法還包括:向加固后的可執(zhí)行文件添加解密邏輯。A6、如A5所述的方法,其中,所述解密邏輯包括:與各待加密方法對(duì)應(yīng)的解密方法。A7、如A6所述的方法,其中,所述解密邏輯包括:在可執(zhí)行文件被加載后,在需要調(diào)用所述代碼區(qū)段中被加密的函數(shù)時(shí),以該函數(shù)對(duì)應(yīng)的解密方法對(duì)所述代碼區(qū)段進(jìn)行解密。A8、如A1-A7中任一項(xiàng)所述的方法,其中,所述可執(zhí)行文件為安卓安裝包中的可執(zhí)行文件。A9、如A8所述的方法,其中,所述方法還包括:對(duì)安卓安裝包進(jìn)行解包,得到至少一個(gè)可執(zhí)行文件;將加固后的可執(zhí)行文件打包到對(duì)應(yīng)的安裝包中。本發(fā)明的實(shí)施例還公開了B10、一種對(duì)可執(zhí)行文件進(jìn)行加固的裝置,其中,該裝置包括:待加密函數(shù)預(yù)處理單元,適于將可執(zhí)行文件中的N個(gè)待加密的函數(shù)按次序存儲(chǔ),其中,N為大于一的自然數(shù);加密方法選擇單元,適于為每個(gè)待加密的函數(shù)選擇對(duì)應(yīng)的加密方法;加密單元,適于依次對(duì)N個(gè)待加密的函數(shù)進(jìn)行加密,其中,對(duì)第一個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密;對(duì)第M個(gè)待加密函數(shù),以該待加密函數(shù)對(duì)應(yīng)的加密方法進(jìn)行加密后,再以第M-1個(gè)函數(shù)所使用的所有加密方法,按所述第M-1個(gè)函數(shù)所使用加密方法的次序進(jìn)行加密;其中,M為大于一的自然數(shù)。B11、如B10所述的裝置,其中,所述待加密函數(shù)預(yù)處理單元,適于將該N個(gè)待加密的函數(shù)按次序存儲(chǔ)至可執(zhí)行文件中的同一代碼區(qū)段。B12、如B10所述的裝置,其中,所述待加密函數(shù)預(yù)處理單元,還適于獲取該N個(gè)待加密的函數(shù)在所述可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序,使該N個(gè)待加密的函數(shù)的存儲(chǔ)次序與該N個(gè)待加密的函數(shù)在所述可執(zhí)行文件執(zhí)行時(shí)被調(diào)用的先后順序一致。B13、如B10所述的裝置,其中,該裝置還包括:可執(zhí)行文件轉(zhuǎn)換單元,適于將所述可執(zhí)行文件轉(zhuǎn)換為二進(jìn)制形式。B14、如B11所述的裝置,其中,該裝置還包括:解密單元,適于向加固后的可執(zhí)行文件添加解密邏輯。B15、如B14所述的裝置,其中,所述解密邏輯包括:與各待加密方法對(duì)應(yīng)的解密方法。B16、如B15所述的裝置,其中,所述解密邏輯包括:在可執(zhí)行文件被加載后,在需要調(diào)用所述代碼區(qū)段中被加密的函數(shù)時(shí),以該函數(shù)對(duì)應(yīng)的解密方法對(duì)所述代碼區(qū)段進(jìn)行解密。B17、如B10-B16中任一項(xiàng)所述的裝置,其中,所述可執(zhí)行文件為安卓安裝包中的可執(zhí)行文件。B18、如B17所述的裝置,其中,所述裝置還包括:解包單元,適于對(duì)安卓安裝包進(jìn)行解包,得到至少一個(gè)可執(zhí)行文件;打包單元,適于將加固后的可執(zhí)行文件打包到對(duì)應(yīng)的安裝包中。當(dāng)前第1頁1 2 3