一種apk加固保護方法及系統(tǒng)的制作方法
【技術領域】
[0001]本發(fā)明涉及移動終端的應用安全領域,具體涉及一種APK加固保護的方法及系統(tǒng)。
【背景技術】
[0002]Android系統(tǒng)的快速發(fā)展以及設備的高速增長,產(chǎn)生了大量的第三方應用程序。由于Android的開源,逆向工具很多,導致盜版、重打包現(xiàn)象嚴重,這些現(xiàn)狀又催生了對應用保護的需求,進而也出現(xiàn)了很多廠商提供apk( “APK”是Andro idPackage的縮寫,即Android應用安裝包)保護服務。
[0003]現(xiàn)有的apk加固廠商有奇虎360、梆梆、APKPro tect、愛加密、百度、騰訊、阿里巴巴等,這些廠商采用的方案主要分為3種:第一種是對整個Dex文件進行完整加密;第二種是運行時對Dex文件做字節(jié)碼變形,防止直接Dump完整的Dex,現(xiàn)有方式不能很好的自定義需要做字節(jié)碼變形的函數(shù);第三種是將前兩種方案混合使用。因為上述三種方案在apk運行的內存中均存在完整的Dex映像,所以可以被完整的還原出來,Wlandro i d開源,故被保護的應用仍然容易遭受內存還原攻擊。
【發(fā)明內容】
[0004]有鑒于此,本發(fā)明實施例提供了一種APK加固保護方法及系統(tǒng),實現(xiàn)了對APK的加固保護,有效避免了 APK被逆向分析、篡改和二次打包。
[0005]本發(fā)明實施例提供一種APK加固保護方法,其特征在于,包括:
[0006]獲取待加固APK;
[0007]反編譯所述待加固APK,提取所述待加固APK中需要保護的指令代碼;
[0008]利用計算機無法執(zhí)行的自定義編碼替換所述待加固APK中需要保護的指令代碼,對所述待加固APK進行加固保護。
[0009]通過本發(fā)明實施例方法,實現(xiàn)了將待加固APK中所需要保護的指令進行指令虛擬化處理,在加固完成后的APK運行的過程中在APK的內存中不會存在完整的關鍵代碼的映像,實現(xiàn)對APK的加固保護,有效防止了 APK被逆向分析、篡改、反編譯、二次打包,防止APK被嵌入各類病毒、廣告等惡意代碼。
[0010]在一些實施方式中,所述利用計算機無法執(zhí)行的自定義編碼替換所述待加固APK中需要保護的指令代碼,對所述待加固APK進行加固保護包括:
[0011]根據(jù)包括有計算機無法執(zhí)行的編碼數(shù)據(jù)和相對應的指令代碼的指令轉換表將所述待加固APK中所述需要保護的指令代碼替換為編碼數(shù)據(jù),對所述待加固APK進行加固保護。
[0012]通過本發(fā)明實施例方法,利用自定義的編碼數(shù)據(jù)和指令代碼之間的轉換關系完成對APK的加固保護,使得當不法分子不知曉編碼數(shù)據(jù)和指令代碼之間的轉換關系的情況下,幾乎不可能完成對APK關鍵代碼的靜態(tài)反編譯,有效防止了 APK被逆向分析、篡改、反編譯、二次打包。
[0013]在一些實施方式中,在對所述待加固APK進行加固保護之后還包括:
[0014]監(jiān)視并判斷所述加固保護后的APK的工作運行的環(huán)境是否存在異常;
[0015]當所述加固保護后的APK的工作運行的環(huán)境存在異常時,對所述加固保護后的APK取消加固保護,重新根據(jù)包括有指令代碼和相對應的計算機無法執(zhí)行的另一編碼數(shù)據(jù)的另一指令轉換表將所述取消加固保護的APK中所述需要保護的指令代碼轉換為計算機無法執(zhí)行的另一編碼數(shù)據(jù),以進行重新加固保護。
[0016]通過本發(fā)明實施例方法,當檢測到APK在工作運行的環(huán)境出現(xiàn)異常時,及時替換更新指令轉換表以更新所述APK的加固方案,保障了所述APK的安全可靠性。
[0017]在一些實施方式中,在對所述待加固APK進行加固保護時,生成跳轉地址為VMP入口的跳轉指令,并在所述VMP入口保存所述需要保護的指令代碼;當所述加固保護后的APK的工作運行的環(huán)境存在異常時,執(zhí)行所述跳轉指令,跳轉至所述VMP入口,獲取所述需要保護的指令代碼,利用所述需要保護的指令代碼替換所述加固保護后的APK中的所述計算機無法執(zhí)行的編碼,取消所述加固保護后的APK的加固保護。
[0018]通過本發(fā)明實施例方法,實現(xiàn)了對有逆向分析、二次打包的風險的APK的原加固方案的取消,進一步地方便將新的加固方案應用在APK中,有效防止了APK被逆向分析和二次打包。
[0019]在一些實施方式中,所述監(jiān)視并判斷所述加固保護后的APK的工作運行的環(huán)境是否存在異常包括:獲取所述加固保護后的APK工作運行的過程中所生成的日志文件信息;查詢所述日志文件信息中是否存在所述指令轉換表的未授權訪問的記錄,若存在未授權訪問的記錄,則確定所述加固保護后的APK的工作運行的環(huán)境存在異常。
[0020]通過本發(fā)明實施例方法實現(xiàn)了實時監(jiān)測指令轉換表的私密性,保障了指令轉換表的安全性,進一步保障了所述APK的加固保護方案的可靠性;當不法分子查詢調用所述指令轉換表時,APK加固廠商后臺能夠及時獲知所述指令轉換表是否可能被不法分子非法訪問,有利于APK加固廠商在后臺及時作出相應的應對策略,極大降低了 APK加固方案被破解所造成的損失。
[0021 ]在一些實施方式中,在所述指令代碼轉換為編碼數(shù)據(jù)之前還包括:接收自云端服務器分發(fā)的指令轉換表或向云端服務器請求下載以獲得指令轉換表。
[0022]通過本發(fā)明實施例方法云端下發(fā)加固保護方案,提高了加固保護APK的效率,方便了APK加固廠商將已迭代更新的加固方案的發(fā)布實施;當出現(xiàn)APK工作環(huán)境異常時,可以及時通過云端下載新的指令轉換表以更新APK的加固方案,保障了 APK加方案的安全可靠性。
[0023]在一些實施方式中,所述指令轉換表包括與Dex文件相關的指令代碼和相應的計算機無法執(zhí)行的十六進制字節(jié)碼。
[0024]本發(fā)明實施例還提供一種APK加固保護系統(tǒng),其特征在于,包括:
[0025]APK獲取單元,用于獲取待加固APK;
[0026]反編譯單元,用于反編譯所述待加固APK,提取所述待加固APK中需要保護的指令代碼;
[0027]加固保護單元,用于利用計算機無法執(zhí)行的自定義編碼數(shù)據(jù)和相對應的指令代碼的指令轉換表將所述待加固APK中所述需要保護的指令代碼替換為編碼數(shù)據(jù),對所述待加固APK進行加固保護。
[0028]通過本發(fā)明實施例系統(tǒng),實現(xiàn)了將待加固APK中所需要保護的指令進行指令虛擬化處理,在加固完成后的APK運行的過程中在APK的內存中不會存在完整的關鍵代碼的映像,實現(xiàn)對APK的加固保護,有效防止了 APK被逆向分析、篡改、反編譯、二次打包,防止APK被嵌入各類病毒、廣告等惡意代碼。
[0029]在一些實施方式中,所述加固保護單元用于根據(jù)包括有計算機無法執(zhí)行的編碼數(shù)據(jù)和相對應的指令代碼的指令轉換表將所述待加固APK中所述需要保護的指令代碼替換為編碼數(shù)據(jù),對所述待加固APK進行加固保護。
[0030]通過本發(fā)明實施例系統(tǒng),利用自定義的編碼數(shù)據(jù)和指令代碼之間的轉換關系完成對APK的加固保護,使得當不法分子不知曉編碼數(shù)據(jù)和指令代碼之間的轉換關系的情況下,幾乎不可能完成對APK關鍵代碼的靜態(tài)反編譯,有效防止了 APK被逆向分析、篡改、反編譯、二次打包。
[0031]在一些實施方式中,還包括:環(huán)境監(jiān)測單元,用于監(jiān)視并判斷所述加固保護后的APK的工作運行的環(huán)境是否存在異常;重新加固單元,用于當所述加固保護后的APK的工作運行的環(huán)境存在異常時,對所述加固保護后的APK取消加固保護,重新根據(jù)包括有指令代碼和相對應的計算機無法執(zhí)行的另一編碼數(shù)據(jù)的另一指令轉換表將所述取消加固保護的APK中所述需要保護的指令代碼轉換為計算機無法執(zhí)行的另一編碼數(shù)據(jù),以進行重新加固保護。
[0032]通過本發(fā)明實施例系統(tǒng),當檢測到APK在