應(yīng)用程序的校驗(yàn)方法、裝置和終端設(shè)備的制作方法【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種應(yīng)用程序的校驗(yàn)方法、裝置和終端設(shè)備,其中,所述應(yīng)用程序的校驗(yàn)方法包括:終端設(shè)備的操作系統(tǒng)在加載應(yīng)用程序時(shí),獲取應(yīng)用程序中的校驗(yàn)數(shù)據(jù),所述校驗(yàn)數(shù)據(jù)包括摘要表和簽名值,對(duì)所述簽名值進(jìn)行簽名校驗(yàn),通過(guò)所述簽名校驗(yàn)后,繼續(xù)加載所述應(yīng)用程序,當(dāng)運(yùn)行所述應(yīng)用程序的過(guò)程中內(nèi)存觸發(fā)缺頁(yè)中斷時(shí),按頁(yè)加載所述應(yīng)用程序中與缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),并從摘要表中查詢所述缺頁(yè)地址對(duì)應(yīng)的頁(yè)摘要值、以及采用對(duì)應(yīng)的頁(yè)摘要值對(duì)所述缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn)。因此,本發(fā)明保證了運(yùn)行應(yīng)用程序的安全性,還利用缺頁(yè)中斷機(jī)制實(shí)現(xiàn)了只有在應(yīng)用程序的相應(yīng)數(shù)據(jù)真正載入內(nèi)存時(shí)才進(jìn)行校驗(yàn)的“懶模式”,提高了應(yīng)用程序的運(yùn)行效率?!緦?zhuān)利說(shuō)明】應(yīng)用程序的校驗(yàn)方法、裝置和終端設(shè)備【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及通信技術(shù),尤其涉及一種應(yīng)用程序的校驗(yàn)方法、裝置和終端設(shè)備?!?br>背景技術(shù):
】[0002]隨著通信技術(shù)的不斷發(fā)展,嵌入式的終端設(shè)備的應(yīng)用領(lǐng)域越來(lái)越廣。為了保證終端設(shè)備的安全,需要對(duì)終端設(shè)備上即將運(yùn)行的各個(gè)應(yīng)用程序進(jìn)行校驗(yàn),當(dāng)某個(gè)應(yīng)用程序通過(guò)校驗(yàn)后,才可以運(yùn)行該應(yīng)用程序。[0003]其中,很多終端設(shè)備上的操作系統(tǒng)采用的是Linux系統(tǒng),該Linux系統(tǒng)是一種自由和開(kāi)放源碼的類(lèi)Unix操作系統(tǒng),其使用了Linux內(nèi)核,并廣泛應(yīng)用于機(jī)頂盒、手機(jī)、平板電腦等終端設(shè)備中。另外,可執(zhí)行鏈接格式(ExecutableandLinkableFormat,ELF)文件是Linux上應(yīng)用最為廣泛的可執(zhí)行程序格式。該ELF文件由如下幾部分組成:ELF頭表、節(jié)區(qū)頭表、段頭表,以及若干節(jié)區(qū)和段。[0004]現(xiàn)有技術(shù)中,當(dāng)終端設(shè)備上Linux內(nèi)核加載ELF文件時(shí),不會(huì)把ELF文件的全部?jī)?nèi)容一次加載到內(nèi)存,而是將進(jìn)程空間與ELF文件中可加載段做映射。在進(jìn)程運(yùn)行的過(guò)程中,如果所訪問(wèn)到的內(nèi)存沒(méi)有所需要的內(nèi)容時(shí),終端設(shè)備的操作系統(tǒng)則會(huì)發(fā)生缺頁(yè)中斷,以頁(yè)為單位將需要的內(nèi)容讀入內(nèi)存。[0005]但是,上述終端設(shè)備上Linux內(nèi)核加載ELF文件時(shí),沒(méi)有針對(duì)ELF文件的合法性進(jìn)行校驗(yàn),這樣可能造成的后果是終端設(shè)備被注入了被攻擊或者包含惡意功能的應(yīng)用程序,一旦運(yùn)行將會(huì)造成對(duì)終端設(shè)備的損害?!?br/>發(fā)明內(nèi)容】[0006]有鑒于此,本發(fā)明實(shí)施例的目的在于提出一種應(yīng)用程序的校驗(yàn)方法、裝置和終端設(shè)備,能夠保證在終端設(shè)備上所運(yùn)行的應(yīng)用程序的安全性,以及能夠提高應(yīng)用程序的運(yùn)行效率。[0007]第一方面,本發(fā)明實(shí)施例提供了一種應(yīng)用程序的校驗(yàn)方法,所述方法包括:[0008]終端設(shè)備的操作系統(tǒng)在加載應(yīng)用程序時(shí),獲取所述應(yīng)用程序中的校驗(yàn)數(shù)據(jù),所述校驗(yàn)數(shù)據(jù)包括摘要表和簽名值;[0009]終端設(shè)備的操作系統(tǒng)對(duì)所述簽名值進(jìn)行簽名校驗(yàn),通過(guò)所述簽名校驗(yàn)后,繼續(xù)加載所述應(yīng)用程序;[0010]當(dāng)運(yùn)行所述應(yīng)用程序的過(guò)程中內(nèi)存觸發(fā)缺頁(yè)中斷時(shí),終端設(shè)備的操作系統(tǒng)按頁(yè)加載所述應(yīng)用程序中與缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),并從所述摘要表中查詢所述缺頁(yè)地址對(duì)應(yīng)的頁(yè)摘要值、以及采用對(duì)應(yīng)的頁(yè)摘要值對(duì)所述缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn)。[0011]第二方面,本發(fā)明實(shí)施例提供了一種應(yīng)用程序的校驗(yàn)裝置,所述裝置包括:[0012]獲取單元,用于在加載應(yīng)用程序時(shí),獲取所述應(yīng)用程序中的校驗(yàn)數(shù)據(jù),所述校驗(yàn)數(shù)據(jù)包括摘要表和簽名值;[0013]簽名校驗(yàn)單元,用于對(duì)所述簽名值進(jìn)行簽名校驗(yàn),通過(guò)所述簽名校驗(yàn)后,繼續(xù)加載所述應(yīng)用程序;[0014]摘要校驗(yàn)單元,用于當(dāng)運(yùn)行所述應(yīng)用程序的過(guò)程中內(nèi)存觸發(fā)缺頁(yè)中斷時(shí),按頁(yè)加載所述應(yīng)用程序中與缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),并從所述摘要表中查詢所述缺頁(yè)地址對(duì)應(yīng)的頁(yè)摘要值、以及采用對(duì)應(yīng)的頁(yè)摘要值對(duì)所述缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn)。[0015]第三方面,本發(fā)明實(shí)施例提供了一種終端設(shè)備,所述終端設(shè)備包括:本發(fā)明所有實(shí)施例提供的應(yīng)用程序的校驗(yàn)裝置。[0016]本發(fā)明實(shí)施例提供的應(yīng)用程序的校驗(yàn)方法、裝置和終端設(shè)備,通過(guò)在加載應(yīng)用程序時(shí),獲取應(yīng)用程序中的校驗(yàn)數(shù)據(jù),對(duì)所述應(yīng)用程序中的校驗(yàn)數(shù)據(jù)進(jìn)行簽名校驗(yàn),當(dāng)通過(guò)所述簽名校驗(yàn)后,繼續(xù)加載所述應(yīng)用程序,當(dāng)運(yùn)行所述應(yīng)用程序的過(guò)程中內(nèi)存觸發(fā)缺頁(yè)中斷時(shí),按頁(yè)加載所述應(yīng)用程序中與缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),并從所述摘要表中查詢所述缺頁(yè)地址對(duì)應(yīng)的頁(yè)摘要值、以及采用對(duì)應(yīng)的頁(yè)摘要值對(duì)所述缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn),從而保證了所運(yùn)行的應(yīng)用程序的安全性,能夠防止應(yīng)用程序被篡改,并利用缺頁(yè)中斷機(jī)制只對(duì)缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn),實(shí)現(xiàn)了只有在應(yīng)用程序的相應(yīng)數(shù)據(jù)真正載入內(nèi)存時(shí)才進(jìn)行校驗(yàn)的“懶模式”,提高了應(yīng)用程序的運(yùn)行效率?!緦?zhuān)利附圖】【附圖說(shuō)明】[0017]圖1是本發(fā)明第一實(shí)施例提供的應(yīng)用程序的校驗(yàn)方法的流程圖;[0018]圖2是本發(fā)明第二實(shí)施例提供的應(yīng)用程序的校驗(yàn)方法的流程圖;[0019]圖3是本發(fā)明第三實(shí)施例提供的對(duì)應(yīng)用程序進(jìn)行簽名的方法流程圖;[0020]圖4是本發(fā)明第三實(shí)施例提供的對(duì)應(yīng)用程序進(jìn)行簽名前后的文件示意圖;[0021]圖5是本發(fā)明第四實(shí)施例提供的應(yīng)用程序的校驗(yàn)裝置的結(jié)構(gòu)示意圖?!揪唧w實(shí)施方式】[0022]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明具體實(shí)施例作進(jìn)一步的詳細(xì)描述??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部?jī)?nèi)容。[0023]圖1是本發(fā)明第一實(shí)施例提供的應(yīng)用程序的校驗(yàn)方法的流程圖,該應(yīng)用程序的校驗(yàn)方法可以應(yīng)用于終端設(shè)備中。其中,該終端設(shè)備可以為機(jī)頂盒、智能手機(jī)、導(dǎo)航儀等。如圖1所示,所述方法包括:[0024]步驟110、終端設(shè)備的操作系統(tǒng)在加載應(yīng)用程序時(shí),獲取應(yīng)用程序中的校驗(yàn)數(shù)據(jù),所述校驗(yàn)數(shù)據(jù)包括摘要表和簽名值。[0025]具體地,為了保證終端設(shè)備運(yùn)行應(yīng)用程序的安全性,在加載該應(yīng)用程序時(shí),需要先獲取應(yīng)用程序中的校驗(yàn)數(shù)據(jù),并將該檢驗(yàn)數(shù)據(jù)保存在內(nèi)核運(yùn)行空間中,根據(jù)該校驗(yàn)數(shù)據(jù)進(jìn)行校驗(yàn)。另外,應(yīng)用程序中的校驗(yàn)數(shù)據(jù)還可以保存在應(yīng)用程序的校驗(yàn)數(shù)據(jù)包,并從該校驗(yàn)數(shù)據(jù)包該中獲取校驗(yàn)數(shù)據(jù)。[0026]步驟120、終端設(shè)備的操作系統(tǒng)對(duì)簽名值進(jìn)行簽名校驗(yàn),通過(guò)所述簽名校驗(yàn)后,繼續(xù)加載所述應(yīng)用程序。[0027]具體地,該校驗(yàn)數(shù)據(jù)中包括用于簽名校驗(yàn)的數(shù)據(jù)即簽名值,對(duì)該用于簽名校驗(yàn)的數(shù)據(jù)進(jìn)行簽名校驗(yàn),只有通過(guò)簽名校驗(yàn)后才可以繼續(xù)加載并運(yùn)行應(yīng)用程序,否則,停止加載該應(yīng)用程序。其中,加載應(yīng)用程序時(shí),不會(huì)將應(yīng)用程序的全部數(shù)據(jù)一次加載到內(nèi)存,而是將進(jìn)程空間與應(yīng)用程序中的可加載段做映射,等到完成進(jìn)程空間與應(yīng)用程序的映射后,開(kāi)始運(yùn)行應(yīng)用程序。[0028]步驟130、當(dāng)運(yùn)行應(yīng)用程序的過(guò)程中內(nèi)存觸發(fā)缺頁(yè)中斷時(shí),終端設(shè)備的操作系統(tǒng)按頁(yè)加載所述應(yīng)用程序中與缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),并從所述摘要表中查詢所述缺頁(yè)地址對(duì)應(yīng)的頁(yè)摘要值、以及采用對(duì)應(yīng)的頁(yè)摘要值對(duì)所述缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn)。[0029]具體地,應(yīng)用程序開(kāi)始運(yùn)行后,當(dāng)應(yīng)用程序需要訪問(wèn)進(jìn)程空間某個(gè)地址時(shí),操作系統(tǒng)先判斷該地址所屬頁(yè)的內(nèi)容是否已經(jīng)在內(nèi)存中,如果存在,則直接訪問(wèn);如果不存在,則發(fā)生缺頁(yè)中斷來(lái)載入缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),然后對(duì)該缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn),只有通過(guò)摘要校驗(yàn),才可以繼續(xù)運(yùn)行應(yīng)用程序,否則,停止運(yùn)行應(yīng)用程序。[0030]因此,在本發(fā)明實(shí)施例中,通過(guò)獲取應(yīng)用程序中的校驗(yàn)數(shù)據(jù),根據(jù)該校驗(yàn)數(shù)據(jù)進(jìn)行簽名校驗(yàn)和摘要校驗(yàn),從而保證了運(yùn)行應(yīng)用程序的安全性,還利用缺頁(yè)中斷機(jī)制實(shí)現(xiàn)了只有在應(yīng)用程序的相應(yīng)數(shù)據(jù)真正載入內(nèi)存時(shí)才進(jìn)行校驗(yàn)的“懶模式”,提高了應(yīng)用程序的運(yùn)行效率。[0031]圖2是本發(fā)明第二實(shí)施例提供的應(yīng)用程序的校驗(yàn)方法的流程圖。該應(yīng)用程序的校驗(yàn)方法中涉及到的應(yīng)用程序可以為ELF文件,該ELF文件包括ELF源文件和校驗(yàn)數(shù)據(jù)塊。另夕卜,該應(yīng)用程序的校驗(yàn)方法可以應(yīng)用于終端設(shè)備中。其中,該終端設(shè)備可以為機(jī)頂盒、智能手機(jī)、導(dǎo)航儀等。如圖2所示,所述方法包括:[0032]步驟210、終端設(shè)備的操作系統(tǒng)在加載應(yīng)用程序時(shí),從應(yīng)用程序的尾部讀取校驗(yàn)數(shù)據(jù)塊。[0033]步驟220、終端設(shè)備的操作系統(tǒng)從校驗(yàn)數(shù)據(jù)塊中讀取至少一個(gè)摘要包,并從所述摘要包中獲取摘要表,以及所述摘要表對(duì)應(yīng)的段地址、段長(zhǎng)度,所述摘要表包括所述段長(zhǎng)度內(nèi)的所有頁(yè)摘要值。[0034]步驟230、終端設(shè)備的操作系統(tǒng)從校驗(yàn)數(shù)據(jù)塊的尾部讀取簽名包,并從所述簽名包中獲取簽名值,所述簽名值是對(duì)所述摘要包、應(yīng)用程序頭和段頭表進(jìn)行簽名操作所得到的值。[0035]上述方案中,應(yīng)用程序中的校驗(yàn)數(shù)據(jù)塊位于應(yīng)用程序的尾部,并包括簽名包和摘要包,可以從簽名包中獲取簽名值,以及從摘要包中獲取摘要表,所述摘要表和簽名值為校驗(yàn)數(shù)據(jù)。其中,該摘要表中至少包括一個(gè)頁(yè)摘要值,由于將校驗(yàn)數(shù)據(jù)塊位于應(yīng)用程序的尾部,這樣可以實(shí)現(xiàn)對(duì)校驗(yàn)數(shù)據(jù)塊的快速定位。當(dāng)然,也可以將應(yīng)用程序中的校驗(yàn)數(shù)據(jù)塊位于應(yīng)用程序的其他位置,并從該位置提取簽名值和摘要表中的頁(yè)摘要值。[0036]其中,簽名值是用于進(jìn)行簽名校驗(yàn)的數(shù)據(jù),而頁(yè)摘要值是用于進(jìn)行摘要校驗(yàn)的數(shù)據(jù)。該頁(yè)摘要值的數(shù)量是由應(yīng)用程序中的可加載段的內(nèi)容大小所決定的。比如,以頁(yè)為單位,一般一頁(yè)為4KB大小,如果應(yīng)用程序中的一個(gè)可加載段的內(nèi)容大小有10頁(yè),則對(duì)應(yīng)的頁(yè)摘要值有10個(gè)。[0037]步驟240、終端設(shè)備的操作系統(tǒng)從內(nèi)核讀取已預(yù)置的簽名非對(duì)稱公鑰,采用所述簽名非對(duì)稱公鑰對(duì)采用簽名非對(duì)稱私鑰加密的簽名值進(jìn)行簽名校驗(yàn),通過(guò)簽名校驗(yàn)后,繼續(xù)加載所述應(yīng)用程序。其中,簽名非對(duì)稱公鑰可以是預(yù)埋在操作系統(tǒng)內(nèi)部的簽名非對(duì)稱公鑰。[0038]具體地,應(yīng)用程序發(fā)布端對(duì)應(yīng)用程序簽名時(shí),采用簽名非對(duì)稱私鑰加密得到簽名值;終端設(shè)備的操作系統(tǒng)對(duì)簽名值進(jìn)行簽名校驗(yàn)時(shí),采用簽名非對(duì)稱公鑰進(jìn)行簽名校驗(yàn)。其中,簽名非對(duì)稱私鑰和簽名非對(duì)稱公鑰,是應(yīng)用程序發(fā)布端和終端設(shè)備的操作系統(tǒng)預(yù)先約定的一對(duì)秘鑰對(duì),這樣可以提高簽名校驗(yàn)的可靠性。[0039]另外,只有通過(guò)簽名校驗(yàn)后才可以加載并運(yùn)行應(yīng)用程序,否則,停止運(yùn)行該應(yīng)用程序。其中,加載應(yīng)用程序時(shí),不會(huì)將應(yīng)用程序的全部數(shù)據(jù)一次加載到內(nèi)存,而是將進(jìn)程空間與應(yīng)用程序中的可加載段做映射,等到完成進(jìn)程空間與應(yīng)用程序的映射后,才開(kāi)始運(yùn)行應(yīng)用程序。[0040]步驟250、當(dāng)運(yùn)行應(yīng)用程序的過(guò)程中內(nèi)存觸發(fā)缺頁(yè)中斷時(shí),終端設(shè)備的操作系統(tǒng)按頁(yè)加載所述應(yīng)用程序中與缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),并從所述摘要表中查詢所述缺頁(yè)地址對(duì)應(yīng)的頁(yè)摘要值、以及采用對(duì)應(yīng)的頁(yè)摘要值對(duì)所述缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn)。[0041]因此,在本發(fā)明實(shí)施例中,通過(guò)從ELF文件的提取簽名值和頁(yè)摘要值,根據(jù)簽名值和頁(yè)摘要值分別進(jìn)行簽名校驗(yàn)和摘要校驗(yàn),從而保證了運(yùn)行應(yīng)用程序的安全性,還利用缺頁(yè)中斷機(jī)制實(shí)現(xiàn)了只有在應(yīng)用程序的相應(yīng)數(shù)據(jù)真正載入內(nèi)存時(shí)才進(jìn)行校驗(yàn)的“懶模式”,提高了應(yīng)用程序的運(yùn)行效率。[0042]在上述實(shí)施例一和實(shí)施例二所述的方案中,還包括以下過(guò)程:[0043]終端設(shè)備的操作系統(tǒng)讀取應(yīng)用程序中的校驗(yàn)數(shù)據(jù),并加載到內(nèi)存中。[0044]以及,則在應(yīng)用程序退出時(shí),終端設(shè)備的操作系統(tǒng)釋放所述校驗(yàn)數(shù)據(jù)占用的內(nèi)存。[0045]在本發(fā)明實(shí)施例中,當(dāng)終端設(shè)備的操作系統(tǒng)對(duì)應(yīng)用程序進(jìn)行校驗(yàn)時(shí),會(huì)將校驗(yàn)數(shù)據(jù)加載到內(nèi)存中,并在應(yīng)用程序退出時(shí),釋放加載到內(nèi)存的校驗(yàn)數(shù)據(jù),這樣提高了校驗(yàn)的響應(yīng)速度,并不影響實(shí)際運(yùn)行速度。[0046]圖3是本發(fā)明第三實(shí)施例提供的對(duì)應(yīng)用程序進(jìn)行簽名的方法流程圖。該對(duì)應(yīng)用程序進(jìn)行簽名可以應(yīng)用于應(yīng)用程序發(fā)布端中,主要是對(duì)待發(fā)布的應(yīng)用程序進(jìn)行簽名,得到該應(yīng)用程序的校驗(yàn)數(shù)據(jù)塊,并將攜帶有檢驗(yàn)數(shù)據(jù)塊的應(yīng)用程序向終端設(shè)備進(jìn)行發(fā)布。如圖3所示,所述方法包括:[0047]步驟310、應(yīng)用程序發(fā)布端對(duì)應(yīng)用程序的ELF源文件進(jìn)行解析,獲得屬性為可加載的至少一個(gè)段。[0048]具體地,在應(yīng)用程序發(fā)布前,由應(yīng)用程序發(fā)布端,比如:操作系統(tǒng)提供商,對(duì)應(yīng)用程序的安全性和合規(guī)性進(jìn)行審查,然后使用應(yīng)用簽名工具對(duì)應(yīng)用進(jìn)行簽名操作。如圖4所示,簽名以前的文件稱為ELF源文件41,簽名以后的文件稱為ELF文件42。應(yīng)用程序發(fā)布端對(duì)ELF源文件41進(jìn)行解析,獲得屬性為可加載的段1、段2等。[0049]其中,ELF源文件是Linux上應(yīng)用程序最為廣泛的可執(zhí)行程序格式。該ELF源文件具體包括:ELF頭表、節(jié)區(qū)頭表、段頭表,以及若干節(jié)區(qū)(Section)和段(Segment)。其中,ELF頭用來(lái)描述ELF文件的基本信息,節(jié)區(qū)頭表描述節(jié)區(qū)基本信息和各個(gè)節(jié)區(qū)在文件中的偏移位置,段頭表描述段基本信息和各個(gè)段在文件中的偏移位置。節(jié)區(qū)和段是對(duì)ELF文件中代碼和數(shù)據(jù)不同視角的描述,節(jié)區(qū)描述了程序和數(shù)據(jù)在鏈接時(shí)結(jié)構(gòu),而段描述了代碼和數(shù)據(jù)在加載時(shí)的結(jié)構(gòu)。[0050]當(dāng)終端設(shè)備的操作系統(tǒng)在加載應(yīng)用程序時(shí)需要用到ELF頭表、段頭表以及屬性為“可加載”的段。因此,在對(duì)該應(yīng)用程序進(jìn)行簽名時(shí),以頁(yè)為單位(一般每頁(yè)為4KB大小)對(duì)屬性為“可加載”(PT_LOAD)的段計(jì)算頁(yè)摘要值。[0051]步驟320、應(yīng)用程序發(fā)布端對(duì)屬性為可加載的段進(jìn)行分頁(yè),并計(jì)算每頁(yè)的頁(yè)摘要值,將各頁(yè)摘要值組成摘要表、將所述摘要表、以及所述摘要表對(duì)應(yīng)的段地址、段長(zhǎng)度添加到摘要包中。其中,分頁(yè)的標(biāo)準(zhǔn)是以頁(yè)為單位(一般為4KB大小)。[0052]具體地,在對(duì)該應(yīng)用程序進(jìn)行簽名時(shí),以頁(yè)為單位對(duì)屬性為“可加載”(PT_L0AD)的段計(jì)算頁(yè)摘要值,并將該段的所有頁(yè)摘要值組成摘要表,并添加到與該段對(duì)應(yīng)的摘要包中。t匕如,圖4中,段I包括頁(yè)1、頁(yè)2、頁(yè)3等,計(jì)算每頁(yè)的頁(yè)摘要值,并將段I的所有頁(yè)摘要值組成摘要表,并添加到摘要包I中;同時(shí),段2也包括頁(yè)1、頁(yè)2、頁(yè)3等,計(jì)算每頁(yè)的頁(yè)摘要值,并將段2的所有頁(yè)摘要值組成摘要表,并添加到摘要包2中。[0053]步驟330、應(yīng)用程序發(fā)布端使用已預(yù)置的簽名非對(duì)稱私鑰對(duì)摘要包、ELF源文件的ELF頭表、以及ELF源文件的段頭表進(jìn)行簽名,得到簽名值,并將所述簽名值添加到簽名包中。[0054]具體地,將計(jì)算得到摘要表,再附上ELF源文件的ELF頭和段頭表,使用簽名非對(duì)稱私鑰進(jìn)行簽名,得到簽名值。[0055]步驟340、應(yīng)用程序發(fā)布端將摘要包和簽名包組成校驗(yàn)數(shù)據(jù)塊,并保存在ELF源文件的尾部。[0056]具體地,應(yīng)用程序發(fā)布端將摘要包和簽名包組成校驗(yàn)數(shù)據(jù)塊,并保存在ELF源文件的尾部,得到攜帶有校驗(yàn)數(shù)據(jù)塊的ELF文件42,其中,摘要包中的頁(yè)摘要值和簽名包中的簽名值為校驗(yàn)數(shù)據(jù)。[0057]上述校驗(yàn)數(shù)據(jù)塊可以被保存在ELF文件的尾部,如圖4所示。當(dāng)然,也可以被保存在ELF源文件的其他位置,但是,一般情況下是保存在其尾部,這樣可以快速定位校驗(yàn)數(shù)據(jù)塊,而不影響ELF源文件的內(nèi)容排布。[0058]其中,ELF文件的校驗(yàn)數(shù)據(jù)為自定義數(shù)據(jù),并將計(jì)算得到的自定義數(shù)據(jù)附加在ELF文件后,形成自定義數(shù)據(jù)塊。該自定義數(shù)據(jù)塊直接與ELF文件的源文件合并在一起,并且該自定義數(shù)據(jù)塊通過(guò)“魔數(shù)”(Magic)來(lái)標(biāo)記,魔數(shù)的值為:0x4E535456(大寫(xiě)字母NSTV的ASCII碼值);魔數(shù)之后有4字節(jié)的自定義數(shù)據(jù)塊長(zhǎng)度,標(biāo)記自定義數(shù)據(jù)塊有效負(fù)載長(zhǎng)度,如表1所示。[0059]表1[0060]ELF源文件源文件自定義自定義數(shù)據(jù)自定義數(shù)據(jù)源文件魔數(shù)值長(zhǎng)度數(shù)據(jù)塊塊魔數(shù)值塊長(zhǎng)度[0061]上述自定義數(shù)據(jù)塊也稱為校驗(yàn)數(shù)據(jù)塊,該自定義數(shù)據(jù)塊由一個(gè)個(gè)校驗(yàn)數(shù)據(jù)包(packet)組成,每個(gè)數(shù)據(jù)包包含一個(gè)包頭和緊隨其后的包數(shù)據(jù)。目前,自定義數(shù)據(jù)塊中主要有兩種包:摘要包和簽名包。該摘要包可以記錄ELF源文件中每一個(gè)類(lèi)型為PT_L0AD的段的按頁(yè)摘要信息。這些信息包括段的起始虛擬地址,段在ELF源文件中的大小以及段在內(nèi)存中的按頁(yè)摘要值。簽名包可以記錄對(duì)ELF頭、段頭表以及屬性為可加載(PT_L0AD)的段(Segment)這三塊數(shù)據(jù)的簽名。[0062]每個(gè)數(shù)據(jù)包的包頭包含一個(gè)“標(biāo)簽”,以及一個(gè)長(zhǎng)度。其中,包頭表明該包的類(lèi)型,長(zhǎng)度表明其后的數(shù)據(jù)長(zhǎng)度。該包頭格式如下,如表2。[0063]表2[0064]【權(quán)利要求】1.一種應(yīng)用程序的校驗(yàn)方法,其特征在于,所述方法包括:終端設(shè)備的操作系統(tǒng)在加載應(yīng)用程序時(shí),獲取所述應(yīng)用程序中的校驗(yàn)數(shù)據(jù),所述校驗(yàn)數(shù)據(jù)包括摘要表和簽名值;終端設(shè)備的操作系統(tǒng)對(duì)所述簽名值進(jìn)行簽名校驗(yàn),通過(guò)所述簽名校驗(yàn)后,繼續(xù)加載所述應(yīng)用程序;當(dāng)運(yùn)行所述應(yīng)用程序的過(guò)程中內(nèi)存觸發(fā)缺頁(yè)中斷時(shí),終端設(shè)備的操作系統(tǒng)按頁(yè)加載所述應(yīng)用程序中與缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),并從所述摘要表中查詢所述缺頁(yè)地址對(duì)應(yīng)的頁(yè)摘要值、以及采用對(duì)應(yīng)的頁(yè)摘要值對(duì)所述缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn)。2.根據(jù)權(quán)利要求1所述的應(yīng)用程序的校驗(yàn)方法,其特征在于,所述獲取所訴應(yīng)用程序中的校驗(yàn)數(shù)據(jù)具體包括:終端設(shè)備的操作系統(tǒng)從應(yīng)用程序的尾部讀取校驗(yàn)數(shù)據(jù)塊;從所述校驗(yàn)數(shù)據(jù)塊中讀取至少一個(gè)摘要包,并從所述摘要包中獲取摘要表,以及所述摘要表對(duì)應(yīng)的段地址、段長(zhǎng)度,所述摘要表包括所述段長(zhǎng)度內(nèi)的所有頁(yè)摘要值;從所述校驗(yàn)數(shù)據(jù)塊的尾部讀取簽名包,并從所述簽名包中獲取簽名值,所述簽名值是對(duì)所述摘要包、應(yīng)用程序頭和段頭表進(jìn)行簽名操作所得到的值。3.根據(jù)權(quán)利要求2所述的應(yīng)用程序的校驗(yàn)方法,其特征在于,所述應(yīng)用程序?yàn)榭蓤?zhí)行鏈接格式ELF文件,所述ELF文件包括ELF源文件和校驗(yàn)數(shù)據(jù)塊。4.根據(jù)權(quán)利要求1所述的應(yīng)用程序的校驗(yàn)方法,其特征在于,所述對(duì)所述簽名值進(jìn)行簽名校驗(yàn)具體包括:終端設(shè)備的操作系統(tǒng)從內(nèi)核讀取已預(yù)置的簽名非對(duì)稱公鑰,采用所述簽名非對(duì)稱公鑰對(duì)采用簽名非對(duì)稱私鑰加密的簽名值進(jìn)行簽名校驗(yàn)。5.根據(jù)權(quán)利要求1所述的應(yīng)用程序的校驗(yàn)方法,其特征在于:終端設(shè)備的操作系統(tǒng)獲取應(yīng)用程序中的校驗(yàn)數(shù)據(jù)具體包括:終端設(shè)備的操作系統(tǒng)讀取應(yīng)用程序中的校驗(yàn)數(shù)據(jù),并加載到內(nèi)存中;則在所述應(yīng)用程序退出時(shí),終端設(shè)備的操作系統(tǒng)釋放所述校驗(yàn)數(shù)據(jù)占用的內(nèi)存。6.根據(jù)權(quán)利要求1-4任一所述的應(yīng)用程序的校驗(yàn)方法,其特征在于,所述應(yīng)用程序采用ELF文件,所述方法還包括:應(yīng)用程序發(fā)布端對(duì)所述應(yīng)用程序的ELF源文件進(jìn)行解析,獲得屬性為可加載的至少一個(gè)段;應(yīng)用程序發(fā)布端對(duì)所述屬性為可加載的段進(jìn)行分頁(yè),并計(jì)算每頁(yè)的頁(yè)摘要值,將各頁(yè)摘要值組成摘要表、將所述摘要表、以及所述摘要表對(duì)應(yīng)的段地址、段長(zhǎng)度添加到摘要包中;應(yīng)用程序發(fā)布端使用已預(yù)置的簽名非對(duì)稱私鑰對(duì)所述摘要包、所述ELF源文件的ELF頭表、以及所述ELF源文件的段頭表進(jìn)行簽名,得到簽名值,并將所述簽名值添加到簽名包中;應(yīng)用程序發(fā)布端將所述摘要包和所述簽名包組成校驗(yàn)數(shù)據(jù)塊,并保存在所述應(yīng)用程序的尾部;應(yīng)用程序發(fā)布端將所述應(yīng)用程序向終端設(shè)備發(fā)布。7.一種應(yīng)用程序的校驗(yàn)裝置,其特征在于,所述裝置包括:獲取單元,用于在加載應(yīng)用程序時(shí),獲取所述應(yīng)用程序中的校驗(yàn)數(shù)據(jù),所述校驗(yàn)數(shù)據(jù)包括摘要表和簽名值;簽名校驗(yàn)單元,用于對(duì)所述簽名值進(jìn)行簽名校驗(yàn),通過(guò)所述簽名校驗(yàn)后,繼續(xù)加載所述應(yīng)用程序;摘要校驗(yàn)單元,用于當(dāng)運(yùn)行所述應(yīng)用程序的過(guò)程中內(nèi)存觸發(fā)缺頁(yè)中斷時(shí),按頁(yè)加載所述應(yīng)用程序中與缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù),并從所述摘要表中查詢所述缺頁(yè)地址對(duì)應(yīng)的頁(yè)摘要值、以及采用對(duì)應(yīng)的頁(yè)摘要值對(duì)所述缺頁(yè)地址對(duì)應(yīng)的數(shù)據(jù)進(jìn)行摘要校驗(yàn)。8.根據(jù)權(quán)利要求7所述的應(yīng)用程序的校驗(yàn)裝置,其特征在于,所述獲取單元還具體用于從所述校驗(yàn)數(shù)據(jù)塊中讀取至少一個(gè)摘要包,并從所述摘要包中獲取摘要表,以及所述摘要表對(duì)應(yīng)的段地址、段長(zhǎng)度,所述摘要表包括所述段長(zhǎng)度內(nèi)的所有頁(yè)摘要值;以及,從所述校驗(yàn)數(shù)據(jù)塊的尾部讀取簽名包,并從所述簽名包中獲取簽名值,所述簽名值是對(duì)所述摘要包、應(yīng)用程序頭和段頭表進(jìn)行簽名操作所得到的值。9.根據(jù)權(quán)利要求7所述的應(yīng)用程序的校驗(yàn)裝置,其特征在于,所述簽名校驗(yàn)單元具體用于從內(nèi)核讀取已預(yù)置的簽名非對(duì)稱公鑰,采用所述簽名非對(duì)稱公鑰對(duì)采用簽名非對(duì)稱私鑰加密的簽名值進(jìn)行簽名校驗(yàn)。10.一種終端設(shè)備,其特征在于,所述終端設(shè)備包括:權(quán)利要求7-9任一所述的應(yīng)用程序的校驗(yàn)裝置。【文檔編號(hào)】G06F21/56GK103810421SQ201410056744【公開(kāi)日】2014年5月21日申請(qǐng)日期:2014年2月19日優(yōu)先權(quán)日:2014年2月19日【發(fā)明者】汪海波,王天星,王文軍,李偉東,李紅艷申請(qǐng)人:北京視博數(shù)字電視科技有限公司