專利名稱:一種程序合法性驗(yàn)證方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及程序驗(yàn)證,尤其涉及一種程序合法性驗(yàn)證方法和系統(tǒng)。
背景技術(shù):
在很多計(jì)算機(jī)客戶端應(yīng)用軟件系統(tǒng)中,都會有一些限制性條件,不允許隨便用戶更改軟件的配置文件,不允許用戶隨便刪除文件,否則將會導(dǎo)致軟件無法運(yùn)行或者獲取的配置數(shù)據(jù)不正確,如果涉及到比較機(jī)密的數(shù)據(jù),更有可能導(dǎo)致軟件開發(fā)商的經(jīng)濟(jì)損失。為了解決這個(gè)問題,需要對程序合法性進(jìn)行驗(yàn)證,只有通過驗(yàn)證的程序才允許修改配置文件或者刪除文件。在程序合法性驗(yàn)證的領(lǐng)域中,目前主要有兩種方法來驗(yàn)證程序合法性。一是通過代碼簽名方式,此技術(shù)用于驗(yàn)證程序是否屬于信任的機(jī)構(gòu)頒發(fā),在驗(yàn)證時(shí),如果發(fā)現(xiàn)是信任機(jī)構(gòu)頒發(fā)的證書簽名,則認(rèn)為是合法的程序;二是通過文件MD5值方式,此方式用于殺毒軟件信任白名單和軟件管家中的程序分類,該方法需要一個(gè)軟件的文件MD5值特征庫。在計(jì)算機(jī)客戶端應(yīng)用軟件系統(tǒng)中,由于需要進(jìn)行合法性驗(yàn)證的程序數(shù)量比較多, 且需要實(shí)時(shí)響應(yīng)用戶運(yùn)行程序的文件操作控制,如果采用現(xiàn)有的代碼簽名和MD5值驗(yàn)證方法,將嚴(yán)重影響操作系統(tǒng)的運(yùn)行速度,進(jìn)而影響用戶使用體驗(yàn)。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的上述運(yùn)行速度慢從而影響用戶使用體驗(yàn)的缺陷,提供一種提高用戶使用體驗(yàn)的程序合法性驗(yàn)證方法。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是構(gòu)造一種程序合法性驗(yàn)證方法,包括
A.獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知;
B.按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值;
C.將所計(jì)算的代碼段校驗(yàn)值與預(yù)先存儲在程序的可執(zhí)行性文件的PE頭部中的代碼段校驗(yàn)值進(jìn)行比較,并存儲比較結(jié)果,存儲在程序的可執(zhí)行性文件PE頭部中的代碼段校驗(yàn)值是按照所述算法計(jì)算而得到的;
D.在程序的讀寫操作中,判斷是否存儲有當(dāng)前程序的代碼段校驗(yàn)值的比較結(jié)果,若是, 則當(dāng)前程序?yàn)楹戏ǔ绦颍蝗舴?,則當(dāng)前程序?yàn)榉欠ǔ绦?。在本發(fā)明所述的程序合法性驗(yàn)證方法中,在判斷當(dāng)前程序?yàn)楹戏ǔ绦蚝螅龊戏ㄐ则?yàn)證方法還包括
設(shè)置當(dāng)前程序的目錄;
獲取當(dāng)前程序的可執(zhí)行文件的路徑。在本發(fā)明所述的程序合法性驗(yàn)證方法中,所述預(yù)先確定的算法為下列中的其中一個(gè)奇偶校驗(yàn)、CRC校驗(yàn)、異或校驗(yàn)、程序的可執(zhí)行性文件的代碼段的關(guān)鍵部分的信息摘要算法5。
在本發(fā)明所述的程序合法性驗(yàn)證方法中,所述比較結(jié)果以下列中的其中一種方式來存儲鏈表、排序數(shù)組、哈希表。本發(fā)明還構(gòu)造一種程序合法性驗(yàn)證系統(tǒng),包括
獲取單元,用于獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知; 計(jì)算單元,用于按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值; 比較單元,用于將所計(jì)算的代碼段校驗(yàn)值與預(yù)先存儲在程序的可執(zhí)行性文件的PE頭部中的代碼段校驗(yàn)值進(jìn)行比較,并存儲比較結(jié)果,存儲在程序的可執(zhí)行性文件PE頭部中的代碼段校驗(yàn)值是按照所述算法計(jì)算而得到的;
判斷單元,用于在程序的讀寫操作中,判斷是否存儲有當(dāng)前程序的代碼段校驗(yàn)值的比較結(jié)果,若是,當(dāng)前程序?yàn)楹戏ǔ绦颍蝗舴?,則當(dāng)前程序?yàn)榉欠ǔ绦颉T诒景l(fā)明所述的程序合法性驗(yàn)證系統(tǒng)中,所述系統(tǒng)還包括
目錄設(shè)置單元,用于在判斷當(dāng)前程序?yàn)楹戏ǔ绦驎r(shí)設(shè)置當(dāng)前程序的目錄;
路徑獲取單元,用于在判斷當(dāng)前程序?yàn)楹戏ǔ绦驎r(shí)獲取當(dāng)前程序的可執(zhí)行文件的路徑。在本發(fā)明所述的程序合法性驗(yàn)證系統(tǒng)中,所述預(yù)先確定的算法為下列中的其中一個(gè)奇偶校驗(yàn)、CRC校驗(yàn)、異或校驗(yàn)、程序的可執(zhí)行性文件的代碼段的關(guān)鍵部分的信息摘要算法5。在本發(fā)明所述的程序合法性驗(yàn)證系統(tǒng)中,所述比較結(jié)果以下列中的其中一種方式來存儲鏈表、排序數(shù)組、哈希表。實(shí)施本發(fā)明的技術(shù)方案,即使需要進(jìn)行合法性驗(yàn)證的程序數(shù)量比較多,且需要實(shí)時(shí)響應(yīng)用戶運(yùn)行程序的文件操作控制,也不會嚴(yán)重影響操作系統(tǒng)的運(yùn)行速度,大大提高了用戶使用體驗(yàn)。
下面將結(jié)合附圖及實(shí)施例對本發(fā)明作進(jìn)一步說明,附圖中 圖1是本發(fā)明程序合法性驗(yàn)證方法實(shí)施例一的流程圖2是本發(fā)明程序合法性驗(yàn)證方法實(shí)施例二的流程圖; 圖3是本發(fā)明程序合法性驗(yàn)證系統(tǒng)實(shí)施例一的邏輯結(jié)構(gòu)圖; 圖4是本發(fā)明程序合法性驗(yàn)證系統(tǒng)實(shí)施例二的邏輯結(jié)構(gòu)圖。
具體實(shí)施例方式如圖1所示,在本發(fā)明程序合法性驗(yàn)證方法實(shí)施例一的流程圖中,該驗(yàn)證方法包括以下步驟
S100.獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知,例如,在Windows 操作系統(tǒng)中,利用Windows系統(tǒng)的應(yīng)用層或驅(qū)動(dòng)層的Hook編程技術(shù)來獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知;
S200.按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值; S300.將所計(jì)算的代碼段校驗(yàn)值與預(yù)先存儲在程序的可執(zhí)行性文件的PE頭部中的代碼段校驗(yàn)值進(jìn)行比較,并存儲比較結(jié)果,存儲在程序的可執(zhí)行性文件PE頭部中的代碼段校驗(yàn)值是按照所述算法計(jì)算而得到的;
S400.在程序的讀寫操作中,判斷是否存儲有當(dāng)前程序的代碼段校驗(yàn)值的比較結(jié)果,若是,則執(zhí)行步驟S500 ;若否,則執(zhí)行步驟S600 ; S500.當(dāng)前程序?yàn)楹戏ǔ绦颍?S600.當(dāng)前程序?yàn)榉欠ǔ绦?。在上述?shí)施例中,應(yīng)當(dāng)說明的是,合法的軟件開發(fā)商在頒發(fā)軟件之前,需進(jìn)行該軟件程序進(jìn)行校驗(yàn)值簽名,具體包含以下步驟按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值,在該程序的可執(zhí)行文件的PE頭部尋找未使用的段,再把計(jì)算好的驗(yàn)證值保存在所尋找到的段的位置。經(jīng)過了上述步驟后,該軟件程序就打上了合法性標(biāo)簽。在客戶端使用該程序時(shí),需首先對程序進(jìn)行合法性驗(yàn)證,具體包含以下步驟獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知;接著,按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值,該算法與合法的軟件開發(fā)商所使用的算法相同;其次,將所計(jì)算的代碼段校驗(yàn)值與預(yù)先存儲在程序的可執(zhí)行性文件的PE頭部中的代碼段校驗(yàn)值進(jìn)行比較, 并存儲比較結(jié)果;最后,在程序的讀寫操作中,判斷是否存儲有當(dāng)前程序的代碼段校驗(yàn)值的比較結(jié)果,若是,則認(rèn)為是合法的程序,進(jìn)而允許對當(dāng)前程序進(jìn)行讀寫操作;若否,則認(rèn)為是非法的程序,進(jìn)而拒絕對當(dāng)前程序進(jìn)行讀寫操作。使用該驗(yàn)證方法對程序的合法性進(jìn)行驗(yàn)證,即使需要進(jìn)行合法性驗(yàn)證的程序數(shù)量比較多,且需要實(shí)時(shí)響應(yīng)用戶運(yùn)行程序的文件操作控制,也不會嚴(yán)重影響操作系統(tǒng)的運(yùn)行速度,大大提高了用戶使用體驗(yàn)。在圖2所示的本發(fā)明程序合法性驗(yàn)證方法實(shí)施例二的流程圖中,該實(shí)施例的驗(yàn)證方法包括步驟SlOO至S800,其中,步驟SlOO至S600與圖1所示的實(shí)施例一中步驟SlOO至 S600相同,在此不再贅述。在步驟S500之后,也即進(jìn)行合法性驗(yàn)證,且驗(yàn)證結(jié)果為該程序?yàn)楹戏ǖ能浖_發(fā)商頒發(fā)的程序后,可進(jìn)行
步驟S700.設(shè)置當(dāng)前程序的目錄;
步驟S800.獲取當(dāng)前程序的可執(zhí)行文件的路徑。上述實(shí)施例中所提及的算法可優(yōu)選為下列中的其中一個(gè)奇偶校驗(yàn)、CRC校驗(yàn)、 異或校驗(yàn)、程序的可執(zhí)行性文件的代碼段的關(guān)鍵部分的信息摘要算法5 (Message Digest Algorithm 5, MD5)。在上述實(shí)施例中,存儲比較結(jié)果時(shí),可按下列中的其中一種方式來存儲鏈表、排序數(shù)組、哈希表,其中,在利用哈希表時(shí),需要0(1)的時(shí)間復(fù)雜度;在利用排序數(shù)組時(shí),需要 0 (log(n))的時(shí)間復(fù)雜度;在利用鏈表時(shí),需要O (η)的時(shí)間復(fù)雜度。 如圖3所示,在本發(fā)明的程序合法性驗(yàn)證系統(tǒng)實(shí)施例一的邏輯結(jié)構(gòu)圖中,該合法性驗(yàn)證系統(tǒng)包括依次連接的獲取單元100、計(jì)算單元200、比較單元300和判斷單元400。 其中,獲取單元100用于獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知;計(jì)算單元200用于按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值;比較單元 300用于將所計(jì)算的代碼段校驗(yàn)值與預(yù)先存儲在程序的可執(zhí)行性文件的PE頭部中的代碼段校驗(yàn)值進(jìn)行比較,并存儲比較結(jié)果,存儲在程序的可執(zhí)行性文件PE頭部中的代碼段校驗(yàn)值是按照所述算法計(jì)算而得到的;判斷單元400用于在程序的讀寫操作中,判斷是否存儲有當(dāng)前程序的代碼段校驗(yàn)值的比較結(jié)果,若是,則當(dāng)前程序?yàn)楹戏ǖ某绦?;若否,則當(dāng)前程序?yàn)榉欠ǖ某绦颉?br>
如圖4所示,在本發(fā)明的程序合法性驗(yàn)證系統(tǒng)實(shí)施例二的邏輯結(jié)構(gòu)圖中,該驗(yàn)證系統(tǒng)中的獲取單元100、計(jì)算單元200、比較單元300和判斷單元400與圖3所示的實(shí)施例移動(dòng)邏輯結(jié)構(gòu)相同,在此不做贅述,以下僅說明不同的部分在判斷單元400判斷當(dāng)前程序?yàn)楹戏ǖ某绦蚝?,目錄設(shè)置單元500用于在判斷當(dāng)前程序?yàn)楹戏ǔ绦驎r(shí)設(shè)置當(dāng)前程序的目錄;路徑獲取單元600用于在判斷當(dāng)前程序?yàn)楹戏ǔ绦驎r(shí)獲取當(dāng)前程序的可執(zhí)行文件的路徑。在上述實(shí)施例中,所述預(yù)先確定的算法優(yōu)選為下列中的其中一個(gè)奇偶校驗(yàn)、CRC 校驗(yàn)、異或校驗(yàn)、程序的可執(zhí)行性文件的代碼段的關(guān)鍵部分的信息摘要算法5。在上述實(shí)施例中,所述比較結(jié)果優(yōu)選以下列中的其中一種方式來存儲鏈表、排序數(shù)組、哈希表。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的權(quán)利要求范圍之內(nèi)。
權(quán)利要求
1.一種程序合法性驗(yàn)證方法,其特征在于,包括A.獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知;B.按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值;C.將所計(jì)算的代碼段校驗(yàn)值與預(yù)先存儲在程序的可執(zhí)行性文件的PE頭部中的代碼段校驗(yàn)值進(jìn)行比較,并存儲比較結(jié)果,存儲在程序的可執(zhí)行性文件PE頭部中的代碼段校驗(yàn)值是按照所述算法計(jì)算而得到的;D.在程序的讀寫操作中,判斷是否存儲有當(dāng)前程序的代碼段校驗(yàn)值的比較結(jié)果,若是, 則當(dāng)前程序?yàn)楹戏ǔ绦?;若否,則當(dāng)前程序?yàn)榉欠ǔ绦颉?br>
2.根據(jù)權(quán)利要求1所述的程序合法性驗(yàn)證方法,其特征在于,在判斷當(dāng)前程序?yàn)楹戏ǔ绦蚝?,所述合法性?yàn)證方法還包括設(shè)置當(dāng)前程序的目錄;獲取當(dāng)前程序的可執(zhí)行文件的路徑。
3.根據(jù)權(quán)利要求1所述的程序合法性驗(yàn)證方法,其特征在于,所述預(yù)先確定的算法為下列中的其中一個(gè)奇偶校驗(yàn)、CRC校驗(yàn)、異或校驗(yàn)、程序的可執(zhí)行性文件的代碼段的關(guān)鍵部分的信息摘要算法5。
4.根據(jù)權(quán)利要求1所述的程序合法性驗(yàn)證方法,其特征在于,所述比較結(jié)果以下列中的其中一種方式來存儲鏈表、排序數(shù)組、哈希表。
5.一種程序合法性驗(yàn)證系統(tǒng),其特征在于,包括獲取單元,用于獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知;計(jì)算單元,用于按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值;比較單元,用于將所計(jì)算的代碼段校驗(yàn)值與預(yù)先存儲在程序的可執(zhí)行性文件的PE頭部中的代碼段校驗(yàn)值進(jìn)行比較,并存儲比較結(jié)果,存儲在程序的可執(zhí)行性文件PE頭部中的代碼段校驗(yàn)值是按照所述算法計(jì)算而得到的;判斷單元,用于在程序的讀寫操作中,判斷是否存儲有當(dāng)前程序的代碼段校驗(yàn)值的比較結(jié)果,若是,當(dāng)前程序?yàn)楹戏ǔ绦?;若否,則當(dāng)前程序?yàn)榉欠ǔ绦颉?br>
6.根據(jù)權(quán)利要求5所述的程序合法性驗(yàn)證系統(tǒng),其特征在于,所述系統(tǒng)還包括目錄設(shè)置單元,用于在判斷當(dāng)前程序?yàn)楹戏ǔ绦驎r(shí)設(shè)置當(dāng)前程序的目錄;路徑獲取單元,用于在判斷當(dāng)前程序?yàn)楹戏ǔ绦驎r(shí)獲取當(dāng)前程序的可執(zhí)行文件的路徑。
7.根據(jù)權(quán)利要求5所述的程序合法性驗(yàn)證系統(tǒng),其特征在于,所述預(yù)先確定的算法為下列中的其中一個(gè)奇偶校驗(yàn)、CRC校驗(yàn)、異或校驗(yàn)、程序的可執(zhí)行性文件的代碼段的關(guān)鍵部分的信息摘要算法5。
8.根據(jù)權(quán)利要求5所述的程序合法性驗(yàn)證系統(tǒng),其特征在于,所述比較結(jié)果以下列中的其中一種方式來存儲鏈表、排序數(shù)組、哈希表。
全文摘要
本發(fā)明公開了一種程序合法性驗(yàn)證方法和系統(tǒng),該驗(yàn)證方法包括獲取程序的運(yùn)行通知及程序的可執(zhí)行性文件的讀寫操作通知;按照預(yù)先確定的算法計(jì)算程序的可執(zhí)行性文件的代碼段校驗(yàn)值;將所計(jì)算的代碼段校驗(yàn)值與預(yù)先存儲在程序的可執(zhí)行性文件的PE頭部中的代碼段校驗(yàn)值進(jìn)行比較,并存儲比較結(jié)果;在程序的讀寫操作中,判斷是否存儲有當(dāng)前程序的代碼段校驗(yàn)值的比較結(jié)果,若是,則當(dāng)前程序?yàn)楹戏ǔ绦?;若否,則當(dāng)前程序?yàn)榉欠ǔ绦?。本發(fā)明還構(gòu)造一種程序合法性驗(yàn)證系統(tǒng)。實(shí)施本發(fā)明的技術(shù)方案,即使需要進(jìn)行合法性驗(yàn)證的程序數(shù)量比較多,且需要實(shí)時(shí)響應(yīng)用戶運(yùn)行程序的文件操作控制,也不會嚴(yán)重影響操作系統(tǒng)的運(yùn)行速度,大大提高了用戶使用體驗(yàn)。
文檔編號G06F21/00GK102509049SQ20111035964
公開日2012年6月20日 申請日期2011年11月14日 優(yōu)先權(quán)日2011年11月14日
發(fā)明者景曉軍, 李少敏, 李春雨, 沈智杰 申請人:任子行網(wǎng)絡(luò)技術(shù)股份有限公司