一種安卓應(yīng)用的加固保護方法、服務(wù)器和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種安卓應(yīng)用的加固保護方法、服務(wù)器和系統(tǒng),該方法包括:獲取安卓應(yīng)用的原始安卓安裝包APK;反編譯所述原始APK,從中提取出受保護的方法代碼,并將提取位置用nop填充;根據(jù)指定加解密策略對提取出的受保護的方法代碼進行加密處理,生成加固配置文件;將所述指定加解密策略、所述加固配置文件和加固保護程序添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK。本發(fā)明提供的技術(shù)方案實現(xiàn)了對受保護方法的動態(tài)加解密,使內(nèi)存中任意時刻都不存在完整的dex映像,從而防止通過內(nèi)存Dump的方式獲取完整的dex文件,從而大大降低安卓應(yīng)用被逆向分析,進而重打包再次分發(fā)的可能。
【專利說明】一種安卓應(yīng)用的加固保護方法、服務(wù)器和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)安全領(lǐng)域,具體涉及一種安卓應(yīng)用的加固保護方法、服務(wù)器和系 統(tǒng)。
【背景技術(shù)】
[0002] 安卓系統(tǒng)的快速發(fā)展以及設(shè)備的高速增長,產(chǎn)生了大量的第三方應(yīng)用程序,與其 他操作系統(tǒng)相比,安卓系統(tǒng)的開源性為應(yīng)用開發(fā)者提供了更多的功能接口,這些功能接口 在提高了系統(tǒng)的可擴展性的同時也為惡意軟件提供了便利,非法拷貝、逆向工程、反編譯、 調(diào)試、破解、二次打包、內(nèi)存截取等手段不斷威脅著安卓系統(tǒng)的安全,不僅危害了使用者,也 給正常應(yīng)用開發(fā)者造成嚴重的損害。
[0003] 現(xiàn)有的安卓軟件安裝包的加固方案主要分為三種:第一種是對整個dex文件進行 完整的加密;第二種是運行時對dex文件做字節(jié)碼變形,防止直接Dump完整的dex,現(xiàn)有方 式不能很好的自定義,該方案需要做字節(jié)碼變形的函數(shù);第三種是將前兩種方案混合使用。 但由于上述方案在APK運行的某一時間內(nèi)內(nèi)存中存在完整的dex映像,受保護的dex可以 通過內(nèi)存Dump的方式被完整的還原出來,導(dǎo)致現(xiàn)有方案始終無法完全解決安卓安裝包面 臨的安全問題,人們也一直在尋求更有效的解決方案。
【發(fā)明內(nèi)容】
[0004] 鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上 述問題的一種安卓應(yīng)用的加固保護方法、服務(wù)器和系統(tǒng)。。
[0005] 依據(jù)本發(fā)明的一個方面,提供了一種安卓應(yīng)用的加固保護方法,該方法包括:
[0006] 獲取安卓應(yīng)用的原始安卓安裝包APK ;
[0007] 反編譯所述原始APK,從中提取出受保護的方法代碼,并將提取位置用nop填充;
[0008] 根據(jù)指定加解密策略對提取出的受保護的方法代碼進行加密處理,生成加固配置 文件;
[0009] 將所述指定加解密策略、所述加固配置文件和加固保護程序添加到反編譯后的 APK中,編譯生成所述安卓應(yīng)用的加固APK ;
[0010] 其中,所述加固保護程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操 作:根據(jù)受保護的方法的調(diào)用情況,動態(tài)申請空間,當受保護的方法被調(diào)用時,根據(jù)所述加 解密策略對加固配置文件中的相應(yīng)方法進行解密獲得受保護的方法代碼;當受保護的方法 的調(diào)用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護的方法代碼重新進行加密。
[0011] 可選地,所述原始APK中通過注解來標識受保護的方法代碼;
[0012] 所述反編譯所述原始APK,從中提取出受保護的方法代碼包括:反編譯所述原始 APK,根據(jù)其中的方法注解從中提取出受保護的方法代碼。
[0013] 可選地,所述指定加解密策略包括如下中的一種或多種:
[0014] 反調(diào)試策略;
[0015] 反 Dump 策略;
[0016] 反重打包策略;
[0017] 字符串加解密策略。
[0018] 可選地,將所述指定加解密策略、所述加固配置文件和加固保護程序添加到反編 譯后的APK中包括:
[0019] 將所述指定加解密策略、所述加固配置文件和加固保護程序?qū)懭敕淳幾g后的APK 的Iib目錄下的SO文件中。
[0020] 可選地,所述受保護的方法代碼為所述安卓應(yīng)用的原始APK中的dex文件中的核 心內(nèi)容。
[0021] 可選地,所述獲取安卓應(yīng)用的原始安卓安裝包APK包括:接收用戶通過加固保護 客戶端上傳的安卓應(yīng)用的原始APK ;
[0022] 該方法進一步包括:提供下載加固APK的接口,使得用戶能夠利用所述加固保護 客戶端通過所述接口下載加固APK。
[0023] 可選地,該方法進一步包括:
[0024] 接收用戶通過加固保護客戶端上傳的加解密策略選擇指令、加密密碼和解密密 碼,并以此確定所述指定加解密策略。
[0025] 可選地,該方法進一步包括:
[0026] 接收用戶通過加固保護客戶端上傳的身份標識,并利用該身份標識對所述加固 APK進行簽名。
[0027] 可選地,該方法進一步包括:
[0028] 對加固APK進行自動安裝測試。
[0029] 依據(jù)本發(fā)明的另一個方面,提供了一種安卓應(yīng)用的加固保護服務(wù)器,該服務(wù)器包 括:
[0030] 獲取單元,適于獲取安卓應(yīng)用的原始安卓安裝包APK ;
[0031] 反編譯提取單元,適于反編譯所述原始APK,從中提取出受保護的方法代碼,并將 提取位置用nop填充;
[0032] 加密單元,適于根據(jù)指定加解密策略對提取出的受保護的方法代碼進行加密處 理,生成加固配置文件;
[0033] 添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護程序 添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK ;
[0034] 其中,所述加固保護程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操 作:根據(jù)受保護的方法的調(diào)用情況,動態(tài)申請空間,當受保護的方法被調(diào)用時,根據(jù)所述加 解密策略對加固配置文件中的相應(yīng)方法進行解密獲得受保護的方法代碼;當受保護的方法 的調(diào)用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護的方法代碼重新進行加密。
[0035] 可選地,所述獲取單元獲取的所述原始APK中通過注解來標識受保護的方法代 碼;
[0036] 所述反編譯提取單元,適于反編譯所述原始APK,根據(jù)其中的方法注解從中提取出 受保護的方法代碼。
[0037] 可選地,所述加密單元適于根據(jù)以下一種或多種策略對提取出的受護保的方法代 碼進行加密處理:
[0038] 反調(diào)試策略;
[0039] 反 Dump 策略;
[0040] 反重打包策略;
[0041] 字符串加解密策略。
[0042] 可選地,所述添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加 固保護程序?qū)懭敕淳幾g后的APK的Iib目錄下的SO文件中。
[0043] 可選地,所述反編譯提取單元,適于反編譯所述原始APK后提取其中的dex文件中 的核心內(nèi)容。
[0044] 可選地,所述獲取單元,適于接收用戶通過加固保護客戶端上傳的安卓應(yīng)用的原 始 APK。
[0045] 所述服務(wù)器進一步包括:下載單元,適于提供下載加固APK的接口,使得用戶能夠 利用所述加固保護客戶端通過該接口下載加固APK。
[0046] 可選地,所述獲取單元,進一步適于接收用戶通過加固保護客戶端上傳的加解密 策略選擇指令、加密密碼和解密密碼,并發(fā)送給加密單元;
[0047] 所述加密單元,適于根據(jù)所述加解密策略選擇指令、加密密碼和解密密碼,確定所 述指定加解密策略。
[0048] 可選地,所述獲取單元,進一步適于接收用戶通過加固保護客戶端上傳的身份標 識;
[0049] 所述服務(wù)器進一步包括:簽名單元,適于利用所述身份標識對所述加固APK進行 簽名。
[0050] 可選地,該服務(wù)器進一步包括:
[0051] 測試單元,適于對加固APK進行自動安裝測試。
[0052] 依據(jù)本發(fā)明的有一個方面,提供了一種安卓應(yīng)用的加固保護系統(tǒng),包括:加固保護 客戶端和如上任一項所述的加固保護服務(wù)器。
[0053] 由上述可知,本發(fā)明提供的技術(shù)方案將加解密策略、加固保護程序以及受保護的 方法代碼進行加密后得到的加固配置文件添加到反編譯后的APK中,生成安卓應(yīng)用的加固 APK,由于加固保護程序動態(tài)地在受保護方法被調(diào)用時對其進行解碼,而在受保護方法調(diào)用 結(jié)束后對其進行加密,實現(xiàn)了對受保護方法的動態(tài)加解密,使內(nèi)存中任意時刻都不存在完 整的dex映像,從而防止通過內(nèi)存Dump的方式獲取完整的dex文件,從而大大降低安卓應(yīng) 用被逆向分析,進而重打包再次分發(fā)的可能。
[0054] 上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段, 而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠 更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【專利附圖】
【附圖說明】
[0055] 通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通 技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明 的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0056] 圖1示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的加固保護方法的流程圖;
[0057] 圖2示出了根據(jù)本發(fā)明另一個實施例的一種安卓應(yīng)用的加固保護方法的流程圖;
[0058] 圖3示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的加固保護服務(wù)器的示意圖;
[0059] 圖4示出了根據(jù)本發(fā)明另一個實施例的一種安卓應(yīng)用的加固保護服務(wù)器的示意 圖;
[0060] 圖5示出了根據(jù)本發(fā)明又一個實施例的一種安卓應(yīng)用的加固保護服務(wù)器的示意 圖;
[0061] 圖6示出了根據(jù)本發(fā)明再一個實施例的一種安卓應(yīng)用的加固保護服務(wù)器的示意 圖;
[0062] 圖7A示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的開發(fā)過程的流程圖;
[0063] 圖7B示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的加固保護過程的流程圖;
[0064] 圖7C示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的運行過程的流程圖。
【具體實施方式】
[0065] 下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開 的示例性實施例,然而應(yīng)當理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例 所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍 完整的傳達給本領(lǐng)域的技術(shù)人員。
[0066] 圖1示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的加固保護方法的流程圖。如 圖1所示,該方法包括:
[0067] 步驟Sl 10,獲取安卓應(yīng)用的原始安卓安裝包APK。
[0068] 在安卓系統(tǒng)上,一個可以安裝、運行的應(yīng)用,需要打包成安卓安裝包,即 APK(Android application package file)文件格式,本步驟中的原始安卓安裝包APK是由 開發(fā)者開發(fā)生成的。
[0069] 步驟S120,反編譯原始APK,從中提取出受保護的方法代碼,并將提取位置用nop 填充。
[0070] 本步驟中的nop填充是指:將nop指令填充到提取位置處。相當于在反編譯后的 原始APK中,先將受保護方法代碼摳出,然后用nop指令進行填充。
[0071] 步驟S130,根據(jù)指定加解密策略對提取出的受保護的方法代碼進行加密處理,生 成加固配置文件。
[0072] 本步驟中的加密處理可以是對稱加或非對稱加密。這里的加解密策略包括加密策 略和相應(yīng)的解密策略。
[0073] 步驟S140,將指定加解密策略、加固配置文件和加固保護程序添加到反編譯后的 APK中,編譯生成安卓應(yīng)用的加固APK。
[0074] 本步驟中的加固保護程序用于動態(tài)地對加固配置文件進行加解密,加固保護程序 在安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護的方法的調(diào)用情況,動 態(tài)申請空間,當受保護的方法被調(diào)用時,根據(jù)加解密策略對加固配置文件中的相應(yīng)方法進 行解密獲得受保護的方法代碼;受保護的方法代碼被調(diào)用運行;當受保護的方法的調(diào)用結(jié) 束后,根據(jù)加解密策略對解密獲得的受保護的方法代碼重新進行加密。
[0075] 圖1所示的方法將受保護的方法代碼進行加密后得到的加固配置文件、加解密策 略以及加固保護程序?qū)氲紸PK中,生成安卓應(yīng)用的加固APK ;由于加固保護程序動態(tài)地在 受保護的方法被調(diào)用時對其進行解碼,并且在受保護的方法調(diào)用結(jié)束后對其進行加密,實 現(xiàn)了對受保護方法的動態(tài)加解密,使內(nèi)存中任意時刻都不存在完整的dex映像,從而防止 通過內(nèi)存Dump的方式獲取完整的dex文件,從而大大降低安卓應(yīng)用被逆向分析,進而重打 包再次分發(fā)的可能。
[0076] -般情況下,由于安卓安裝包APK的開發(fā)者以及為APK提供保護服務(wù)的保護者是 不同方,因此開發(fā)者在開發(fā)原始APK的過程中,可以通過注解來標識出開發(fā)者希望得到保 護的方法,保護者進而根據(jù)注解來從原始APK的源代碼中提取受保護的方法代碼,此處的 "注解"是指JAVA從J2SE5開始提供名為annotation (注解)的功能,用于將任何信息或元 數(shù)據(jù)與程序元素(類、方法、成員變量等)進行關(guān)聯(lián),其本身不會對源代碼或class等的執(zhí) 行產(chǎn)生任何影響。
[0077] 在本發(fā)明的一個實施例中,圖1所示的方法中,步驟SllO獲取到的原始APK中通 過注解來標識受保護的方法代碼;相對應(yīng)地,步驟S120中的反編譯原始APK,從中提取出受 保護的方法代碼可以是:反編譯原始APK,根據(jù)其中的方法注解從中提取出受保護的方法 代碼。
[0078] 圖7A示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的開發(fā)過程的流程圖,在本實 施例中,對于開發(fā)者,安卓安裝包的開發(fā)過程如圖7A所示,步驟S710到步驟S750描述了以 下過程:開始開發(fā)安卓安裝包APK,判斷一個方法是否為受保護的方法,是則對受保護的方 法代碼添加注解,否則不添加注解,生成原始安卓安裝包APK。圖7B示出了根據(jù)本發(fā)明一個 實施例的安卓安裝包的加固保護過程的流程圖,對于為APK提供保護服務(wù)的保護者,安卓 安裝包的加固保護過程如7B所示,步驟S810到步驟S870描述了以下過程:獲取到原始安 卓安裝包APK后,反編譯該原始APK,選擇指定的加解密策略,然后根據(jù)開發(fā)者提供的注解 來對受保護的方法代碼進行加密,生成加固配置文件,將加固配置文件、加解密策略以及加 固保護程序?qū)階PK中,生成加固APK。圖7B的步驟S880對加固APK進一步進行簽名,關(guān) 于該步驟S880將會在下文中詳細闡述。
[0079] 例如,開發(fā)者在開發(fā)一款即時通訊應(yīng)用時,希望對其傳輸圖片功能進行保護,因 此,開發(fā)者在開發(fā)過程中對傳輸圖片功能的方法代碼添加對應(yīng)的注解,標識該方法為受保 護的方法,將受保護的方法、未受保護的方法和相關(guān)配置信息等文件打包生成原始APK。保 護者在加固保護的過程中獲取原始APK,并反編譯APK后,根據(jù)上述注解把傳輸圖片功能的 方法代碼提取出來,選擇指定加解密策略進行加密處理,生成上文中所述的加固配置文件; 再將加固配置文件、加解密策略以及加固保護程序放入反編譯后的APK中,編譯得到該即 時通訊應(yīng)用的加固APK。
[0080] 在本發(fā)明的一個實施例中,圖1所示的加固保護過程中進行加解密處理用到的指 定加解密策略,可以包括如下中的一種或多種:反調(diào)試策略;反Dump策略;反重打包策略; 字符串加解密策略。其中,反調(diào)試策略可以防止動態(tài)調(diào)試;反Dump策略可以防止動態(tài)Dump 完整dex ;反重打包可以防止APK被二次打包;字符串加解密策略可以實現(xiàn)對dex中字符串 的加密,防止被靜態(tài)分析直接看到明文程序。
[0081] 在本發(fā)明的一個實施例中,圖1所示方法的步驟S140所述的將指定加解密策略、 加固配置文件和加固保護程序添加到反編譯后的APK中包括:將指定加解密策略、加固配 置文件和加固保護程序?qū)懭敕淳幾g后的APK的Iib目錄下的SO文件中。
[0082] 反編譯后的APK的內(nèi)部文件結(jié)構(gòu)如表1所示:
[0083] 表 1
[0084]
【權(quán)利要求】
1. 一種安卓應(yīng)用的加固保護方法,其中,該方法包括; 獲取安卓應(yīng)用的原始安卓安裝包APK ; 反編譯所述原始APK,從中提取出受保護的方法代碼,并將提取位置用nop填充; 根據(jù)指定加解密策略對提取出的受保護的方法代碼進行加密處理,生成加固配置文 件; 將所述指定加解密策略、所述加固配置文件和加固保護程序添加到反編譯后的APK 中,編譯生成所述安卓應(yīng)用的加固APK ; 其中,所述加固保護程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作: 根據(jù)受保護的方法的調(diào)用情況,動態(tài)申請空間,當受保護的方法被調(diào)用時,根據(jù)所述加解密 策略對加固配置文件中的相應(yīng)方法進行解密獲得受保護的方法代碼;當受保護的方法的調(diào) 用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護的方法代碼重新進行加密。
2. 如權(quán)利要求1所述的方法,其中, 所述原始APK中通過注解來標識受保護的方法代碼; 所述反編譯所述原始APK,從中提取出受保護的方法代碼包括:反編譯所述原始APK, 根據(jù)其中的方法注解從中提取出受保護的方法代碼。
3. 如權(quán)利要求1所述的方法,其中,所述指定加解密策略包括如下中的一種或多種: 反調(diào)試策略; 反Dump策略; 反重打包策略; 字符串加解密策略。
4. 如權(quán)利要求1所述的方法,其中,將所述指定加解密策略、所述加固配置文件和加固 保護程序添加到反編譯后的APK中包括: 將所述指定加解密策略、所述加固配置文件和加固保護程序?qū)懭敕淳幾g后的APK的 lib目錄下的SO文件中。
5. 如權(quán)利要求1所述的方法,其中, 所述受保護的方法代碼為所述安卓應(yīng)用的原始APK中的dex文件中的核屯、內(nèi)容。
6. -種安卓應(yīng)用的加固保護服務(wù)器,其中,該服務(wù)器包括; 獲取單元,適于獲取安卓應(yīng)用的原始安卓安裝包APK ; 反編譯提取單元,適于反編譯所述原始APK,從中提取出受保護的方法代碼,并將提取 位置用nop填充; 加密單元,適于根據(jù)指定加解密策略對提取出的受保護的方法代碼進行加密處理,生 成加固配置文件; 添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護程序添加 到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK ; 其中,所述加固保護程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作: 根據(jù)受保護的方法的調(diào)用情況,動態(tài)申請空間,當受保護的方法被調(diào)用時,根據(jù)所述加解密 策略對加固配置文件中的相應(yīng)方法進行解密獲得受保護的方法代碼;當受保護的方法的調(diào) 用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護的方法代碼重新進行加密。
7. 如權(quán)利要求6所述的服務(wù)器,其中, 所述獲取單元獲取的所述原始APK中通過注解來標識受保護的方法代碼; 所述反編譯提取單元,適于反編譯所述原始APK,根據(jù)其中的方法注解從中提取出受保 護的方法代碼。
8. 如權(quán)利要求6所述的方法,其中, 所述加密單元適于根據(jù)W下一種或多種策略對提取出的受護保的方法代碼進行加密 處理: 反調(diào)試策略; 反Dump策略; 反重打包策略; 字符串加解密策略。
9. 如權(quán)利要求6所述的服務(wù)器,其中, 所述添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護程序 寫入反編譯后的APK的lib目錄下的SO文件中。
10. -種安卓應(yīng)用的加固保護系統(tǒng),包括:加固保護客戶端和如權(quán)利要求6-9中任一項 所述的加固保護服務(wù)器。
【文檔編號】G06F21/55GK104462959SQ201410734372
【公開日】2015年3月25日 申請日期:2014年12月4日 優(yōu)先權(quán)日:2014年12月4日
【發(fā)明者】李偉, 董清 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司