二 SHAl校驗值與所述第一 SHAl校驗值匹配時,判定發(fā)出所述校驗信息的應(yīng)用程序是所述第二應(yīng)用程序;
[0059]當(dāng)所述第二 SHAl校驗值與所述第一 SHAl校驗值不匹配時,判定發(fā)出所述校驗信息的應(yīng)用程序是基于所述第二應(yīng)用程序進行逆向修改得到的。
[0060]其中,所述處理單元,還用于為所述第二應(yīng)用程序生成一組公鑰證書和私鑰證書,給所述校驗?zāi)K設(shè)置所述公鑰證書,使所述服務(wù)器保存所述私鑰證書;
[0061]為所述第二應(yīng)用程序分配身份標(biāo)識號碼ID,并給所述校驗?zāi)K設(shè)置所述ID,所述ID與所述私鑰證書相對應(yīng);相應(yīng)的,所述校驗信息還包括加密SHAl校驗值和所述ID,所述加密SHAl校驗值是所述校驗?zāi)K使用所述公鑰證書對所述第二 SHAl校驗值進行加密生成的;
[0062]根據(jù)收到的所述校驗信息中的所述ID找到相對應(yīng)的私鑰證書,并使用所述私鑰證書對所述加密SHAl校驗值進行解碼,得到第二 SHAl校驗值。
[0063]其中,所述處理單元,還用于給所述校驗?zāi)K設(shè)置校驗算法,使所述服務(wù)器保存所述校驗算法;相應(yīng)的,所述校驗信息還包括第二哈希運算消息認(rèn)證碼HMAC,所述第二 HMAC為所述校驗?zāi)K使用所述校驗算法對所述ID和所述加密SHAl校驗值進行校驗得到的;
[0064]使用所述校驗算法對收到的所述校驗信息中的所述ID和所述加密SHAl校驗值進行校驗得到第一 HMAC ;
[0065]將所述第一 HMAC和所述第二 HMAC進行對比,當(dāng)所述第一 HMAC和所述第二 HMAC一致時,執(zhí)行根據(jù)所述ID找到相對應(yīng)的私鑰證書的操作。
[0066]其中,所述處理單元,還用于接收所述第二應(yīng)用程序發(fā)送的校驗信息,其中,所述檢驗信息包括:所述第二應(yīng)用程序的ID、加密SHAl校驗值和HMAC ;其中,所述第二應(yīng)用程序的ID與所述服務(wù)器為所述第一應(yīng)用程序分配的ID相同;所述加密SHAl校驗值為使用所述服務(wù)器預(yù)置入所述第一應(yīng)用程序中的公鑰,對所述第一應(yīng)用程序的SHAl校驗值進行加密后生成的校驗值;所述HMAC為對所述第二應(yīng)用程序的ID和所述加密SHAl校驗值進行校驗后生成的結(jié)果;
[0067]以及用于根據(jù)所述校驗信息,判斷所述第二應(yīng)用程序是否被修改。
[0068]其中,所述處理單元,具體用于使用所述校驗信息中的HMAC判斷所述檢驗信息是否正確;
[0069]在確定正確后,根據(jù)所述校驗信息中的所述ID獲取與所述第一應(yīng)用程序中的公鑰相對應(yīng)的私鑰,使用所述私鑰對所述加密SHAl校驗值進行解密,獲得解密后的SHAl校驗值;
[0070]當(dāng)確定解密后的所述SHAl校驗值與所述服務(wù)器中存儲的所述第一應(yīng)用程序的SHAl校驗值不匹配時,確定所述第二應(yīng)用程序被修改。
[0071]其中,所述處理單元,具體用于以加入JAR庫或SO庫的方式為所述第二應(yīng)用程序設(shè)置校驗?zāi)K,包括:將編寫的校驗?zāi)K生成JAR庫或SO庫;調(diào)用所述JAR庫或SO庫,生成安卓安裝包APK_A ;將所述APK_Ag編譯為Smali_A ;將所述第二應(yīng)用程序反編譯為Smali_B ;分析、提取Smali_A中調(diào)用JAR庫或SO庫的部分,合并入Smali_B中,并進行相應(yīng)的修改;將Smali_B編譯為APK,完成校驗?zāi)K的添加。
[0072]其中,所述處理單元,還用于以加入JAR庫或SO庫的方式為所述第二應(yīng)用程序設(shè)置在線升級功能模塊,所述在線升級功能模塊通過加入、修改軟件字節(jié)碼的方式被所述第二應(yīng)用程序調(diào)用,所述在線升級功能模塊用于連接所述服務(wù)器,對所述JAR庫和/或SO庫進行定期更新。
[0073]由上可知,本發(fā)明實施例的技術(shù)方案包括:服務(wù)器接收客戶端發(fā)來的第一應(yīng)用程序;所述服務(wù)器對所述第一應(yīng)用程序的參數(shù)和/或指令進行修改,得到第二應(yīng)用程序,所述第二應(yīng)用程序能夠正常運行,且當(dāng)使用逆向工具解析所述第二應(yīng)用程序時,所述第二應(yīng)用程序能夠?qū)е滤瞿嫦蚬ぞ邎箦e退出;所述服務(wù)器將所述第二應(yīng)用程序發(fā)給所述客戶端。對第一應(yīng)用程序的參數(shù)和/或指令進行修改得到的第二應(yīng)用程序能夠正常運行,且當(dāng)使用逆向工具解析所述第二應(yīng)用程序時,所述第二應(yīng)用程序能夠?qū)е滤瞿嫦蚬ぞ邎箦e退出。由此,本發(fā)明實施例能夠避免被逆向工具反編譯,從而達到應(yīng)用程序安全防護的目的。
【附圖說明】
[0074]圖1為本發(fā)明提供的一種應(yīng)用程序安全防護方法的另一實施例的實現(xiàn)流程圖;
[0075]圖2為DEX文件結(jié)構(gòu)的示意圖;
[0076]圖3為本發(fā)明提供的一種應(yīng)用程序安全防護方法的又一實施例的實現(xiàn)流程圖;
[0077]圖4為本發(fā)明提供的一種服務(wù)器的實施例的結(jié)構(gòu)示意圖。
【具體實施方式】
[0078]本發(fā)明實施例提供的一種應(yīng)用程序安全防護方法,可以采用以下方式實現(xiàn):通過修改應(yīng)用程序中的加密標(biāo)志位來欺騙逆向工具,但這種安全加固方法容易分析、容易還原,安全性較差,而且應(yīng)用程序被逆向修改也無法追查,可追溯性差。
[0079]本發(fā)明實施例提供的另一種應(yīng)用程序安全防護方法,可以采用以下方式實現(xiàn):將真實的應(yīng)用程序進行加密處理,運行時由殼程序進行解密并啟動,但由于殼程序也會被逆向工具分析,因此安全性較差,此外,這種方法對移動平臺的版本、運行環(huán)境有嚴(yán)格的限制,無法適應(yīng)多種版本的移動平臺,兼容性較差。
[0080]由此,本發(fā)明提供了一種應(yīng)用程序安全防護方法的另一實施例,如圖1所示,所述方法包括:
[0081]步驟101、服務(wù)器接收客戶端發(fā)來的第一應(yīng)用程序。
[0082]其中,所述第一應(yīng)用程序適用于移動平臺。但不限于此,在實際應(yīng)用中,任意其它的適當(dāng)平臺也同樣適用,例如,均使用Android系統(tǒng)作為操作系統(tǒng)的平臺。
[0083]在實際應(yīng)用中,當(dāng)系統(tǒng)平臺為Android系統(tǒng)時,所述第一應(yīng)用程序可以是安卓安裝包(Andro i d Package,APK)應(yīng)用程序,所述APK應(yīng)用程序包括DEX文件,所述APK應(yīng)用程序可以采用Java語音編寫。
[0084]如圖2所示,DEX文件包括以下幾個主要的結(jié)構(gòu)體:字符串(string_ids)、類型(type_ids)、原型(proto_ids)、成員變量(field_ids)、成員函數(shù)(methods_ids)、類(claSS_defS),其中,字符串和類型為兩個基礎(chǔ)的結(jié)構(gòu)體,其余結(jié)構(gòu)體中的信息都以這兩個基礎(chǔ)結(jié)構(gòu)體的索引形式存在,這樣構(gòu)成一個完整的有機體。數(shù)據(jù)(data)結(jié)構(gòu)體中包括了應(yīng)用程序的所有指令,各指令對字符串、類型、原型、類及類的成員變量、成員函數(shù)的操作都是以索引號的形式對應(yīng)到上面的幾個主要結(jié)構(gòu)體的。目前,指令集通常以Dalvik字節(jié)碼形式存在,指令集操作碼長度占8Bit。
[0085]步驟102、所述服務(wù)器對所述第一應(yīng)用程序的參數(shù)和/或指令進行修改,得到第二應(yīng)用程序,所述第二應(yīng)用程序能夠正常運行,且當(dāng)使用逆向工具解析所述第二應(yīng)用程序時,所述第二應(yīng)用程序能夠?qū)е滤瞿嫦蚬ぞ邎箦e退出;
[0086]具體的,所述服務(wù)器對所述第一應(yīng)用程序的參數(shù)和/或指令進行修改,包括:
[0087]所述服務(wù)器將所述第一應(yīng)用程序中的第一參數(shù)修改為非法參數(shù),所述第一參數(shù)是所述第一應(yīng)用程序在運行時不調(diào)用的參數(shù);或者,
[0088]所述服務(wù)器將所述第一應(yīng)用程序中的第一指令修改為非法指令,所述第一指令是所述第一應(yīng)用程序在運行時不調(diào)用的指令;或者,
[0089]所述服務(wù)器在所述第一應(yīng)用程序中加入第二參數(shù),所述第二參數(shù)為非法參數(shù),且所述第二參數(shù)是所述第一應(yīng)用程序在運行時不調(diào)用的參數(shù);或者,
[0090]所述服務(wù)器在所述第一應(yīng)用程序中加入第二指令,所述第二指令為非法指令,且所述第二指令是所述第一應(yīng)用程序在運行時不調(diào)用的指令。
[0091]這里需要說明的是,所述服務(wù)器將所述第一應(yīng)用程序中的第一參數(shù)修改為非法參數(shù)時,可以將所述第一應(yīng)用程序中的合法指令集操作碼后的操作碼參數(shù)修改為非法參數(shù)。其中,所述非法參數(shù)可以是不存在的地址、索引值、無效引用等,當(dāng)逆向工具解析到所述非法參數(shù)時,會因為無法找到所述非法參數(shù)的對應(yīng)位置而報錯退出,因此應(yīng)用程序能夠避免被逆向分析,達到安全防護的目的。相似的,所述非法指令可以包括0xFC、0xFD等,逆向工具解析到所述非法指令時,會報錯并退出。
[0092]例如,對于應(yīng)用程序的一個指令集const-string vl2,“xx”,所述指令集的字節(jié)碼為 IA OC 5C 00,其中,IA對應(yīng)于 const-string,0C對應(yīng)于 vl2,5C 00 對應(yīng)于“xx”,即 5C 00作為參數(shù)指示字符串“xx”的索引值。當(dāng)所述5C 00是所述應(yīng)用程序在運行時不調(diào)用的參數(shù)時,將所述5C 00修改為非法參數(shù),如非法索引值5C FF,逆向工具解析到所述5C FF時,會因為無法找到5C FF的對應(yīng)位置而出現(xiàn)錯誤并退出。相似的,當(dāng)所述IA是所述應(yīng)用程序在運行時不調(diào)用的指令時,將所述IA修改為非法指令,如FC,逆向工具解析到所述非法指令時,會報錯并退出。
[0093]步驟103、所述服務(wù)器將所述第二應(yīng)用程序發(fā)給所述客戶端。
[0094]本實施例中對第一應(yīng)用程序的參數(shù)和/或指令進行修改得到的第二應(yīng)用程序能夠正常運行,且當(dāng)使用逆向工具解析所述第二應(yīng)用程序時,所述第二應(yīng)用程序能夠?qū)е滤瞿嫦蚬ぞ邎箦e退出,由此,本發(fā)明實施例能夠避免被逆向工具反編譯,從而達到應(yīng)用程序安全防護的目的。
[0095]本發(fā)明提供了一種應(yīng)用程序安全防護方法的又一實施例,如圖3所示,所述方法包括:
[0096]步驟301、服務(wù)器接收客戶端發(fā)來的第一應(yīng)用程序。
[0097]本實施例中,設(shè)定所述第一應(yīng)用程序應(yīng)用于移動平臺。
[0098]步驟302、所述服務(wù)器對所述第一應(yīng)用