基礎(chǔ)信息
權(quán)利要求
說明書
PDF全文
法律信息
引證文獻(xiàn)
著錄項信息
專利名稱 | 一種安卓應(yīng)用的加固保護(hù)方法、服務(wù)器和系統(tǒng) |
申請?zhí)?/td> | CN201410734372.7 | 申請日期 | 2014-12-04 |
法律狀態(tài) | 暫無 | 申報國家 | 中國 |
公開/公告日 | 2015-03-25 | 公開/公告號 | CN104462959A |
優(yōu)先權(quán) | 暫無 | 優(yōu)先權(quán)號 | 暫無 |
主分類號 | G06F21/55 | IPC分類號 | G;0;6;F;2;1;/;5;5;;;G;0;6;F;9;/;4;5查看分類表>
|
申請人 | 北京奇虎科技有限公司;奇智軟件(北京)有限公司 | 申請人地址 | 北京市朝陽區(qū)酒仙橋路6號院2號樓1至19層104號內(nèi)8層801
變更
專利地址、主體等相關(guān)變化,請及時變更,防止失效 |
權(quán)利人 | 北京奇虎科技有限公司 | 當(dāng)前權(quán)利人 | 北京奇虎科技有限公司 |
發(fā)明人 | 李偉;董清 |
代理機構(gòu) | 北京市隆安律師事務(wù)所 | 代理人 | 權(quán)鮮枝;何立春 |
摘要
本發(fā)明公開了一種安卓應(yīng)用的加固保護(hù)方法、服務(wù)器和系統(tǒng),該方法包括獲取安卓應(yīng)用的原始安卓安裝包APK;反編譯所述原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充;根據(jù)指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件;將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK。本發(fā)明提供的技術(shù)方案實現(xiàn)了對受保護(hù)方法的動態(tài)加解密,使內(nèi)存中任意時刻都不存在完整的dex映像,從而防止通過內(nèi)存Dump的方式獲取完整的dex文件,從而大大降低安卓應(yīng)用被逆向分析,進(jìn)而重打包再次分發(fā)的可能。
1.一種安卓應(yīng)用的加固保護(hù)方法,其中,該方法包括:
獲取安卓應(yīng)用的原始安卓安裝包APK;
反編譯所述原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充;
根據(jù)選擇的指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件;
將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK;
其中,所述加固保護(hù)程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護(hù)的方法的調(diào)用情況,動態(tài)申請空間,當(dāng)受保護(hù)的方法被調(diào)用時,根據(jù)所述加解密策略對加固配置文件中的相應(yīng)方法進(jìn)行解密獲得受保護(hù)的方法代碼;當(dāng)受保護(hù)的方法的調(diào)用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護(hù)的方法代碼重新進(jìn)行加密。
2.如權(quán)利要求1所述的方法,其中,
所述原始APK中通過注解來標(biāo)識受保護(hù)的方法代碼;
所述反編譯所述原始APK,從中提取出受保護(hù)的方法代碼包括:反編譯所述原始APK,根據(jù)其中的方法注解從中提取出受保護(hù)的方法代碼。
3.如權(quán)利要求1所述的方法,其中,所述指定加解密策略包括如下中的一種或多種:
反調(diào)試策略;
反Dump策略;
反重打包策略;
字符串加解密策略。
4.如權(quán)利要求1所述的方法,其中,將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中包括:
將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序?qū)懭敕淳幾g后的APK的lib目錄下的SO文件中。
5.如權(quán)利要求1所述的方法,其中,
所述受保護(hù)的方法代碼為所述安卓應(yīng)用的原始APK中的dex文件中的核心內(nèi)容。
6.如權(quán)利要求1-5中任一項所述的方法,其中,
所述獲取安卓應(yīng)用的原始安卓安裝包APK包括:接收用戶通過加固保護(hù)客戶端上傳的安卓應(yīng)用的原始APK;
該方法進(jìn)一步包括:提供下載加固APK的接口,使得用戶能夠利用所述加固保護(hù)客戶端通過所述接口下載加固APK。
7.如權(quán)利要求6所述的方法,其中,該方法進(jìn)一步包括:
接收用戶通過加固保護(hù)客戶端上傳的加解密策略選擇指令、加密密碼和解密密碼,并以此確定所述指定加解密策略。
8.如權(quán)利要求6所述的方法,其中,該方法進(jìn)一步包括:
接收用戶通過加固保護(hù)客戶端上傳的身份標(biāo)識,并利用該身份標(biāo)識對所述加固APK進(jìn)行簽名。
9.如權(quán)利要求6所述的方法,其中,該方法進(jìn)一步包括:
對加固APK進(jìn)行自動安裝測試。
10.一種安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,該服務(wù)器包括:
獲取單元,適于獲取安卓應(yīng)用的原始安卓安裝包APK;
反編譯提取單元,適于反編譯所述原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充;
加密單元,適于根據(jù)選擇的指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件;
添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK;
其中,所述加固保護(hù)程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護(hù)的方法的調(diào)用情況,動態(tài)申請空間,當(dāng)受保護(hù)的方法被調(diào)用時,根據(jù)所述加解密策略對加固配置文件中的相應(yīng)方法進(jìn)行解密獲得受保護(hù)的方法代碼;當(dāng)受保護(hù)的方法的調(diào)用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護(hù)的方法代碼重新進(jìn)行加密。
11.如權(quán)利要求10所述的安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,
所述獲取單元獲取的所述原始APK中通過注解來標(biāo)識受保護(hù)的方法代碼;
所述反編譯提取單元,適于反編譯所述原始APK,根據(jù)其中的方法注解從中提取出受保護(hù)的方法代碼。
12.如權(quán)利要求10所述的安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,
所述加密單元適于根據(jù)以下一種或多種策略對提取出的受護(hù)保的方法代碼進(jìn)行加密處理:
反調(diào)試策略;
反Dump策略;
反重打包策略;
字符串加解密策略。
13.如權(quán)利要求10所述的安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,
所述添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序?qū)懭敕淳幾g后的APK的lib目錄下的SO文件中。
14.如權(quán)利要求10所述的安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,
所述反編譯提取單元,適于反編譯所述原始APK后提取其中的dex文件中的核心內(nèi)容。
15.如權(quán)利要求10-14中任一項所述的安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,所述獲取單元,適于接收用戶通過加固保護(hù)客戶端上傳的安卓應(yīng)用的原始APK;
所述服務(wù)器進(jìn)一步包括:下載單元,適于提供下載加固APK的接口,使得用戶能夠利用所述加固保護(hù)客戶端通過該接口下載加固APK。
16.如權(quán)利要求15所述的安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,
所述獲取單元,進(jìn)一步適于接收用戶通過加固保護(hù)客戶端上傳的加解密策略選擇指令、加密密碼和解密密碼,并發(fā)送給加密單元;
所述加密單元,適于根據(jù)所述加解密策略選擇指令、加密密碼和解密密碼,確定所述指定加解密策略。
17.如權(quán)利要求15所述的安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,
所述獲取單元,進(jìn)一步適于接收用戶通過加固保護(hù)客戶端上傳的身份標(biāo)識;
所述服務(wù)器進(jìn)一步包括:簽名單元,適于利用所述身份標(biāo)識對所述加固APK進(jìn)行簽名。
18.如權(quán)利要求15所述的安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,該服務(wù)器進(jìn)一步包括:
測試單元,適于對加固APK進(jìn)行自動安裝測試。
19.一種安卓應(yīng)用的加固保護(hù)系統(tǒng),包括:加固保護(hù)客戶端和如權(quán)利要求10-18中任一項所述的安卓應(yīng)用的加固保護(hù)服務(wù)器。
一種安卓應(yīng)用的加固保護(hù)方法、服務(wù)器和系統(tǒng)\n技術(shù)領(lǐng)域\n[0001] 本發(fā)明涉及數(shù)據(jù)安全領(lǐng)域,具體涉及一種安卓應(yīng)用的加固保護(hù)方法、服務(wù)器和系統(tǒng)。\n背景技術(shù)\n[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ā)者造成嚴(yán)重的損害。\n[0003] 現(xiàn)有的安卓軟件安裝包的加固方案主要分為三種:第一種是對整個dex文件進(jìn)行完整的加密;第二種是運行時對dex文件做字節(jié)碼變形,防止直接Dump完整的dex,現(xiàn)有方式不能很好的自定義,該方案需要做字節(jié)碼變形的函數(shù);第三種是將前兩種方案混合使用。但由于上述方案在APK運行的某一時間內(nèi)內(nèi)存中存在完整的dex映像,受保護(hù)的dex可以通過內(nèi)存Dump的方式被完整的還原出來,導(dǎo)致現(xiàn)有方案始終無法完全解決安卓安裝包面臨的安全問題,人們也一直在尋求更有效的解決方案。\n發(fā)明內(nèi)容\n[0004] 鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種安卓應(yīng)用的加固保護(hù)方法、服務(wù)器和系統(tǒng)。。\n[0005] 依據(jù)本發(fā)明的一個方面,提供了一種安卓應(yīng)用的加固保護(hù)方法,該方法包括:\n[0006] 獲取安卓應(yīng)用的原始安卓安裝包APK;\n[0007] 反編譯所述原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充;\n[0008] 根據(jù)指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件;\n[0009] 將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK;\n[0010] 其中,所述加固保護(hù)程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護(hù)的方法的調(diào)用情況,動態(tài)申請空間,當(dāng)受保護(hù)的方法被調(diào)用時,根據(jù)所述加解密策略對加固配置文件中的相應(yīng)方法進(jìn)行解密獲得受保護(hù)的方法代碼;當(dāng)受保護(hù)的方法的調(diào)用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護(hù)的方法代碼重新進(jìn)行加密。\n[0011] 可選地,所述原始APK中通過注解來標(biāo)識受保護(hù)的方法代碼;\n[0012] 所述反編譯所述原始APK,從中提取出受保護(hù)的方法代碼包括:反編譯所述原始APK,根據(jù)其中的方法注解從中提取出受保護(hù)的方法代碼。\n[0013] 可選地,所述指定加解密策略包括如下中的一種或多種:\n[0014] 反調(diào)試策略;\n[0015] 反Dump策略;\n[0016] 反重打包策略;\n[0017] 字符串加解密策略。\n[0018] 可選地,將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中包括:\n[0019] 將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序?qū)懭敕淳幾g后的APK的lib目錄下的SO文件中。\n[0020] 可選地,所述受保護(hù)的方法代碼為所述安卓應(yīng)用的原始APK中的dex文件中的核心內(nèi)容。\n[0021] 可選地,所述獲取安卓應(yīng)用的原始安卓安裝包APK包括:接收用戶通過加固保護(hù)客戶端上傳的安卓應(yīng)用的原始APK;\n[0022] 該方法進(jìn)一步包括:提供下載加固APK的接口,使得用戶能夠利用所述加固保護(hù)客戶端通過所述接口下載加固APK。\n[0023] 可選地,該方法進(jìn)一步包括:\n[0024] 接收用戶通過加固保護(hù)客戶端上傳的加解密策略選擇指令、加密密碼和解密密碼,并以此確定所述指定加解密策略。\n[0025] 可選地,該方法進(jìn)一步包括:\n[0026] 接收用戶通過加固保護(hù)客戶端上傳的身份標(biāo)識,并利用該身份標(biāo)識對所述加固APK進(jìn)行簽名。\n[0027] 可選地,該方法進(jìn)一步包括:\n[0028] 對加固APK進(jìn)行自動安裝測試。\n[0029] 依據(jù)本發(fā)明的另一個方面,提供了一種安卓應(yīng)用的加固保護(hù)服務(wù)器,該服務(wù)器包括:\n[0030] 獲取單元,適于獲取安卓應(yīng)用的原始安卓安裝包APK;\n[0031] 反編譯提取單元,適于反編譯所述原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充;\n[0032] 加密單元,適于根據(jù)指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件;\n[0033] 添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK;\n[0034] 其中,所述加固保護(hù)程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護(hù)的方法的調(diào)用情況,動態(tài)申請空間,當(dāng)受保護(hù)的方法被調(diào)用時,根據(jù)所述加解密策略對加固配置文件中的相應(yīng)方法進(jìn)行解密獲得受保護(hù)的方法代碼;當(dāng)受保護(hù)的方法的調(diào)用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護(hù)的方法代碼重新進(jìn)行加密。\n[0035] 可選地,所述獲取單元獲取的所述原始APK中通過注解來標(biāo)識受保護(hù)的方法代碼;\n[0036] 所述反編譯提取單元,適于反編譯所述原始APK,根據(jù)其中的方法注解從中提取出受保護(hù)的方法代碼。\n[0037] 可選地,所述加密單元適于根據(jù)以下一種或多種策略對提取出的受護(hù)保的方法代碼進(jìn)行加密處理:\n[0038] 反調(diào)試策略;\n[0039] 反Dump策略;\n[0040] 反重打包策略;\n[0041] 字符串加解密策略。\n[0042] 可選地,所述添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序?qū)懭敕淳幾g后的APK的lib目錄下的SO文件中。\n[0043] 可選地,所述反編譯提取單元,適于反編譯所述原始APK后提取其中的dex文件中的核心內(nèi)容。\n[0044] 可選地,所述獲取單元,適于接收用戶通過加固保護(hù)客戶端上傳的安卓應(yīng)用的原始APK。\n[0045] 所述服務(wù)器進(jìn)一步包括:下載單元,適于提供下載加固APK的接口,使得用戶能夠利用所述加固保護(hù)客戶端通過該接口下載加固APK。\n[0046] 可選地,所述獲取單元,進(jìn)一步適于接收用戶通過加固保護(hù)客戶端上傳的加解密策略選擇指令、加密密碼和解密密碼,并發(fā)送給加密單元;\n[0047] 所述加密單元,適于根據(jù)所述加解密策略選擇指令、加密密碼和解密密碼,確定所述指定加解密策略。\n[0048] 可選地,所述獲取單元,進(jìn)一步適于接收用戶通過加固保護(hù)客戶端上傳的身份標(biāo)識;\n[0049] 所述服務(wù)器進(jìn)一步包括:簽名單元,適于利用所述身份標(biāo)識對所述加固APK進(jìn)行簽名。\n[0050] 可選地,該服務(wù)器進(jìn)一步包括:\n[0051] 測試單元,適于對加固APK進(jìn)行自動安裝測試。\n[0052] 依據(jù)本發(fā)明的有一個方面,提供了一種安卓應(yīng)用的加固保護(hù)系統(tǒng),包括:加固保護(hù)客戶端和如上任一項所述的加固保護(hù)服務(wù)器。\n[0053] 由上述可知,本發(fā)明提供的技術(shù)方案將加解密策略、加固保護(hù)程序以及受保護(hù)的方法代碼進(jìn)行加密后得到的加固配置文件添加到反編譯后的APK中,生成安卓應(yīng)用的加固APK,由于加固保護(hù)程序動態(tài)地在受保護(hù)方法被調(diào)用時對其進(jìn)行解碼,而在受保護(hù)方法調(diào)用結(jié)束后對其進(jìn)行加密,實現(xiàn)了對受保護(hù)方法的動態(tài)加解密,使內(nèi)存中任意時刻都不存在完整的dex映像,從而防止通過內(nèi)存Dump的方式獲取完整的dex文件,從而大大降低安卓應(yīng)用被逆向分析,進(jìn)而重打包再次分發(fā)的可能。\n[0054] 上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。\n附圖說明\n[0055] 通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:\n[0056] 圖1示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的加固保護(hù)方法的流程圖;\n[0057] 圖2示出了根據(jù)本發(fā)明另一個實施例的一種安卓應(yīng)用的加固保護(hù)方法的流程圖;\n[0058] 圖3示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器的示意圖;\n[0059] 圖4示出了根據(jù)本發(fā)明另一個實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器的示意圖;\n[0060] 圖5示出了根據(jù)本發(fā)明又一個實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器的示意圖;\n[0061] 圖6示出了根據(jù)本發(fā)明再一個實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器的示意圖;\n[0062] 圖7A示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的開發(fā)過程的流程圖;\n[0063] 圖7B示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的加固保護(hù)過程的流程圖;\n[0064] 圖7C示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的運行過程的流程圖。\n具體實施方式\n[0065] 下面將參照附圖更詳細(xì)地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。\n[0066] 圖1示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的加固保護(hù)方法的流程圖。如圖1所示,該方法包括:\n[0067] 步驟S110,獲取安卓應(yīng)用的原始安卓安裝包APK。\n[0068] 在安卓系統(tǒng)上,一個可以安裝、運行的應(yīng)用,需要打包成安卓安裝包,即APK(Android?application?package?file)文件格式,本步驟中的原始安卓安裝包APK是由開發(fā)者開發(fā)生成的。\n[0069] 步驟S120,反編譯原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充。\n[0070] 本步驟中的nop填充是指:將nop指令填充到提取位置處。相當(dāng)于在反編譯后的原始APK中,先將受保護(hù)方法代碼摳出,然后用nop指令進(jìn)行填充。\n[0071] 步驟S130,根據(jù)指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件。\n[0072] 本步驟中的加密處理可以是對稱加或非對稱加密。這里的加解密策略包括加密策略和相應(yīng)的解密策略。\n[0073] 步驟S140,將指定加解密策略、加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成安卓應(yīng)用的加固APK。\n[0074] 本步驟中的加固保護(hù)程序用于動態(tài)地對加固配置文件進(jìn)行加解密,加固保護(hù)程序在安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護(hù)的方法的調(diào)用情況,動態(tài)申請空間,當(dāng)受保護(hù)的方法被調(diào)用時,根據(jù)加解密策略對加固配置文件中的相應(yīng)方法進(jìn)行解密獲得受保護(hù)的方法代碼;受保護(hù)的方法代碼被調(diào)用運行;當(dāng)受保護(hù)的方法的調(diào)用結(jié)束后,根據(jù)加解密策略對解密獲得的受保護(hù)的方法代碼重新進(jìn)行加密。\n[0075] 圖1所示的方法將受保護(hù)的方法代碼進(jìn)行加密后得到的加固配置文件、加解密策略以及加固保護(hù)程序?qū)氲紸PK中,生成安卓應(yīng)用的加固APK;由于加固保護(hù)程序動態(tài)地在受保護(hù)的方法被調(diào)用時對其進(jìn)行解碼,并且在受保護(hù)的方法調(diào)用結(jié)束后對其進(jìn)行加密,實現(xiàn)了對受保護(hù)方法的動態(tài)加解密,使內(nèi)存中任意時刻都不存在完整的dex映像,從而防止通過內(nèi)存Dump的方式獲取完整的dex文件,從而大大降低安卓應(yīng)用被逆向分析,進(jìn)而重打包再次分發(fā)的可能。\n[0076] 一般情況下,由于安卓安裝包APK的開發(fā)者以及為APK提供保護(hù)服務(wù)的保護(hù)者是不同方,因此開發(fā)者在開發(fā)原始APK的過程中,可以通過注解來標(biāo)識出開發(fā)者希望得到保護(hù)的方法,保護(hù)者進(jìn)而根據(jù)注解來從原始APK的源代碼中提取受保護(hù)的方法代碼,此處的“注解”是指JAVA從J2SE5開始提供名為annotation(注解)的功能,用于將任何信息或元數(shù)據(jù)與程序元素(類、方法、成員變量等)進(jìn)行關(guān)聯(lián),其本身不會對源代碼或class等的執(zhí)行產(chǎn)生任何影響。\n[0077] 在本發(fā)明的一個實施例中,圖1所示的方法中,步驟S110獲取到的原始APK中通過注解來標(biāo)識受保護(hù)的方法代碼;相對應(yīng)地,步驟S120中的反編譯原始APK,從中提取出受保護(hù)的方法代碼可以是:反編譯原始APK,根據(jù)其中的方法注解從中提取出受保護(hù)的方法代碼。\n[0078] 圖7A示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的開發(fā)過程的流程圖,在本實施例中,對于開發(fā)者,安卓安裝包的開發(fā)過程如圖7A所示,步驟S710到步驟S750描述了以下過程:開始開發(fā)安卓安裝包APK,判斷一個方法是否為受保護(hù)的方法,是則對受保護(hù)的方法代碼添加注解,否則不添加注解,生成原始安卓安裝包APK。圖7B示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的加固保護(hù)過程的流程圖,對于為APK提供保護(hù)服務(wù)的保護(hù)者,安卓安裝包的加固保護(hù)過程如7B所示,步驟S810到步驟S870描述了以下過程:獲取到原始安卓安裝包APK后,反編譯該原始APK,選擇指定的加解密策略,然后根據(jù)開發(fā)者提供的注解來對受保護(hù)的方法代碼進(jìn)行加密,生成加固配置文件,將加固配置文件、加解密策略以及加固保護(hù)程序?qū)階PK中,生成加固APK。圖7B的步驟S880對加固APK進(jìn)一步進(jìn)行簽名,關(guān)于該步驟S880將會在下文中詳細(xì)闡述。\n[0079] 例如,開發(fā)者在開發(fā)一款即時通訊應(yīng)用時,希望對其傳輸圖片功能進(jìn)行保護(hù),因此,開發(fā)者在開發(fā)過程中對傳輸圖片功能的方法代碼添加對應(yīng)的注解,標(biāo)識該方法為受保護(hù)的方法,將受保護(hù)的方法、未受保護(hù)的方法和相關(guān)配置信息等文件打包生成原始APK。保護(hù)者在加固保護(hù)的過程中獲取原始APK,并反編譯APK后,根據(jù)上述注解把傳輸圖片功能的方法代碼提取出來,選擇指定加解密策略進(jìn)行加密處理,生成上文中所述的加固配置文件;\n再將加固配置文件、加解密策略以及加固保護(hù)程序放入反編譯后的APK中,編譯得到該即時通訊應(yīng)用的加固APK。\n[0080] 在本發(fā)明的一個實施例中,圖1所示的加固保護(hù)過程中進(jìn)行加解密處理用到的指定加解密策略,可以包括如下中的一種或多種:反調(diào)試策略;反Dump策略;反重打包策略;字符串加解密策略。其中,反調(diào)試策略可以防止動態(tài)調(diào)試;反Dump策略可以防止動態(tài)Dump完整dex;反重打包可以防止APK被二次打包;字符串加解密策略可以實現(xiàn)對dex中字符串的加密,防止被靜態(tài)分析直接看到明文程序。\n[0081] 在本發(fā)明的一個實施例中,圖1所示方法的步驟S140所述的將指定加解密策略、加固配置文件和加固保護(hù)程序添加到反編譯后的APK中包括:將指定加解密策略、加固配置文件和加固保護(hù)程序?qū)懭敕淳幾g后的APK的lib目錄下的SO文件中。\n[0082] 反編譯后的APK的內(nèi)部文件結(jié)構(gòu)如表1所示:\n[0083] 表1\n[0084]\n文件名 說明\nMETA-INF\ 證書文件\nres\ 資源文件\nassets\ 額外資源文件\nresources.arsc 二進(jìn)制資源文件\nclasses.dex .源碼資源文件\nAndroidManifest.xml 全局配置文件\nlib\ 附加組件\n[0085] 其中,META-INF目錄下一般有MANIFEST.MF和以.RSA、.SF結(jié)尾的文件,記錄了其它目錄文件的證書簽名,安卓系統(tǒng)在安裝APK時會逐個檢查APK內(nèi)部各文件是否與本目錄記錄的證書簽名一致,如果不一致,則認(rèn)為文件已被篡改,拒絕該APK的安裝和運行。\n[0086] res目錄存放的是圖片資源和界面布局等文件。\n[0087] assets目錄下存放的是額外資源和配置文件,如TXT或HTML說明文檔、字體文件和圖片資源等。\n[0088] resources.arsc文件是經(jīng)過編譯后的二進(jìn)制資源文件。\n[0089] class.dex文件是Java源碼編譯后生成的Java字節(jié)碼文件,.dex是Dalvik?Executable(Dalvik虛擬機可執(zhí)行文件)的縮寫。\n[0090] AndroidManifest.xml文件是安卓安裝包的全局描述文件,該文件記錄了應(yīng)用的包名、版本號、權(quán)限、引用的庫文件、模塊入口、類等信息。\n[0091] lib目錄是JNI(Java?Native?Interface)庫文件,一般在armeabi子文件夾中存放一些SO文件。SO文件是linux下的庫文件,是ELF格式的動態(tài)鏈接庫文件,該類文件在程序運行需要的時候才動態(tài)加載到程序中,后綴為.so。本實施例中,即是將指定加解密策略、加固配置文件和加固保護(hù)程序?qū)懭階PK的該lib目錄下的SO文件中。當(dāng)運行加固APK調(diào)用受保護(hù)的方法時,以SO文件的形式進(jìn)行動態(tài)加載。\n[0092] 在本發(fā)明的一個實施例中,圖1所示的方法中的受保護(hù)的方法代碼為安卓應(yīng)用的原始APK中的dex文件中的核心內(nèi)容。\n[0093] 圖2示出了根據(jù)本發(fā)明另一個實施例的一種安卓應(yīng)用的加固保護(hù)方法的流程圖。\n如圖2所示,該方法包括:\n[0094] 步驟S210,接收用戶通過加固保護(hù)客戶端上傳的安卓應(yīng)用的原始APK。本步驟中,接收到用戶(即開發(fā)者)上傳的原始APK,該原始APK的開發(fā)過程如圖7A所示,在此不再贅述。\n[0095] 步驟S220,反編譯原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充。\n[0096] 步驟S230,根據(jù)指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件。\n[0097] 步驟S240,將指定加解密策略、加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成安卓應(yīng)用的加固APK。\n[0098] 上述步驟S220、步驟S230、步驟S240和圖1所示方法的步驟S120、步驟S130、步驟S140對應(yīng)相同,描述了對原始APK進(jìn)行加固保護(hù)的過程,圖7B也從保護(hù)者的角度對該過程進(jìn)行了展示,在此不再贅述。\n[0099] 步驟S250,提供下載加固APK的接口,使得用戶能夠利用加固保護(hù)客戶端通過接口下載加固APK。\n[0100] 由上述可知,圖2所示的方案為開發(fā)者提供了一個用于對安卓應(yīng)用進(jìn)行加固保護(hù)的平臺,接收到開發(fā)者上傳的未保護(hù)的原始APK,經(jīng)加固保護(hù)處理后,給開發(fā)者提供下載加固APK的接口。\n[0101] 在本發(fā)明的一個實施例中,圖1和圖2所示方法中的指定加解密策略,可以通過用戶(即開發(fā)者)提供的加解密相關(guān)信息來確定,即用戶自主制定加解密策略和加解密密碼。\n該方法進(jìn)一步包括:接收用戶通過加固保護(hù)客戶端上傳的加解密策略選擇指令、加密密碼和解密密碼,并以此確定指定加解密策略。其中,用戶提供的加解密信息也可以標(biāo)注在受保護(hù)的方法的注解中。該方案為開發(fā)者提供了極大的便利,使得開發(fā)者在應(yīng)用的開發(fā)階段實現(xiàn)保護(hù)函數(shù)的方便可配置性。\n[0102] 每個發(fā)布的APK都有一個唯一ID來標(biāo)識應(yīng)用的合法性,這個ID就是APK的簽名,使用相同簽名的APK可以實現(xiàn)覆蓋安裝,因此,為了防止黑客對APK的非法篡改和盜用,要對加固APK進(jìn)行簽名,如圖7B所示的步驟S880的對加固APK進(jìn)行簽名的過程。在本發(fā)明的一個實施例中,圖2所示的方法進(jìn)一步包括:接收用戶通過加固保護(hù)客戶端上傳的身份標(biāo)識,并利用該身份標(biāo)識對所述加固APK進(jìn)行簽名。\n[0103] 為了保證APK加固的有效性,避免由于失誤而造成的APK不可安裝、APK加密失敗等現(xiàn)象,可以在給用戶提供下載加固APK之前,進(jìn)一步對其進(jìn)行測試。在本發(fā)明的一個實施例中,圖2所示的方法進(jìn)一步包括:對加固APK進(jìn)行自動安裝測試。\n[0104] 圖3示出了根據(jù)本發(fā)明一個實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器的示意圖。\n如圖3所示,該安卓應(yīng)用的加固保護(hù)服務(wù)器300包括:\n[0105] 獲取單元310,適于獲取安卓應(yīng)用的原始安卓安裝包APK。\n[0106] 在安卓系統(tǒng)上,一個可以安裝、運行的應(yīng)用,需要打包成安卓安裝包,即APK(Android?application?package?file)文件格式,本單元獲取的原始安卓安裝包APK是由開發(fā)者開發(fā)生成的。\n[0107] 反編譯提取單元320,適于反編譯原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充。\n[0108] 此處的nop填充是指:將nop指令填充到提取位置處,使填充后的代碼與源代碼對齊。\n[0109] 加密單元330,適于根據(jù)指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件。\n[0110] 添加編譯單元340,適于將指定加解密策略、加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成安卓應(yīng)用的加固APK。\n[0111] 其中,加固保護(hù)程序在安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護(hù)的方法的調(diào)用情況,動態(tài)申請空間,當(dāng)受保護(hù)的方法被調(diào)用時,根據(jù)加解密策略對加固配置文件中的相應(yīng)方法進(jìn)行解密獲得受保護(hù)的方法代碼;當(dāng)受保護(hù)的方法的調(diào)用結(jié)束后,根據(jù)加解密策略對解密獲得的受保護(hù)的方法代碼重新進(jìn)行加密。\n[0112] 可見,圖3所示的加固保護(hù)服務(wù)器300將加解密策略、加固保護(hù)程序以及受保護(hù)的方法代碼進(jìn)行加密后得到的加固配置文件導(dǎo)入到APK中,生成安卓應(yīng)用的加固APK;由于加固保護(hù)程序動態(tài)地在受保護(hù)的方法被調(diào)用時對其進(jìn)行解碼,并在受保護(hù)的方法調(diào)用結(jié)束后對其進(jìn)行加密,使內(nèi)存中任意時刻都不存在完整的dex映像,從而防止通過內(nèi)存Dump的方式獲取完整的dex文件,從而大大降低安卓應(yīng)用被逆向分析,進(jìn)而重打包再次分發(fā)的可能。\n[0113] 依據(jù)上文所述的開發(fā)者通過注解使得保護(hù)者根據(jù)該注解提取出開發(fā)者希望受保護(hù)的方法代碼,并對其進(jìn)行加固保護(hù)的例子,在本發(fā)明的一個實施例中,圖3所示服務(wù)器的獲取單元310獲取到的原始APK中通過注解來標(biāo)識了受保護(hù)的方法代碼;反編譯提取單元\n320,適于反編譯原始APK,根據(jù)其中的方法注解從中提取出受保護(hù)的方法代碼。\n[0114] 在本發(fā)明的一個實施例中,圖3所示服務(wù)器的加密單元330,適于根據(jù)以下一種或多種策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理:反調(diào)試策略;反Dump策略;反重打包策略;字符串加解密策略。其中,反調(diào)試策略可以防止動態(tài)調(diào)試;反Dump策略可以防止動態(tài)Dump完整dex;反重打包可以防止APK被二次打包;字符串加解密策略可以實現(xiàn)對dex中字符串的加密,防止被靜態(tài)分析直接看到明文程序。\n[0115] 在本發(fā)明的一個實施例中,圖3所示服務(wù)器的添加編譯單元340,適于將指定加解密策略、加固配置文件和加固保護(hù)程序?qū)懭敕淳幾g后的APK的lib目錄下的SO文件中。本實施例中,即是將指定加解密策略、加固配置文件和加固保護(hù)程序?qū)懭氡?所示的APK的lib目錄下的SO文件中。\n[0116] 在本發(fā)明的一個實施例中,圖3所示服務(wù)器的反編譯提取單元320,適于反編譯原始APK后提取其中的dex文件中的核心內(nèi)容。\n[0117] 圖4示出了根據(jù)本發(fā)明另一個實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器的示意圖。如圖4所示,該安卓應(yīng)用的加固保護(hù)服務(wù)器400包括:獲取單元410、反編譯提取單元420、加密單元430、添加編譯單元440和下載單元450。\n[0118] 其中,反編譯提取單元420、加密單元430、添加編譯單元440分別與圖3所示服務(wù)器的反編譯提取單元320、加密單元330、添加編譯單元340對應(yīng)相同,執(zhí)行了對原始APK進(jìn)行加固保護(hù)的過程,并且圖7B也從保護(hù)者的角度對該過程進(jìn)行了展示,在此不再贅述。\n[0119] 獲取單元410,適于接收用戶通過加固保護(hù)客戶端上傳的安卓應(yīng)用的原始APK。\n[0120] 本單元適于接收用戶(即開發(fā)者)上傳的原始APK,該原始APK的開發(fā)過程如圖7A所示,在此不再贅述。\n[0121] 下載單元450,適于提供下載加固APK的接口,使得用戶能夠利用加固保護(hù)客戶端通過該接口下載加固APK。\n[0122] 由上述可知,圖4所示的服務(wù)器為開發(fā)者提供了一個用于對安卓應(yīng)用進(jìn)行加固保護(hù)的平臺,獲取單元410接收到開發(fā)者上傳的未保護(hù)的原始APK,經(jīng)反編譯提取單元420、加密單元430和添加編譯單元440的加固保護(hù)處理后,再由下載單元450給開發(fā)者提供下載加固APK的接口。\n[0123] 在本發(fā)明的一個實施例中,圖3和圖4所示服務(wù)器的加密單元中指定加解密策略,可以通過用戶(即開發(fā)者)提供的加解密相關(guān)信息來確定,即用戶自主制定加解密策略和加解密密碼。圖4所示服務(wù)器的獲取單元410,進(jìn)一步適于接收用戶通過加固保護(hù)客戶端上傳的加解密策略選擇指令、加密密碼和解密密碼,并發(fā)送給加密單元430;加密單元430,適于根據(jù)加解密策略選擇指令、加密密碼和解密密碼,確定指定加解密策略。其中,用戶提供的加解密信息也可以標(biāo)注在受保護(hù)的方法的注解中,該方案為開發(fā)者提供了極大的便利,使得開發(fā)者在應(yīng)用的開發(fā)階段實現(xiàn)保護(hù)函數(shù)的方便可配置性。\n[0124] 圖5示出了根據(jù)本發(fā)明又一個實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器的示意圖。如圖5所示,該安卓應(yīng)用的加固保護(hù)服務(wù)器500包括:獲取單元510、反編譯提取單元520、加密單元530、添加編譯單元540、下載單元550和簽名單元560。\n[0125] 在本實施例中,加固保護(hù)服務(wù)器500為了防止黑客對APK的非法篡改和盜用,要對加固APK進(jìn)行簽名,因此,與圖3、4所示的服務(wù)器相比,本服務(wù)器增添了簽名單元560。其中,獲取單元510、反編譯提取單元520、加密單元530、添加編譯單元540、下載單元550分別與圖\n4所示服務(wù)器的獲取單元410、反編譯提取單元420、加密單元430、添加編譯單元440、下載單元450對應(yīng)相同,在此不再贅述。\n[0126] 獲取單元510,進(jìn)一步適于接收用戶通過加固保護(hù)客戶端上傳的身份標(biāo)識。\n[0127] 簽名單元560,適于利用所述身份標(biāo)識對加固APK進(jìn)行簽名。\n[0128] 圖6示出了根據(jù)本發(fā)明再一個實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器的示意圖。如圖6所示,該安卓應(yīng)用的加固保護(hù)服務(wù)器600包括:獲取單元610、反編譯提取單元620、加密單元630、添加編譯單元640、下載單元650、簽名單元660和測試單元670。\n[0129] 在本實施例中,加固保護(hù)服務(wù)器600為了保證APK加固的有效性,避免由于失誤而造成的APK不可安裝、APK加密失敗等現(xiàn)象,可以在給用戶提供下載加固APK之前,進(jìn)一步對其進(jìn)行測試,因此,與上文所述的服務(wù)器相比,本服務(wù)器增添了測試單元670。其中,獲取單元610、反編譯提取單元620、加密單元630、添加編譯單元640、下載單元650、簽名單元660分別與圖5所示服務(wù)器的獲取單元510、反編譯提取單元520、加密單元530、添加編譯單元540、下載單元550、簽名單元560對應(yīng)相同,在此不再贅述。\n[0130] 測試單元670,適于對加固APK進(jìn)行自動安裝測試。\n[0131] 基于上述各實施例,開發(fā)者將加固保護(hù)完成的加固APK發(fā)布到安卓應(yīng)用市場后,用戶將下載并運行該加固APK。圖7C示出了根據(jù)本發(fā)明一個實施例的安卓安裝包的運行過程的流程圖,從用戶的角度來看,安卓安裝包APK的運行過程如圖7C所示,步驟S902到步驟S920描述了以下過程:運行該APK,首先通過讀取密鑰獲得運行權(quán)限,接著讀取APK的配置文件,然后調(diào)用APK中的方法,判斷當(dāng)前調(diào)用的方法是否為受保護(hù)的方法,如果當(dāng)前調(diào)用的方法是受保護(hù)的方法,則對該受保護(hù)的方法代碼進(jìn)行動態(tài)解密,調(diào)用解密后的受保護(hù)的方法,調(diào)用結(jié)束后,重新對該受保護(hù)的方法代碼進(jìn)行動態(tài)解密,繼續(xù)運行該APK;如果當(dāng)前調(diào)用的方法不是受保護(hù)的方法,則直接正常調(diào)動,調(diào)用結(jié)束后繼續(xù)運行該APK;以此機制運行APK,直至完成整個APK的運行過程。\n[0132] 本發(fā)明的一個實施例中還公開了一種安卓應(yīng)用的加固保護(hù)系統(tǒng),其包括加固保護(hù)客戶端和如上述任一實施例中所述的加固保護(hù)服務(wù)器。\n[0133] 綜上所述,本發(fā)明提供了一種安卓應(yīng)用的加固保護(hù)方案,將加解密策略、加固保護(hù)程序以及受保護(hù)的方法代碼進(jìn)行加密后得到的加固配置文件添加到反編譯后的APK中,生成安卓應(yīng)用的加固APK,由于加固保護(hù)程序動態(tài)地在受保護(hù)方法被調(diào)用時對其進(jìn)行解碼,而在受保護(hù)方法調(diào)用結(jié)束后對其進(jìn)行加密,實現(xiàn)了對受保護(hù)方法的動態(tài)加解密,使內(nèi)存中任意時刻都不存在完整的dex映像,從而防止通過內(nèi)存Dump的方式獲取完整的dex文件,從而大大降低安卓應(yīng)用被逆向分析,進(jìn)而重打包再次分發(fā)的可能。\n[0134] 需要說明的是:\n[0135] 在此提供的算法和顯示不與任何特定計算機、虛擬裝置或者其它設(shè)備固有相關(guān)。\n各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。\n[0136] 在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細(xì)節(jié)的情況下實踐。在一些實例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。\n[0137] 類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。\n[0138] 本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。\n[0139] 此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實施例的任意之一都可以以任意的組合方式來使用。\n[0140] 本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的一種安卓應(yīng)用的加固保護(hù)服務(wù)器和系統(tǒng)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。\n[0141] 應(yīng)該注意的是上述實施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。\n[0142] 本發(fā)明公開了一種A1、一種安卓應(yīng)用的加固保護(hù)方法,其中,該方法包括:\n[0143] 獲取安卓應(yīng)用的原始安卓安裝包APK;\n[0144] 反編譯所述原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充;\n[0145] 根據(jù)指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件;\n[0146] 將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK;\n[0147] 其中,所述加固保護(hù)程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護(hù)的方法的調(diào)用情況,動態(tài)申請空間,當(dāng)受保護(hù)的方法被調(diào)用時,根據(jù)所述加解密策略對加固配置文件中的相應(yīng)方法進(jìn)行解密獲得受保護(hù)的方法代碼;當(dāng)受保護(hù)的方法的調(diào)用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護(hù)的方法代碼重新進(jìn)行加密。\n[0148] A2、如A1所述的方法,其中,\n[0149] 所述原始APK中通過注解來標(biāo)識受保護(hù)的方法代碼;\n[0150] 所述反編譯所述原始APK,從中提取出受保護(hù)的方法代碼包括:反編譯所述原始APK,根據(jù)其中的方法注解從中提取出受保護(hù)的方法代碼。\n[0151] A3、如A1所述的方法,其中,所述指定加解密策略包括如下中的一種或多種:\n[0152] 反調(diào)試策略;\n[0153] 反Dump策略;\n[0154] 反重打包策略;\n[0155] 字符串加解密策略。\n[0156] A4、如A1所述的方法,其中,將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中包括:\n[0157] 將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序?qū)懭敕淳幾g后的APK的lib目錄下的SO文件中。\n[0158] A5、如A1所述的方法,其中,\n[0159] 所述受保護(hù)的方法代碼為所述安卓應(yīng)用的原始APK中的dex文件中的核心內(nèi)容。\n[0160] A6、如A1-A5中任一項所述的方法,其中,\n[0161] 所述獲取安卓應(yīng)用的原始安卓安裝包APK包括:接收用戶通過加固保護(hù)客戶端上傳的安卓應(yīng)用的原始APK;\n[0162] 該方法進(jìn)一步包括:提供下載加固APK的接口,使得用戶能夠利用所述加固保護(hù)客戶端通過所述接口下載加固APK。\n[0163] A7、如A6所述的方法,其中,該方法進(jìn)一步包括:\n[0164] 接收用戶通過加固保護(hù)客戶端上傳的加解密策略選擇指令、加密密碼和解密密碼,并以此確定所述指定加解密策略。\n[0165] A8、如A?6所述的方法,其中,該方法進(jìn)一步包括:\n[0166] 接收用戶通過加固保護(hù)客戶端上傳的身份標(biāo)識,并利用該身份標(biāo)識對所述加固APK進(jìn)行簽名。\n[0167] A?9、如A?6所述的方法,其中,該方法進(jìn)一步包括:\n[0168] 對加固APK進(jìn)行自動安裝測試。\n[0169] 本發(fā)明公開還一種B10、一種安卓應(yīng)用的加固保護(hù)服務(wù)器,其中,該服務(wù)器包括:\n[0170] 獲取單元,適于獲取安卓應(yīng)用的原始安卓安裝包APK;\n[0171] 反編譯提取單元,適于反編譯所述原始APK,從中提取出受保護(hù)的方法代碼,并將提取位置用nop填充;\n[0172] 加密單元,適于根據(jù)指定加解密策略對提取出的受保護(hù)的方法代碼進(jìn)行加密處理,生成加固配置文件;\n[0173] 添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序添加到反編譯后的APK中,編譯生成所述安卓應(yīng)用的加固APK;\n[0174] 其中,所述加固保護(hù)程序在所述安卓應(yīng)用的加固APK被安裝并運行時執(zhí)行如下操作:根據(jù)受保護(hù)的方法的調(diào)用情況,動態(tài)申請空間,當(dāng)受保護(hù)的方法被調(diào)用時,根據(jù)所述加解密策略對加固配置文件中的相應(yīng)方法進(jìn)行解密獲得受保護(hù)的方法代碼;當(dāng)受保護(hù)的方法的調(diào)用結(jié)束后,根據(jù)所述加解密策略對解密獲得的受保護(hù)的方法代碼重新進(jìn)行加密。\n[0175] B11、如B10所述的服務(wù)器,其中,\n[0176] 所述獲取單元獲取的所述原始APK中通過注解來標(biāo)識受保護(hù)的方法代碼;\n[0177] 所述反編譯提取單元,適于反編譯所述原始APK,根據(jù)其中的方法注解從中提取出受保護(hù)的方法代碼。\n[0178] B12、如B10所述的方法,其中,\n[0179] 所述加密單元適于根據(jù)以下一種或多種策略對提取出的受護(hù)保的方法代碼進(jìn)行加密處理:\n[0180] 反調(diào)試策略;\n[0181] 反Dump策略;\n[0182] 反重打包策略;\n[0183] 字符串加解密策略。\n[0184] B13、如B10所述的服務(wù)器,其中,\n[0185] 所述添加編譯單元,適于將所述指定加解密策略、所述加固配置文件和加固保護(hù)程序?qū)懭敕淳幾g后的APK的lib目錄下的SO文件中。\n[0186] B14、如B10所述的服務(wù)器,其中,\n[0187] 所述反編譯提取單元,適于反編譯所述原始APK后提取其中的dex文件中的核心內(nèi)容。\n[0188] B15、如B10-B14中任一項所述的服務(wù)器,其中,\n[0189] 所述獲取單元,適于接收用戶通過加固保護(hù)客戶端上傳的安卓應(yīng)用的原始APK。\n[0190] 所述服務(wù)器進(jìn)一步包括:下載單元,適于提供下載加固APK的接口,使得用戶能夠利用所述加固保護(hù)客戶端通過該接口下載加固APK。\n[0191] B16、如B15所述的服務(wù)器,其中,\n[0192] 所述獲取單元,進(jìn)一步適于接收用戶通過加固保護(hù)客戶端上傳的加解密策略選擇指令、加密密碼和解密密碼,并發(fā)送給加密單元;\n[0193] 所述加密單元,適于根據(jù)所述加解密策略選擇指令、加密密碼和解密密碼,確定所述指定加解密策略。\n[0194] B17、如B15所述的服務(wù)器,其中,\n[0195] 所述獲取單元,進(jìn)一步適于接收用戶通過加固保護(hù)客戶端上傳的身份標(biāo)識;\n[0196] 所述服務(wù)器進(jìn)一步包括:簽名單元,適于利用所述身份標(biāo)識對所述加固APK進(jìn)行簽名。\n[0197] B18、如B15所述的服務(wù)器,其中,該服務(wù)器進(jìn)一步包括:\n[0198] 測試單元,適于對加固APK進(jìn)行自動安裝測試。\n[0199] 本發(fā)明還公開了C19、一種安卓應(yīng)用的加固保護(hù)系統(tǒng),包括:加固保護(hù)客戶端和如權(quán)利要求B10-B18中任一項所述的加固保護(hù)服務(wù)器。
法律信息
- 2022-08-05
專利權(quán)的轉(zhuǎn)移
登記生效日: 2022.07.25
專利權(quán)人由北京奇虎科技有限公司變更為北京奇虎科技有限公司
地址由100088 北京市西城區(qū)新街口外大街28號D座112室(德勝園區(qū))變更為100015 北京市朝陽區(qū)酒仙橋路6號院2號樓1至19層104號內(nèi)8層801
專利權(quán)人由奇智軟件(北京)有限公司 變更為空
- 2017-09-01
- 2015-04-22
實質(zhì)審查的生效
IPC(主分類): G06F 21/55
專利申請?zhí)? 201410734372.7
申請日: 2014.12.04
- 2015-03-25
引用專利(該專利引用了哪些專利)
序號 | 公開(公告)號 | 公開(公告)日 | 申請日 | 專利名稱 | 申請人 |
1
| |
2014-09-03
|
2014-06-17
| | |
2
| |
2013-11-27
|
2013-08-27
| | |
被引用專利(該專利被哪些專利引用)
序號 | 公開(公告)號 | 公開(公告)日 | 申請日 | 專利名稱 | 申請人 | 該專利沒有被任何外部專利所引用! |