和/或指令進行修改得到的第二應用程序能夠正常運行,且當使用逆向工具解析所述第二應用程序時,所述第二應用程序能夠?qū)е滤瞿嫦蚬ぞ邎箦e退出,由此,本發(fā)明實施例能夠避免被逆向工具反編譯,從而達到應用程序安全防護的目的。
[0144]在一實施例中,所述處理單元402,具體用于將所述第一應用程序中的第一參數(shù)修改為非法參數(shù),所述第一參數(shù)是所述第一應用程序在運行時不調(diào)用的參數(shù);或者,
[0145]將所述第一應用程序中的第一指令修改為非法指令,所述第一指令是所述第一應用程序在運行時不調(diào)用的指令;或者,
[0146]在所述第一應用程序中加入第二參數(shù),所述第二參數(shù)為非法參數(shù),且所述第二參數(shù)是所述第一應用程序在運行時不調(diào)用的參數(shù);或者,
[0147]在所述第一應用程序中加入第二指令,所述第二指令為非法指令,且所述第二指令是所述第一應用程序在運行時不調(diào)用的指令。
[0148]在一實施例中,所述處理單元402,還用于保存所述第二應用程序的第一安全哈希算法SHAl fe驗值;
[0149]為所述第二應用程序設置校驗模塊,包含有所述校驗模塊的應用程序在運行時能夠向所述服務器發(fā)送校驗信息,所述校驗信息包括所述應用程序的第二 SHAl校驗值;
[0150]將所述收到的第二 SHAl校驗值與保存的所述第一 SHAl校驗值進行對比;
[0151]當所述第二 SHAl校驗值與所述第一 SHAl校驗值匹配時,判定發(fā)出所述校驗信息的應用程序是所述第二應用程序;
[0152]當所述第二 SHAl校驗值與所述第一 SHAl校驗值不匹配時,判定發(fā)出所述校驗信息的應用程序是基于所述第二應用程序進行逆向修改得到的。
[0153]在一實施例中,所述處理單元402,還用于為所述第二應用程序生成一組公鑰證書和私鑰證書,給所述校驗模塊設置所述公鑰證書,使所述服務器保存所述私鑰證書;
[0154]為所述第二應用程序分配身份標識號碼ID,并給所述校驗模塊設置所述ID,所述ID與所述私鑰證書相對應;相應的,所述校驗信息還包括加密SHAl校驗值和所述ID,所述加密SHAl校驗值是所述校驗模塊使用所述公鑰證書對所述第二 SHAl校驗值進行加密生成的;
[0155]根據(jù)收到的所述校驗信息中的所述ID找到相對應的私鑰證書,并使用所述私鑰證書對所述加密SHAl校驗值進行解碼,得到第二 SHAl校驗值。
[0156]在一實施例中,所述處理單元402,還用于給所述校驗模塊設置校驗算法,使所述服務器保存所述校驗算法;相應的,所述校驗信息還包括第二哈希運算消息認證碼HMAC,所述第二 HMAC為所述校驗模塊使用所述校驗算法對所述ID和所述加密SHAl校驗值進行校驗得到的;
[0157]使用所述校驗算法對收到的所述校驗信息中的所述ID和所述加密SHAl校驗值進行校驗得到第一 HMAC ;
[0158]將所述第一 HMAC和所述第二 HMAC進行對比,當所述第一 HMAC和所述第二 HMAC一致時,執(zhí)行根據(jù)所述ID找到相對應的私鑰證書的操作。
[0159]在一實施例中,所述處理單元402,還用于接收所述第二應用程序發(fā)送的校驗信息,其中,所述檢驗信息包括:所述第二應用程序的ID、加密SHAl校驗值和HMAC ;其中,所述第二應用程序的ID與所述服務器為所述第一應用程序分配的ID相同;所述加密SHAl校驗值為使用所述服務器預置入所述第一應用程序中的公鑰,對所述第一應用程序的SHAl校驗值進行加密后生成的校驗值;所述HMAC為對所述第二應用程序的ID和所述加密SHAl校驗值進行校驗后生成的結果;
[0160]以及用于根據(jù)所述校驗信息,判斷所述第二應用程序是否被修改。
[0161 ] 在一實施例中,所述處理單元402,具體用于使用所述校驗信息中的HMAC判斷所述檢驗信息是否正確;
[0162]在確定正確后,根據(jù)所述校驗信息中的所述ID獲取與所述第一應用程序中的公鑰相對應的私鑰,使用所述私鑰對所述加密SHAl校驗值進行解密,獲得解密后的SHAl校驗值;
[0163]當確定解密后的所述SHAl校驗值與所述服務器中存儲的所述第一應用程序的SHAl校驗值不匹配時,確定所述第二應用程序被修改。
[0164]在一實施例中,所述處理單元402,具體用于以加入JAR庫或SO庫的方式為所述第二應用程序設置校驗模塊,包括:將編寫的校驗模塊生成JAR庫或SO庫;調(diào)用所述JAR庫或SO庫,生成安卓安裝包APK_A ;將所述APK_A反編譯為Smali_A ;將所述第二應用程序反編譯為Smali_B ;分析、提取Smali_A中調(diào)用JAR庫或SO庫的部分,合并入Smali_B中,并進行相應的修改;將Smali_B編譯為APK,完成校驗模塊的添加。
[0165]在一實施例中,所述處理單元402,還用于以加入JAR庫或SO庫的方式為所述第二應用程序設置在線升級功能模塊,所述在線升級功能模塊通過加入、修改軟件字節(jié)碼的方式被所述第二應用程序調(diào)用,所述在線升級功能模塊用于連接所述服務器,對所述JAR庫和/或SO庫進行定期更新。
[0166]本發(fā)明實施例技術方案可以解決Android系統(tǒng)下ΑΡΚ/DEX文件安全性脆弱、容易被逆向分析、追查困難等問題。
[0167]本發(fā)明實施例技術方案中軟件加固的具體過程在服務器端實現(xiàn),用戶只需要將待加固的軟件上傳至服務端,加固完成后取回。加固后的軟件具有較好的安全性,不易被逆向工具分析;能對軟件修改、二次打包等行為進行追查、監(jiān)控;同時具有很好的兼容性,適用于Android 2.2-4.4等多個版本的安卓系統(tǒng);當軟件無法連接服務器時,軟件可獨立運行,不依賴服務器;當軟件可以與服務器連通時,也只需要上傳校驗信息,不需要與服務端頻繁交互;不需要安裝自定義的加載器等額外軟件。
[0168]本領域內(nèi)的技術人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用硬件實施例、軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
[0169]本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0170]這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0171]這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0172]以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。
【主權項】
1.一種應用程序安全防護方法,其特征在于,所述方法包括: 服務器接收客戶端發(fā)來的第一應用程序; 所述服務器對所述第一應用程序的參數(shù)和/或指令進行修改,得到第二應用程序,所述第二應用程序能夠正常運行,且當使用逆向工具解析所述第二應用程序時,所述第二應用程序能夠?qū)е滤瞿嫦蚬ぞ邎箦e退出; 所述服務器將所述第二應用程序發(fā)給所述客戶端。2.根據(jù)權利要求1所述的方法,其特征在于,所述服務器對所述第一應用程序的參數(shù)和/或指令進行修改,包括: 所述服務器將所述第一應用程序中的第一參數(shù)修改為非法參數(shù),所述第一參數(shù)是所述第一應用程序在運行時不調(diào)用的參數(shù);或者, 所述服務器將所述第一應用程序中的第一指令修改為非法指令,所述第一指令是所述第一應用程序在運行時不調(diào)用的指令;或者, 所述服務器在所述第一應用程序中加入第二參數(shù),所述第二參數(shù)為非法參數(shù),且所述第二參數(shù)是所述第一應用程序在運行時不調(diào)用的參數(shù);或者, 所述服務器在所述第一應用程序中加入第二指令,所述第二指令為非法指令,且所述第二指令是所述第一應用程序在運行時不調(diào)用的指令。3.根據(jù)權利要求2所述的方法,其特征在于,所述服務器將所述第一應用程序中的第一參數(shù)修改為非法參數(shù),包括: 所述服務器將所述第一應用程序中的合法指令集操作碼后的操作碼參數(shù)修改為非法參數(shù)。4.根據(jù)權利要求3所述的方法,其特征在于,所述操作碼參數(shù)至少包括所述第一應用程序中的無效引用、不存在的地址、不存在的索引值中的一種。5.根據(jù)權利要求1或2所述的方法,其特征在于,所述方法還包括: 所述服務器保存所述第二應用程序的第一安全哈希算法SHAl校驗值; 所述服務器為所述第二應用程序設置校驗模塊,包含有所述校驗模塊的應用程序在運行時能夠向所述服務器發(fā)送校驗信息,所述校驗信息包括所述應用程序的第二 SHAl校驗值; 所述服務器將收到的所述第二 SHAl校驗值與保存的所述第一 SHAl校驗值進行對比;當所述第二 SHAl校驗值與所述第一 SHAl校驗值匹配時,所述服務器判定發(fā)出所述校驗信息的應用程序是所述第二應用程序; 當所述第二 SHAl校驗值與所述第一 SHAl校驗值不匹配時,所述服務器判定發(fā)出所述校驗