程序文件校驗(yàn)方法及裝置、服務(wù)器和終端的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及文件檢測技術(shù)領(lǐng)域,特別是涉及程序文件校驗(yàn)方法及裝置、服務(wù)器和終端。
【背景技術(shù)】
[0002]由于應(yīng)用于某些操作系統(tǒng)的應(yīng)用軟件采用通用的編碼語言,使得作為應(yīng)用軟件的載體的應(yīng)用程序包中的某些文件很容易被攻擊者反編譯、修改,并重新打包發(fā)布,這樣使得盜版軟件橫行,例如:適用于安卓系統(tǒng)的應(yīng)用軟件主要采用Java語言編寫,使得作為這類應(yīng)用軟件的載體的APK (Android Package,安卓應(yīng)用程序包)很容被攻擊者反編譯、修改,并重新打包發(fā)布。
[0003]而為了防止應(yīng)用程序包的二次打包,需要進(jìn)行應(yīng)用程序包中的某些文件的完整性校驗(yàn),即是否被修改過的校驗(yàn)。現(xiàn)有的程序文件校驗(yàn)方法為:在應(yīng)用程序包中的某些文件中內(nèi)置有一段代碼,該段代碼能夠在應(yīng)用程序包加載過程中校驗(yàn)這些文件的簽名,如果簽名正確,表明該應(yīng)用程序包中的這些文件完整,則繼續(xù)運(yùn)行,否則退出程序。其中,所述的簽名為對應(yīng)用程序包中的這些文件的文件內(nèi)容計(jì)算出的哈希值。
[0004]但是,由于現(xiàn)有的程序文件校驗(yàn)通過在本地執(zhí)行代碼,這樣使得攻擊者可以看到相關(guān)代碼,并通過各種方式阻止代碼的有效運(yùn)行,這樣導(dǎo)致完整性校驗(yàn)的準(zhǔn)確率較低,其中,所述的阻止代碼的有效運(yùn)行具體指:校驗(yàn)結(jié)果均為簽名正確,或者,跳過整個(gè)校驗(yàn)過程。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例的目的在于提供程序文件校驗(yàn)方法及裝置、服務(wù)器和終端,以提高校驗(yàn)程序文件的完整性的準(zhǔn)確率。具體技術(shù)方案如下:
[0006]第一方面,本發(fā)明實(shí)施例提供了一種程序文件校驗(yàn)方法,應(yīng)用于服務(wù)器,其中,所述服務(wù)器為:用于為運(yùn)行在終端內(nèi)的承載于應(yīng)用程序包的應(yīng)用軟件提供網(wǎng)絡(luò)服務(wù)的服務(wù)器;所述方法包括:
[0007]在與所述終端建立通信連接后,獲得所述應(yīng)用程序包的版本號;
[0008]獲得針對于所述應(yīng)用程序包的隨機(jī)數(shù);
[0009]根據(jù)所述隨機(jī)數(shù)和服務(wù)器自身預(yù)先存儲的具有所述版本號的應(yīng)用程序包中的預(yù)設(shè)待校驗(yàn)文件的文件內(nèi)容,并利用預(yù)定哈希算法,生成針對于所述預(yù)設(shè)待檢驗(yàn)文件的第一哈希值;
[0010]將所述隨機(jī)數(shù)發(fā)送給所述終端,以使得所述終端在接收到所述隨機(jī)數(shù)后,根據(jù)所述隨機(jī)數(shù)和所述終端本地的所述應(yīng)用程序包中的所述預(yù)設(shè)待檢驗(yàn)文件的文件內(nèi)容,并利用所述預(yù)定哈希算法,生成針對于所述預(yù)設(shè)待檢驗(yàn)文件的第二哈希值;
[0011]獲得關(guān)于所述終端所生成的所述第二哈希值的相關(guān)信息;
[0012]根據(jù)關(guān)于所述第二哈希值的相關(guān)信息和關(guān)于所述第一哈希值的相關(guān)信息,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件的完整性校驗(yàn)結(jié)果。
[0013]可選的,所述獲得關(guān)于所述終端所生成的所述第二哈希值的相關(guān)信息,包括:
[0014]向所述終端請求獲得所述終端所生成的所述第二哈希值;
[0015]或者,
[0016]接收所述終端在生成所述第二哈希值后所上報(bào)的所述第二哈希值;
[0017]所述根據(jù)關(guān)于所述第二哈希值的相關(guān)信息和關(guān)于所述第一哈希值的相關(guān)信息,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件的完整性校驗(yàn)結(jié)果,包括:
[0018]判斷所獲得的所述第二哈希值和所述第一哈希值是否相同,如果相同,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件完整;否則,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件不完整。
[0019]可選的,所述獲得關(guān)于所述終端所生成的所述第二哈希值的相關(guān)信息,包括:
[0020]依次向所述終端請求獲得所述第二哈希值的多個(gè)與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值;
[0021]所述根據(jù)關(guān)于所述第二哈希值的相關(guān)信息和關(guān)于所述第一哈希值的相關(guān)信息,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件的完整性校驗(yàn)結(jié)果,包括:
[0022]依次判斷所述第二哈希值的多個(gè)與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值和所述第一哈希值的與相應(yīng)預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值是否相同,如果判斷結(jié)果均為是,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件完整;否則,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件不完整。
[0023]可選的,所述與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值,包括:
[0024]預(yù)定數(shù)據(jù)位上的數(shù)值;
[0025]或者,
[0026]對至少兩個(gè)預(yù)定數(shù)據(jù)位上的數(shù)值進(jìn)行數(shù)學(xué)運(yùn)算所得的數(shù)值。
[0027]可選的,在確定出所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件不完整性時(shí),所述方法還包括:
[0028]斷開與所述終端之間的通信連接。
[0029]可選的,在確定出所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件不完整性時(shí),所述方法還包括:
[0030]向終端推送提示消息,其中,所述提示消息用于提示所述預(yù)設(shè)待校驗(yàn)文件不完整;
[0031]或者,
[0032]向終端推送提示消息以及下載鏈接地址,其中,所述提示消息用于提示所述預(yù)設(shè)待校驗(yàn)文件不完整,所述下載鏈接地址為所述應(yīng)用程序包的下載地址。
[0033]第二方面,本發(fā)明實(shí)施例提供了一種程序文件校驗(yàn)方法,應(yīng)用于終端,所述終端為:用于運(yùn)行承載于應(yīng)用程序包的應(yīng)用軟件的終端;所述方法包括:
[0034]在與用于為所述應(yīng)用軟件提供網(wǎng)絡(luò)服務(wù)的服務(wù)器建立通信連接后,接收所述服務(wù)器發(fā)送的針對于所述應(yīng)用程序包的隨機(jī)數(shù),其中,所述隨機(jī)數(shù)為:所述服務(wù)器在與所述終端建立通信連接后獲得并發(fā)送的;
[0035]根據(jù)所述隨機(jī)數(shù)和所述終端本地的所述應(yīng)用程序包中的預(yù)設(shè)待校驗(yàn)文件的文件內(nèi)容,并利用預(yù)定哈希算法,生成針對于所述預(yù)設(shè)待校驗(yàn)文件的第二哈希值;
[0036]向所述服務(wù)器發(fā)送所述第二哈希值的相關(guān)信息,以使得所述服務(wù)器獲得關(guān)于所述第二哈希值的相關(guān)信息后,根據(jù)關(guān)于所述第二哈希值的相關(guān)信息和關(guān)于第一哈希值的相關(guān)信息,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件的完整性校驗(yàn)結(jié)果,其中,所述第一哈希值為:所述服務(wù)器根據(jù)所述隨機(jī)數(shù)和自身預(yù)先存儲的、具有所述終端內(nèi)的所述應(yīng)用程序包的版本號的應(yīng)用程序包中的預(yù)設(shè)待校驗(yàn)文件的文件內(nèi)容,并利用所述預(yù)定哈希算法生成的。
[0037]可選的,所述向所述服務(wù)器發(fā)送所述第二哈希值的相關(guān)信息,包括:
[0038]在接收到所述服務(wù)器發(fā)送的關(guān)于所述第二哈希值的請求后,向所述服務(wù)器反饋所述第二哈希值;
[0039]或者,
[0040]在生成所述第二哈希值后,向所述服務(wù)器上報(bào)所述第二哈希值。
[0041]可選的,所述向所述服務(wù)器發(fā)送所述第二哈希值的相關(guān)信息,包括:
[0042]依次接收服務(wù)器發(fā)送的關(guān)于所述第二哈希值的多個(gè)與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值的請求;
[0043]在接收到服務(wù)器發(fā)送的關(guān)于所述第二哈希值的每一個(gè)與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值的請求后,向所述服務(wù)器反饋關(guān)于所述第二哈希值的相應(yīng)與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值。
[0044]可選的,所述與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值,包括:
[0045]預(yù)定數(shù)據(jù)位上的數(shù)值;
[0046]或者,
[0047]對至少兩個(gè)預(yù)定數(shù)據(jù)位上的數(shù)值進(jìn)行數(shù)學(xué)運(yùn)算所得的數(shù)值。
[0048]可選的,本發(fā)明實(shí)施例提供的一種程序文件校驗(yàn)方法,還包括:
[0049]接收所述服務(wù)器推送的提示消息,其中,所述提示消息用于提示所述預(yù)設(shè)待校驗(yàn)文件不完整;
[0050]或者,
[0051]接收服務(wù)器推送的提示消息以及下載鏈接地址,其中,所述提示消息用于提示所述預(yù)設(shè)待校驗(yàn)文件不完整,所述下載鏈接地址為所述應(yīng)用程序包的下載地址。
[0052]第三方面,本發(fā)明實(shí)施例提供了一種程序文件校驗(yàn)裝置,應(yīng)用于服務(wù)器,其中,所述服務(wù)器為:用于為運(yùn)行在終端內(nèi)的承載于應(yīng)用程序包的應(yīng)用軟件提供網(wǎng)絡(luò)服務(wù)的服務(wù)器;所述裝置包括:
[0053]版本號獲得模塊,用于在與所述終端建立通信連接后,獲得所述應(yīng)用程序包的版本號;
[0054]隨機(jī)數(shù)獲得模塊,用于獲得針對于所述應(yīng)用程序包的隨機(jī)數(shù);
[0055]第一哈希值生成模塊,用于根據(jù)所述隨機(jī)數(shù)和服務(wù)器自身預(yù)先存儲的具有所述版本號的應(yīng)用程序包中的預(yù)設(shè)待校驗(yàn)文件的文件內(nèi)容,并利用預(yù)定哈希算法,生成針對于所述預(yù)設(shè)待檢驗(yàn)文件的第一哈希值;
[0056]隨機(jī)數(shù)發(fā)送模塊,用于將所述隨機(jī)數(shù)發(fā)送給所述終端,以使得所述終端在接收到所述隨機(jī)數(shù)后,根據(jù)所述隨機(jī)數(shù)和所述終端本地的所述應(yīng)用程序包中的所述預(yù)設(shè)待檢驗(yàn)文件的文件內(nèi)容,并利用所述預(yù)定哈希算法,生成針對于所述預(yù)設(shè)待檢驗(yàn)文件的第二哈希值;
[0057]第二哈希值信息獲得模塊,用于獲得關(guān)于所述終端所生成的所述第二哈希值的相關(guān)信息;
[0058]完整性校驗(yàn)?zāi)K,用于根據(jù)關(guān)于所述第二哈希值的相關(guān)信息和關(guān)于所述第一哈希值的相關(guān)信息,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件的完整性校驗(yàn)結(jié)果。
[0059]可選的,所述第二哈希值信息獲得模塊,包括:
[0060]第一信息獲得單元,用于向所述終端請求獲得所述終端所生成的所述第二哈希值;
[0061]或者,
[0062]第二信息獲得單元,用于接收所述終端在生成所述第二哈希值后所上報(bào)的所述第二哈希值;
[0063]所述完整性校驗(yàn)?zāi)K,包括:
[0064]第一完整性校驗(yàn)單元,用于判斷所獲得的所述第二哈希值和所述第一哈希值是否相同,如果相同,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件完整;否則,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件不完整。
[0065]可選的,所述第二哈希值信息獲得模塊,包括:
[0066]第三信息獲得單元,用于依次向所述終端請求獲得所述第二哈希值的多個(gè)與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值;
[0067]所述完整性校驗(yàn)?zāi)K,包括:
[0068]第二完整性校驗(yàn)單元,用于依次判斷所述第二哈希值的多個(gè)與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值和所述第一哈希值的與相應(yīng)預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值是否相同,如果判斷結(jié)果均為是,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件完整;否則,確定所述終端內(nèi)的所述預(yù)設(shè)待校驗(yàn)文件不完整。
[0069]可選的,所述與預(yù)定數(shù)據(jù)位相關(guān)的數(shù)值,包括:
[0070]預(yù)定數(shù)據(jù)位上的數(shù)值;
[0071]或者,
[0072]對至少兩個(gè)預(yù)定數(shù)據(jù)位上的數(shù)