以方便終端設(shè)備101上傳未加固的安裝包,終端設(shè)備102、103下載加固后的安裝包等。
[0028]終端設(shè)備101可以是具有數(shù)據(jù)處理功能的電子設(shè)備,可以安裝有各種客戶端應(yīng)用,例如網(wǎng)頁(yè)瀏覽器、社交平臺(tái)軟件等,以便將未加固的安裝包上傳至服務(wù)器105進(jìn)行加固,也可以通過(guò)固化的加固程序(例如加固程序存儲(chǔ)設(shè)備)自行加固安裝包。
[0029]終端設(shè)備102、103可以是各種安裝有安卓系統(tǒng)的電子設(shè)備,可以安裝有各種客戶端應(yīng)用,例如網(wǎng)頁(yè)瀏覽器、即時(shí)通信軟件、社交平臺(tái)軟件等,以便下載加固后的安裝包。例如可以為智能手機(jī)、智能手表以及平板電腦等等。
[0030]服務(wù)器105可以是提供各種服務(wù)的服務(wù)器。服務(wù)器可以通過(guò)網(wǎng)絡(luò)104連通其他服務(wù)器對(duì)接收到的安裝包數(shù)據(jù)進(jìn)行加固處理(例如加固安裝包等),并向終端設(shè)備101提供上傳安裝包、下載安裝包等服務(wù),向終端設(shè)備102、103提供下載加固后的安裝包等服務(wù),也可以通過(guò)預(yù)設(shè)于本地的加固程序加固安裝包,還可以通過(guò)運(yùn)行固化于存儲(chǔ)設(shè)備中的加固程序加固安裝包。
[0031]需要說(shuō)明的是,本申請(qǐng)實(shí)施例所提供的用于安卓系統(tǒng)的防逆向破解共享對(duì)象文件的方法通常由終端設(shè)備102、103執(zhí)行,用于安卓系統(tǒng)的防逆向破解共享對(duì)象文件的裝置也通常設(shè)置于終端設(shè)備102、103中。
[0032]應(yīng)該理解,圖1中的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器的數(shù)目?jī)H僅是示意性的。根據(jù)實(shí)現(xiàn)需要,可以具有任意數(shù)目的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器。
[0033]首先參考圖2,其示出了根據(jù)本申請(qǐng)一個(gè)實(shí)施例的用于安卓系統(tǒng)的防逆向破解共享對(duì)象文件的方法的示例性流程圖。
[0034]如圖2所示,在步驟201中,加載安裝包文件。
[0035]在加載安裝包文件時(shí),用于安卓系統(tǒng)的防逆向破解共享對(duì)象文件的方法運(yùn)行于其上的終端設(shè)備(例如圖1中的101、102、103等),首先需要獲取安卓安裝包文件。安卓安裝包文件可以包括共享對(duì)象文件,共享對(duì)象文件可以包括預(yù)先鏈接至共享對(duì)象文件的殼中的解密算法、已加密的被保護(hù)函數(shù)和加密算法。安裝包文件的獲取可以通過(guò)網(wǎng)絡(luò)從服務(wù)器下載、從建立連接的終端設(shè)備傳輸或預(yù)置于終端設(shè)備等方式得到。
[0036]例如,終端設(shè)備可以通過(guò)安裝于其上的網(wǎng)頁(yè)瀏覽器從服務(wù)器下載用于安卓系統(tǒng)的安裝包文件(APK文件),其中APK文件包括共享對(duì)象文件(so文件),so文件的殼中預(yù)先鏈接有解密算法、已加密的被保護(hù)函數(shù)和加密算法,之后終端設(shè)備加載下載的安裝包文件。
[0037]接著,在步驟202中,加載共享對(duì)象文件至內(nèi)存中。
[0038]接著,在步驟203中,在安裝包文件調(diào)用被保護(hù)函數(shù)時(shí),調(diào)用解密算法解密已加密的被保護(hù)函數(shù),得到被保護(hù)函數(shù)的明文源代碼。
[0039]在這里,已加密的被保護(hù)函數(shù),為被保護(hù)函數(shù)的明文經(jīng)過(guò)加密變換得到的被保護(hù)函數(shù)的密文。
[0040]通過(guò)調(diào)用解密算法,可以對(duì)上述被保護(hù)函數(shù)的密文進(jìn)行密碼變換,得到被保護(hù)函數(shù)的明文源代碼。
[0041]在上述的加密解密過(guò)程中,常用加密算法可以包括但不限于:高級(jí)加密標(biāo)準(zhǔn)AES、RSA算法、ECC算法、迪菲一赫爾曼Diffie-hellman算法、安全散列算法SHA-1/SHA-25等。
[0042]接著,在步驟204中,將被保護(hù)函數(shù)的明文源代碼加載至明文源代碼地址中。
[0043]在這里,明文源代碼地址,考慮到保密的需要,可以預(yù)先設(shè)置于上述的共享對(duì)象文件的殼中。之后,在安裝包文件調(diào)用被保護(hù)函數(shù)時(shí),調(diào)用解密算法解密已加密的被保護(hù)函數(shù),根據(jù)上述殼中的明文源代碼地址,將得到的被保護(hù)函數(shù)的明文源代碼加載至明文源代碼地址中。
[0044]接著,在步驟205中,執(zhí)行被保護(hù)函數(shù)的明文源代碼。
[0045]接著,在步驟206中,響應(yīng)于執(zhí)行被保護(hù)函數(shù)的明文源代碼完成,調(diào)用加密算法刪除被保護(hù)函數(shù)的明文源代碼。
[0046]在這里,加密算法為刪除被保護(hù)函數(shù)的明文源代碼的算法,也可以稱之為刪除算法。
[0047]在本實(shí)施例的一個(gè)應(yīng)用場(chǎng)景中,如圖3所示,其示出了根據(jù)本申請(qǐng)一個(gè)實(shí)施例的用于安卓系統(tǒng)的防逆向破解共享對(duì)象文件的方法的應(yīng)用場(chǎng)景流程圖。用戶310在安裝應(yīng)用時(shí),點(diǎn)擊加載終端設(shè)備320中的安卓安裝包文件,在安裝包文件調(diào)用被保護(hù)函數(shù)(例如函數(shù)FUN)時(shí),如步驟301所示,調(diào)用解密算法解密函數(shù)FUN的密文,得到函數(shù)FUN的明文,之后如步驟302所示,執(zhí)行函數(shù)FUN的明文,最后如步驟303所示,調(diào)用加密算法刪除函數(shù)FUN的明文,完成安裝包文件對(duì)函數(shù)FUN的調(diào)用。
[0048]本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,安裝包中調(diào)用的被保護(hù)函數(shù)可以為一個(gè),也可以為多個(gè)。當(dāng)被保護(hù)函數(shù)為多個(gè)時(shí),可以預(yù)先對(duì)每一個(gè)被保護(hù)函數(shù)進(jìn)行以下處理:對(duì)每一個(gè)被保護(hù)函數(shù)進(jìn)行加密,并在加密的被保護(hù)函數(shù)的前后分別設(shè)置解密算法和加密算法,將每一個(gè)被保護(hù)函數(shù)及其前后設(shè)置的解密算法和加密算法鏈接至so文件的殼中,以提高每一個(gè)被保護(hù)函數(shù)的安全性。其中,在得到加密的被保護(hù)函數(shù)時(shí),對(duì)每一個(gè)被保護(hù)函數(shù)進(jìn)行加密變換的方式可以相同,也可以不同,而解密算法進(jìn)行的解密變換方式應(yīng)當(dāng)與上述的加密變換方式相適應(yīng)。
[0049]根據(jù)本申請(qǐng)上述實(shí)施例提供的方法,由于解密算法、已加密的被保護(hù)函數(shù)和加密算法均設(shè)置于共享對(duì)象文件的殼中,加殼的程序可以直接運(yùn)行,但是不能查看源代碼,惡意人員若想要通過(guò)獲取解密算法得到被保護(hù)函數(shù)的明文,需要對(duì)共享對(duì)象文件進(jìn)行脫殼,增加了破解共享對(duì)象文件的難度,而被保護(hù)函數(shù)的明文只在被保護(hù)函數(shù)被調(diào)用的短暫時(shí)間段內(nèi)存在于內(nèi)存的明文源代碼地址中,調(diào)用完畢之后明文源代碼隨即被清空,惡意人員很難在明文存在于內(nèi)存的短暫時(shí)間內(nèi)轉(zhuǎn)儲(chǔ)出被保護(hù)函數(shù)的源代碼,因此提高了共享對(duì)象文件中被保護(hù)函數(shù)的安全性。
[0050]進(jìn)一步參考圖4,其示出了根據(jù)本申請(qǐng)一個(gè)實(shí)施例的通過(guò)解密函數(shù)調(diào)用解密算法解密已加密的被保護(hù)函數(shù)的方法的示例性流程圖。
[0051]如圖4所示,上述圖2中的調(diào)用解密算法解密已加密的被保護(hù)函數(shù),得到被保護(hù)函數(shù)的明文源代碼可以包括:
[0052]首先,在步驟401中,調(diào)用預(yù)設(shè)于靜態(tài)鏈接文件中的解密函數(shù),并根據(jù)預(yù)設(shè)于殼中的被保護(hù)函數(shù)的數(shù)據(jù)集合,將被保護(hù)函數(shù)的明文源代碼地址傳送至解密函數(shù)。
[0053]在這里,數(shù)據(jù)集合中的單條數(shù)據(jù)包括被保護(hù)函數(shù)的明文源代碼地址、明文源代碼大小、密文源代碼地址和密文源代碼大小。數(shù)據(jù)集合的結(jié)構(gòu)形式,可以包括但不限于以下任意一項(xiàng):數(shù)據(jù)表、鏈表、二維數(shù)組和結(jié)構(gòu)體數(shù)組等。
[0054]在調(diào)用解密算法時(shí),可以通過(guò)調(diào)用解密函數(shù)實(shí)現(xiàn)對(duì)解密算法的調(diào)用,并通過(guò)解密函數(shù)接收被保護(hù)函數(shù)的明文源代碼地址。
[0055]接著,在步驟402中,解密函數(shù)調(diào)用解密算法,并將明文源代碼地址傳送至解密算法。
[0056]若得到每一個(gè)加密的被保護(hù)函數(shù)的加密變換方式不完全相同,還可以通過(guò)預(yù)先設(shè)置的多個(gè)解密函數(shù)分別調(diào)用不同的解密算法。
[0057]之后,在步驟403中,解密算法根據(jù)明文源代碼地址在數(shù)據(jù)集合中查詢密文源代碼地址和密文源代碼大小。
[0058]由于數(shù)據(jù)集合中的單條數(shù)據(jù)可以包括被保護(hù)函數(shù)的明文源代碼地址、明文源代碼大小、密文源代碼地址和密文源代碼大小,因此可以根據(jù)上述明文源代碼,唯一確定一條單條數(shù)據(jù),再查詢出該單條數(shù)據(jù)中的密文源代碼地址和密文源代碼大小。
[0059]接著,在步驟404中,解密算法根據(jù)密文源代碼地址和密文源代碼大小解密被保護(hù)函數(shù),得到被保護(hù)函數(shù)的明文源代碼。
[0060]本申請(qǐng)?zhí)峁┑纳鲜鐾ㄟ^(guò)解密函數(shù)調(diào)用解密算法解密已加密的被保護(hù)函數(shù)的方法,通過(guò)設(shè)置解密函數(shù),可以重復(fù)利用解密函數(shù)的程序代碼,從而節(jié)省程序的代碼量,還可以無(wú)須知道解密函數(shù)中的細(xì)節(jié),直接按照函數(shù)調(diào)用規(guī)則對(duì)解密函數(shù)進(jìn)行調(diào)用即可,進(jìn)一步提高了解密函數(shù)中的內(nèi)容的隱蔽性,從而提高了解密函數(shù)所調(diào)用的解密算法的安全性。
[0061]進(jìn)一步參考圖5,其示出了根據(jù)本申請(qǐng)一個(gè)實(shí)施例的通過(guò)加密函數(shù)調(diào)用加密算法刪除被保護(hù)函數(shù)的明文源代碼的方法的示例性流程圖。
[0062]如圖5所示,上述圖2中的響應(yīng)于執(zhí)行被保護(hù)函數(shù)的明文源代碼完成,調(diào)用加密算法刪除被保護(hù)函數(shù)的明文源代碼可以包括: