專利名稱:一種基于網(wǎng)絡(luò)的軟件保護方法、客戶端及服務(wù)器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機網(wǎng)絡(luò)領(lǐng)域,尤其涉及一種基于網(wǎng)絡(luò)的軟件保護方法、客戶端及
服務(wù)器。
背景技術(shù):
目前,網(wǎng)絡(luò)上的軟件被其他人或者某些機構(gòu)非法篡改的現(xiàn)象越來越普遍,所謂的篡 改是指將軟件原有的執(zhí)行序列進行修改、將程序的某些保護功能裁剪掉或者將帶有商業(yè)應(yīng)用 的功能去除(如通過反匯編技術(shù)將程序的授權(quán)功能去除,使得破解者不需要購買軟件序列號 即正常使用軟件功能);或者,使用其他手段屏蔽掉對用戶無用的一些功能,但這些功能恰恰 是商業(yè)公司為了盈利而推出的軟件功能(如將免費閉源商業(yè)軟件的廣告功能去除)。
為防止可執(zhí)行程序被逆向后竄改,現(xiàn)有技術(shù)采取了多種多樣軟件保護方法;所謂 的軟件保護主要為防止他人在非授權(quán)的情況下破解程序,從而修改程序運行流程以及分析 軟件內(nèi)部實現(xiàn)過程的一種方法。目前軟件保護的方法主要分為兩大類,一類是純軟件保護 方法,另一類是軟件與硬件相結(jié)合的保護方法,其中,純軟件保護方法是利用軟件的特定算 法以及實現(xiàn)機制對受保護對象(受保護對象可包括軟件、軟件的關(guān)鍵執(zhí)行碼)進行保護,純 軟件保護方法通常包括以下幾種通過加入花指令以及跳轉(zhuǎn)流程來增加反匯編難度、對軟件 加殼、對軟件特定執(zhí)行代碼進行加密處理以及使用虛擬機技術(shù)對軟件進行保護等;軟件與 硬件結(jié)合的保護方法主要為將關(guān)鍵保護信息寫入加密裝置(如硬件設(shè)備),軟件運行時與 加密裝置進行交互,最終完成軟件合法性的校驗。上述軟件保護方法中純軟件保護方法相 對于軟件與硬件相結(jié)合的保護方法而言,破解難度小,但實施簡單、軟件成本較低;而采用 軟件與硬件相結(jié)合的保護方法,由于每個軟件在分發(fā)時都需要配套硬件設(shè)備,從而增加了 軟件成本,同時增加了用戶使用門檻。 現(xiàn)有技術(shù)中,對客戶端的軟件是否被篡改進行檢測所采用的方式主要是基于客戶 端在不同的時間段對相同的軟件程序代碼進行判斷,若兩個時間段得到的值不一致則判斷 客戶端軟件被篡改,若相同則判斷軟件沒有被篡改。采用該種方式雖然可以在一定程度上 對客戶端軟件是否被篡改進行檢測;但是,采用該種方式的缺陷在于,若采用非代碼段(如 對比程序數(shù)據(jù)段的方法),程序執(zhí)行指令被修改后,確定出的Hash值是不變的,故無法檢測 出軟件被篡改,另外,如果程序預(yù)先已經(jīng)被篡改,僅依靠程序運行前后來檢測軟件是否被篡 改,而不是通過服務(wù)器上存儲的軟件程序代碼段確定的Hash值對比,也無法檢測出軟件是 否篡改,因此,對于該種情況,仍然存在對客戶端軟件是否被篡改進行檢測的準確性不高以 及有效性較低的問題。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種基于網(wǎng)絡(luò)的軟件保護方法、客戶端及服務(wù)器,以提高對客
戶端軟件是否被篡改進行檢測的準確性與有效性。
—種基于網(wǎng)絡(luò)的軟件保護方法,包括
服務(wù)器端接收客戶端發(fā)送的程序運行請求,所述程序運行請求攜帶有客戶端標(biāo)識以及待運行軟件版本信息; 服務(wù)器端根據(jù)所述客戶端標(biāo)識與待運行版本信息,向所述客戶端發(fā)送隨機數(shù)據(jù);
客戶端采用設(shè)定的Hash算法,根據(jù)客戶端標(biāo)識、所述隨機數(shù)據(jù)以及客戶端存儲的所述待運行版本信息對應(yīng)的程序代碼段確定出第一 Hash值,并將該第一 Hash值發(fā)送至所述服務(wù)器端; 服務(wù)器端采用所述設(shè)定的Hash算法,根據(jù)所述客戶端標(biāo)識、隨機數(shù)據(jù)以及服務(wù)器
端存儲的所述待運行版本信息對應(yīng)的程序代碼段確定出第二 Hash值; 服務(wù)器端將所述第一 Hash值與第二 Hash值進行比較,并根據(jù)比較結(jié)果確定是否
允許所述客戶端執(zhí)行程序。 —種客戶端,包括第一收發(fā)模塊、第一確定模塊以及執(zhí)行模塊,其中 第一收發(fā)模塊,用于向所述服務(wù)器端發(fā)送攜帶有客戶端標(biāo)識以及待運行軟件版本
信息的程序運行請求、第一Hash值;用于接收服務(wù)器端發(fā)送的隨機數(shù)據(jù),以及,用于接收服
務(wù)器端下發(fā)的允許執(zhí)行程序的通知消息或禁止執(zhí)行程序的通知消息; 第一確定模塊,用于采用設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、所述隨機數(shù)據(jù)以及客戶端存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第一 Hash值,并將所述第一Hash值發(fā)送至所述第一收發(fā)模塊; 執(zhí)行模塊,用于根據(jù)所述收發(fā)模塊接收到的允許執(zhí)行程序的通知消息執(zhí)行所述待運行軟件對應(yīng)的程序代碼段;或者,根據(jù)所述收發(fā)模塊接收到的禁止執(zhí)行程序的通知消息不執(zhí)行程序。 —種服務(wù)器,包括第二收發(fā)模塊、第二確定模塊以及驗證模塊,其中 第二收發(fā)模塊,用于接收客戶端發(fā)送的程序運行請求和第一Hash值;以及,用于
將隨機數(shù)與允許執(zhí)行程序的通知消息發(fā)送至所述客戶端; 第二確定模塊,用于采用所述設(shè)定的Hash算法根據(jù)所述客戶端標(biāo)識、隨機數(shù)據(jù)以及服務(wù)器端存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第二 Hash值;
驗證模塊,用于根據(jù)所述第二收發(fā)模塊接收到的程序運行請求中的客戶端標(biāo)識與待運行版本信息,確定是否向所述客戶端發(fā)送隨機數(shù)據(jù);以及,比較所述第一 Hash值與第二 Hash值,根據(jù)比較結(jié)果確定是否允許客戶端執(zhí)行程序。 采用本發(fā)明技術(shù)方案,由于將客戶端軟件對應(yīng)的程序代碼段存儲在服務(wù)器端,在驗證客戶端的應(yīng)用程序代碼端是否被篡改時,客戶端根據(jù)客戶端標(biāo)識、服務(wù)器下發(fā)的隨機數(shù)以及客戶端存儲的待運行軟件版本信息對應(yīng)的應(yīng)用程序生成第一Hash值,服務(wù)器端根
據(jù)客戶端標(biāo)識、下發(fā)給客戶端的隨機數(shù)以及服務(wù)器端存儲的待運行軟件版本信息對應(yīng)的程序代碼段生成第二 Hash值;服務(wù)器端根據(jù)所述第一 Hash值與第二 Hash值是否相等來確定客戶端的程序代碼段是否被篡改;由于一般情況下,服務(wù)器端的程序代碼段不容易被篡改,因此,通過服務(wù)器端存儲的程序代碼段來判斷客戶端程序代碼段是否被篡改的檢測方式更準確,提高了對客戶端軟件是否被篡改進行檢測的有效性。
圖1為本發(fā)明實施例中對軟件進行保護的流程 圖2為本發(fā)明實施例中對軟件進行保護的信令交互流程 圖3為本發(fā)明實施例中對軟件進行保護的系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式
為解決現(xiàn)有技術(shù)存在的上述問題,本發(fā)明實施例提供一種基于網(wǎng)絡(luò)的軟件保護方法,該方法主要包括在客戶端與服務(wù)器端分別存儲各軟件對應(yīng)的程序代碼段;當(dāng)需要對客戶端軟件是否被篡改進行檢測時,客戶端向服務(wù)器端發(fā)送下帶有客戶端標(biāo)識以及待運行軟件版本信息的程序運行請求;服務(wù)器端根據(jù)客戶端發(fā)送的客戶端標(biāo)識與待運行版本信息,向所述客戶端發(fā)送隨機數(shù)據(jù);客戶端采用設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、服務(wù)器端下發(fā)的隨機數(shù)據(jù)以及客戶端本地存儲的待運行版本信息對應(yīng)的程序代碼段確定出第一Hash值,并將該第一 Hash值發(fā)送至服務(wù)器端;服務(wù)器端采用所述設(shè)定的Hash算法,根據(jù)所述客戶端標(biāo)識、隨機數(shù)據(jù)以及服務(wù)器端本地存儲的待運行版本信息對應(yīng)的程序代碼段確定出第二 Hash值,將第一 Hash值與第二 Hash值進行比較,根據(jù)比較結(jié)果確定是否允許客戶端執(zhí)行程序(如,第一 Hash值與第二 Hash值相等時,確定允許客戶端執(zhí)行程序,并向客戶端發(fā)送允許執(zhí)行程序的通知消息;第一Hash值與第二Hash值不相等時,確定禁止客戶端執(zhí)行程序,并向客戶端發(fā)送禁止執(zhí)行程序的通知消息)。 本發(fā)明技術(shù)方案,由于一般情況下,服務(wù)器端的程序代碼段不容易被篡改,因此,通過服務(wù)器端存儲的程序代碼段來判斷客戶端程序代碼段是否被篡改的檢測方式更準確,提高了對客戶端軟件是否被篡改進行檢測的有效性。 為方便大家理解本發(fā)明實施例,首先對常用的技術(shù)術(shù)語進行簡單的說明。 (1)程序代碼段。在采用段式內(nèi)存管理的操作系統(tǒng)架構(gòu)中,程序代碼段是指用來存
放程序執(zhí)行代碼的一塊內(nèi)存區(qū)域,該內(nèi)存區(qū)域的大小在程序運行前已經(jīng)確定,并且程序代
碼段所在的內(nèi)存區(qū)域為只讀內(nèi)存區(qū);若可執(zhí)行應(yīng)用程序被外部反匯編程序或病毒修改,則
該應(yīng)用程序所對應(yīng)的程序代碼段會發(fā)生變化,因此,程序代碼段可以表征其所對應(yīng)的可執(zhí)
行程序的唯一性。 (2)Hash算法。Hash—般翻譯成"散列",也可以直接翻譯成〃 哈希〃 ,Hash算法是指把任意長度的輸入通過散列算法(比如常用的MD5、 SHA-1等)變換成固定長度的輸出,該輸出值就是散列值(即Hash值)。Hash算法是一種壓縮映射的方法,即散列值的空間通常遠小于輸入的空間,相同的輸入通過相同的Hash算法得到相同的Hash值,不同的輸入通過相同的Hash算法得到的Hash值不同。 (3)GUID(Globally Unique Identifier,全球唯一標(biāo)識符)。GUID是一個字母數(shù)字標(biāo)識符,用于指示產(chǎn)品的唯一性,在許多常用軟件應(yīng)用程序(如Web瀏覽器、媒體播放器等)中,都使用GUID ;GUID通過特定算法產(chǎn)生的一個二進制長度為128位的數(shù)字,在空間上和時間上具有唯一性,保證同一時間不同地方產(chǎn)生的數(shù)字不同。
下面結(jié)合說明書附圖對本發(fā)明實施例進行詳細的描述。 參見圖l,為本發(fā)明實施例中對軟件進行保護的流程圖,該流程包括以下步驟
步驟101、客戶端向服務(wù)器端發(fā)送程序運行請求,還請求中攜帶有客戶端的標(biāo)識信息與請求運行軟件(后續(xù)將該請求運行的軟件稱為待運行軟件)的版本信息。
該步驟中,程序運行請求可基于任何網(wǎng)絡(luò)通訊協(xié)議,如TCP (TransmissionControl
6Protocol,傳輸控制協(xié)議)/UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)等。客戶端標(biāo)識既可以是用戶編號也可以是軟件序列號等特定信息,還可以是客戶端臨時產(chǎn)生的GUID。
步驟102、服務(wù)器端根據(jù)該程序運行請求,將該請求中攜帶的版本信息與該客戶端標(biāo)識對應(yīng)的多個軟件的版本信息進行匹配,匹配成功后向發(fā)起程序運行請求的客戶端發(fā)送隨機數(shù)據(jù)。 步驟103、客戶端采用Hash算法根據(jù)服務(wù)器端發(fā)送的隨機數(shù)據(jù)、客戶端保存待運行軟件版本信息對應(yīng)的程序代碼段以及客戶端標(biāo)識進行Hash運算,將得到的第一 Hash值發(fā)送至服務(wù)器端。 該步驟中,將第一Hash值發(fā)送至服務(wù)器端具體為將第一Hash值以及客戶端標(biāo)識
以及待運行軟件版本信息封裝成相應(yīng)的通訊報文之后,發(fā)送至服務(wù)器端。 該步驟中,客戶端獲取本地保存的程序代碼段的方式如下應(yīng)用程度代碼段以可
執(zhí)行文件的形式保存,由于可執(zhí)行文件都具有相應(yīng)的文件格式,因此在操作系統(tǒng)加載可執(zhí)
行文件時,通過一定的映射內(nèi)存方式存儲可執(zhí)行文件;客戶端通過相關(guān)的編程接口可獲取
到可執(zhí)行文件;如Windows操作系統(tǒng)中的PE文件,被操作系統(tǒng)加載后通過其規(guī)定的方式加
載到內(nèi)存中,客戶端可通過微軟提供的API獲取該PE文件。 該步驟中的程序代碼段以二進制文件的形式存儲在客戶端。 步驟104、服務(wù)器端采用設(shè)定的Hash算法根據(jù)下發(fā)給客戶端的隨機數(shù)、服務(wù)器端保存的待運行軟件版本信息對應(yīng)的程序代碼段以及客戶端發(fā)送的客戶端標(biāo)識進行Hash運算,得到第二Hash值。 該步驟中,服務(wù)器端生成第二 Hash值與客戶端生成第一 Hash值所采用的Hash算法一致。 步驟105、服務(wù)器端將第二 Hash值與接收到的第一 Hash值進行比較,根據(jù)比較結(jié)果向發(fā)起程序運行請求的客戶端發(fā)送運行結(jié)果通知消息,以通知客戶端根據(jù)該服務(wù)器端發(fā)送的運行結(jié)果通知消息進行相應(yīng)的操作。 該步驟中,若第一 Hash值與第二 Hash值相等,服務(wù)器端向客戶端發(fā)送的運行結(jié)果通知消息為允許客戶端執(zhí)行程序的通知消息;若第一Hash值與第二Hash值不相等,服務(wù)器
端向客戶端發(fā)送的運行結(jié)果報文為禁止客戶端執(zhí)行程序的通知消息。
該步驟中,可以報文的形式發(fā)送運行結(jié)果通知消息。 該步驟中,客戶端進行相應(yīng)的操作,具體為當(dāng)接收到的運行結(jié)果通知消息為允許
客戶端執(zhí)行程序的通知消息時,客戶端則繼續(xù)執(zhí)行后續(xù)的功能;當(dāng)接收到的運行結(jié)果通知
消息為禁止客戶端執(zhí)行程序的通知消息時,客戶端則自動退出,結(jié)束流程。 本發(fā)明實施例中,客戶端與服務(wù)器端進行Hash運算所采用的Hash算法可以是
MD5、 SHA-1等較為常用的Hash算法。 較佳地,上述流程中,若客戶端在向服務(wù)器發(fā)送第一Hash值之后的一段時間閾值后(該段時間閾值可根據(jù)實際應(yīng)用場景進行預(yù)先設(shè)置)未收到服務(wù)器端下發(fā)的運行結(jié)果通知消息,客戶端則不執(zhí)行程序。 本發(fā)明實施例中,還可以是,服務(wù)器端默認設(shè)置為在判斷第一 Hash值與第二 Hash值不相等時,向客戶端發(fā)送禁止執(zhí)行程序的通知消息;客戶端在向服務(wù)器端發(fā)送第一Hash值之后的一段時間閾值后還未收到服務(wù)器端下發(fā)的禁止執(zhí)行程序的通知消息時,客戶端自動執(zhí)行程序;或者, 服務(wù)器端默認設(shè)置為在判斷第一 Hash值與第二 Hash值相等時,向客戶端發(fā)送允許執(zhí)行程序的通知消息;客戶端在向服務(wù)器端發(fā)送第一 Hash值之后的一段時間閾值后還未收到服務(wù)器端下發(fā)的允許執(zhí)行程序的通知消息時,客戶端自動退出,不執(zhí)行程序;還或者, 客戶端在向服務(wù)器端發(fā)送第一 Hash值之后的一段時間閾值后還未收到服務(wù)器端下發(fā)的允許執(zhí)行程序的通知消息時,客戶端自動執(zhí)行程序。 實現(xiàn)方式多種多樣,并不僅限于本發(fā)明實施例中列舉的上述幾種方式,本領(lǐng)域技術(shù)人員應(yīng)該可以理解還有其他的多種方式。 較佳地,為確保軟件整體的保護機制的完好性,本發(fā)明實施例中,在服務(wù)器端確認第一 Hash值與第二 Hash值相等之后的一段時間內(nèi),客戶端與服務(wù)器段還可以繼續(xù)進行信息交互。 較佳地,為進一步提高報文傳輸?shù)陌踩?,服?wù)器端向客戶端發(fā)送的運行結(jié)果通知消息(該運行結(jié)果通知消息可以報文的形式發(fā)送)之前,將該運行結(jié)果通知消息進行加密處理,加密算法以及加密密鑰采用固定方式預(yù)先設(shè)置在服務(wù)器端與客戶端上;客戶端接收到該運行結(jié)果通知消息之后,采用加密密鑰對該運行結(jié)果通知消息進行解密處理。
較佳地,為更進一步提高軟件保護能力,在客戶端與服務(wù)器端存儲有相同的Hash算法映射表或列表,每種Hash算法對應(yīng)一個索引值,在每一次啟動程序運行流程時,需要客戶端與服務(wù)器端進行協(xié)商,以決定該次程序運行應(yīng)該采用哪種Hash算法。比如,在上述步驟102中,服務(wù)器端將該次程序運行所采用的Hash算法的索引值發(fā)送至客戶端;在步驟103中,客戶端根據(jù)該索引值對應(yīng)的Hash算法進行Hash運算。 較佳地,為進一步防止侵入者通過軟件反匯編將與網(wǎng)絡(luò)側(cè)的服務(wù)器端通訊的驗證功能,本發(fā)明實施例中可通過增加其他防反匯編技術(shù),如代碼混淆、花指令等防反匯編技術(shù);或者,將客戶端代碼段的校驗文件存儲至系統(tǒng)分區(qū)的某個位置,當(dāng)網(wǎng)絡(luò)無法正常運行時,采用本地保存的校驗文件進行本地校驗。 為更清楚描述本發(fā)明技術(shù)方案,下面以一具體的信令交互流程圖對本發(fā)明技術(shù)方案進行詳細描述,如圖2所示。 參見圖2 ,為本發(fā)明實施例中對軟件進行保護的信令交互流程圖,該流程包括以下步驟 本發(fā)明實施例中,客戶端軟件開發(fā)相應(yīng)的接口,提供生成客戶端代碼段采集的功能,并將客戶端代碼段以二進制文件的形式分別保存在客戶端與服務(wù)器端。服務(wù)器端軟件所在的主機上部署有客戶端代碼段文件,服務(wù)器端設(shè)置有相應(yīng)的配置文件,該配置文件供客戶端代碼段文件部署時使用。 步驟201 、客戶端的客戶端軟件向服務(wù)器端的服務(wù)器端軟件發(fā)送程序運行請求,該程序運行請求中攜帶有客戶端標(biāo)識信息與待運行軟件的版本信息。 步驟202、服務(wù)器端軟件根據(jù)接收到的程序運行請求,記錄該運行請求中攜帶的客戶端標(biāo)識;并查詢該客戶端標(biāo)識所對應(yīng)的一個或多個軟件版本信息,將該程序運行請求中攜帶的版本信息與查詢得到的該客戶端標(biāo)識對應(yīng)的多個軟件版本信息進行匹配,若匹配成功,則執(zhí)行步驟203,若匹配失敗,則向客戶端發(fā)送禁止運行程序的報文。
步驟203、服務(wù)器端軟件向客戶端軟件發(fā)送程序運行響應(yīng),該響應(yīng)中攜帶有隨機數(shù)、客戶端標(biāo)識以及Hash算法的索引值。 步驟204、客戶端軟件對接收到的程序運行響應(yīng)中的客戶端標(biāo)識與自身的客戶端標(biāo)識進行比較,若相同,則執(zhí)行步驟205 ;若不相同,客戶端軟件自動退出,結(jié)束流程。
步驟205、客戶端軟件從客戶端中的第一程序代碼段文件存儲器中(該第一程序代碼段存儲器用于存儲客戶端本地的各軟件所對應(yīng)的程序代碼段)獲取待運行軟件版本信息所對應(yīng)的程序代碼段信息。 步驟206 207、客戶端軟件根據(jù)服務(wù)器端軟件下發(fā)的隨機數(shù)據(jù)、客戶端標(biāo)識以及獲取到的程序代碼段,采用服務(wù)器端軟件下發(fā)的Hash算法索引值對應(yīng)的Hash算法進行Hash運算,得到第一 Hash值;以及,將得到的第一 Hash值以及客戶端標(biāo)識發(fā)送至服務(wù)器端軟件。 步驟208 209、服務(wù)器端軟件接收到客戶端軟件發(fā)送的第一Hash值之后,從服務(wù)器端中的第二程序代碼段文件存儲器中獲取待運行軟件版本信息對應(yīng)的程序代碼段;并根據(jù)下發(fā)給客戶端的隨機數(shù)。客戶端標(biāo)識以及獲取到的程序代碼段采用索引值對應(yīng)的Hash算法進行Hash運算,得到第二 Hash值。 步驟210、服務(wù)器端軟件對第一 Hash值與第二 Hash值進行比較,若相等,則向客戶端軟件發(fā)送允許執(zhí)行程序的運行結(jié)果報文,若不相等,則向客戶端軟件發(fā)送禁止運行程序的運行結(jié)果報文。 基于上述流程相同的構(gòu)思,本發(fā)明實施例還提供一種軟件保護系統(tǒng),該系統(tǒng)的結(jié)構(gòu)如圖3所示。 參見圖3,為本發(fā)明實施例中軟件保護系統(tǒng)的結(jié)構(gòu)示意圖,該系統(tǒng)包括服務(wù)器端31與客戶端32,其中 客戶端31,用于向服務(wù)器端32發(fā)送攜帶有客戶端標(biāo)識以及待運行軟件版本信息的程序運行請求;在接收到服務(wù)器端32下發(fā)的隨機數(shù)之后,采用設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、隨機數(shù)據(jù)以及客戶端存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第一Hash值,并將該第一 Hash值發(fā)送至服務(wù)器端32 ;根據(jù)服務(wù)器端32下發(fā)的允許執(zhí)行程序的通知消息執(zhí)行所述待運行軟件對應(yīng)的程序代碼段。 服務(wù)器端32,用于根據(jù)客戶端31發(fā)送的程序運行請求中的客戶端標(biāo)識與待運行版本信息,向客戶端31發(fā)送隨機數(shù)據(jù);采用設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、隨機數(shù)據(jù)以及服務(wù)器端32存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第二 Hash值;在第一Hash值與第二 Hash值相等時,向客戶端31發(fā)送允許執(zhí)行程序的通知消息。
按照功能劃分,將該客戶端31劃分為第一收發(fā)模塊311、第一確定模塊312以及執(zhí)行模塊313,其中 第一收發(fā)模塊311,用于向服務(wù)器端32發(fā)送攜帶有客戶端標(biāo)識以及待運行軟件版本信息的程序運行請求、第一 Hash值;以及,用于接收服務(wù)器端32發(fā)送的隨機數(shù)據(jù)以及允許執(zhí)行程序的通知消息; 第一確定模塊312,用于采用設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、隨機數(shù)據(jù)以及客戶端存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第一 Hash值,并將該第一 Hash值發(fā)送至第一收發(fā)模塊311 ;
9
執(zhí)行模塊313,用于根據(jù)第一收發(fā)模塊311接收到的允許執(zhí)行程序的通知消息執(zhí)行待運行軟件對應(yīng)的程序代碼段。 按功能劃分,可將服務(wù)器端32劃分為第二收發(fā)模塊321 、第二確定模塊322以及驗證模塊323,其中 第二收發(fā)模塊321,用于接收客戶端31發(fā)送的程序運行請求和第一Hash值;以及,用于將隨機數(shù)與允許執(zhí)行程序的通知消息發(fā)送至客戶端321 ; 第二確定模塊,用于采用上述設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、隨機數(shù)據(jù)以及服務(wù)器端32存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第二 Hash值,并將該第二Hash值發(fā)送至第二收發(fā)模塊321 ; 驗證模塊323,用于根據(jù)第二收發(fā)模塊321接收到的程序運行請求中的客戶端標(biāo)識與待運行版本信息,確定是否向客戶端31發(fā)送隨機數(shù)據(jù);以及,比較第一 Hash值與第二Hash值,在第一 Hash值與第二 Hash值相等時,指示第二收發(fā)模塊321向客戶端31發(fā)送允許執(zhí)行程序的通知消息。 驗證模塊323確定是否向客戶端31發(fā)送隨機數(shù)據(jù),具體為驗證模塊323獲取客戶端標(biāo)識相對應(yīng)的一個或多個軟件版本信息;并將待運行軟件版本信息與獲取到的一個或多個軟件版本信息進行匹配,并在匹配成功時確定向客戶端31發(fā)送隨機數(shù)據(jù)。
較佳地,驗證模塊323在第一 Hash值與第二 Hash值相等時,指示第二收發(fā)模塊321向客戶端31發(fā)送禁止執(zhí)行程序的通知消息。 較佳地,客戶端31還包括第一存儲模塊310,服務(wù)器端32還包括第二存儲模塊320,其中: 第一存儲模塊310,用于存儲用戶終端31與服務(wù)器端32之間約定的加密機制與密鑰。 第二存儲模塊320,用于存儲用戶終端31與服務(wù)器端32之間約定的加密機制與密鑰。 較佳地,第二收發(fā)模塊321在向客戶端31發(fā)送允許執(zhí)行程序的通知消息之前,采用第二存儲模塊320存儲的加密機制對所述允許執(zhí)行程序的通知消息進行加密;第一收發(fā)模塊311采用第一存儲模塊310中存儲的密鑰對接收到允許執(zhí)行程序的通知消息進行解密。 較佳地,第一存儲模塊310還存儲有服務(wù)器端32與客戶端31之間約定的多種Hash算法,每種Hash算法對應(yīng)一個索引值。 第二存儲模塊320還存儲有服務(wù)器端32與客戶端31之間約定的多種Hash算法,每種Hash算法對應(yīng)一個索引值。 較佳地,第二收發(fā)模塊321在向客戶端31發(fā)送隨機數(shù)據(jù)時,還向客戶端31發(fā)送用于確定第一 Hash值的Hash算法的索引值;第一確定模塊312采用第一收發(fā)模塊311接收到的索引值對應(yīng)的Hash算法根據(jù)客戶端標(biāo)識、隨機數(shù)據(jù)以及客戶端本地存儲的待運行軟件對應(yīng)的程序代碼段確定出第一 Hash值。 本發(fā)明實施例中的第一收發(fā)模塊311、第一收發(fā)模塊312以及執(zhí)行模塊313構(gòu)成客戶端軟件;第二收發(fā)模塊321、第二確定模塊322以及驗證模塊323構(gòu)成服務(wù)器端軟件;第一存儲模塊310即為第一程序代碼段文件存儲器,第二存儲模塊320即為第二程序代碼段文件存儲器。 本發(fā)明實施例中提供的技術(shù)方案,可以應(yīng)用于很多場景,對于基于網(wǎng)絡(luò)Client/ Server架構(gòu)的通訊軟件具有較好的效果,比如,即時聊天工具、網(wǎng)游客戶端、認證客戶端、需 要在線更新病毒庫的殺毒軟件、email客戶端等,在這些應(yīng)用場景中,應(yīng)用本發(fā)明技術(shù)方案 可以避免應(yīng)用程序代碼被篡改而導(dǎo)致完整性檢查失效的問題。 本發(fā)明實施例中,由于將客戶端軟件對應(yīng)的程序代碼段存儲在服務(wù)器端,在驗證 客戶端的應(yīng)用程序代碼端是否被篡改時,客戶端根據(jù)客戶端標(biāo)識、服務(wù)器下發(fā)的隨機數(shù)以 及客戶端存儲的待運行軟件版本信息對應(yīng)的應(yīng)用程序生成第一 Hash值,服務(wù)器端根據(jù)客 戶端標(biāo)識、下發(fā)給客戶端的隨機數(shù)以及服務(wù)器端存儲的待運行軟件版本信息對應(yīng)的程序代 碼段生成第二 Hash值;服務(wù)器端根據(jù)所述第一 Hash值與第二 Hash值是否相等來確定客 戶端的程序代碼段是否被篡改;由于一般情況下,服務(wù)器端的程序代碼段不容易被篡改,因 此,通過服務(wù)器端存儲的程序代碼段來判斷客戶端程序代碼段是否被篡改的檢測方式更準 確,提高了對客戶端軟件是否被篡改進行檢測的有效性;另外,不需要增加新的硬件設(shè)備, 因此,相對于現(xiàn)有的軟件結(jié)合硬件來保護軟件的方式而言,降低硬件資源的消耗,節(jié)省硬件 資源。 顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精 神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
一種基于網(wǎng)絡(luò)的軟件保護方法,其特征在于,包括服務(wù)器端接收客戶端發(fā)送的程序運行請求,所述程序運行請求攜帶有客戶端標(biāo)識以及待運行軟件版本信息;服務(wù)器端根據(jù)所述客戶端標(biāo)識與待運行版本信息,向所述客戶端發(fā)送隨機數(shù)據(jù);客戶端采用設(shè)定的Hash算法,根據(jù)客戶端標(biāo)識、所述隨機數(shù)據(jù)以及客戶端存儲的所述待運行版本信息對應(yīng)的程序代碼段確定出第一Hash值,并將該第一Hash值發(fā)送至所述服務(wù)器端;服務(wù)器端采用所述設(shè)定的Hash算法,根據(jù)所述客戶端標(biāo)識、隨機數(shù)據(jù)以及服務(wù)器端存儲的所述待運行版本信息對應(yīng)的程序代碼段確定出第二Hash值;服務(wù)器端將所述第一Hash值與第二Hash值進行比較,并根據(jù)比較結(jié)果確定是否允許所述客戶端執(zhí)行程序。
2. 如權(quán)利要求1所述的方法,其特征在于,所述服務(wù)器端根據(jù)所述客戶端標(biāo)識與待運 行版本信息,向所述客戶端發(fā)送隨機數(shù)據(jù),具體為服務(wù)器端獲取所述客戶端標(biāo)識相對應(yīng)的一個或多個軟件版本信息; 服務(wù)器端將所述待運行軟件版本信息與獲取到的所述一個或多個軟件版本信息進行 匹配,并在匹配成功時向所述客戶端發(fā)送隨機數(shù)據(jù)。
3. 如權(quán)利要求2所述的方法,其特征在于,還包括步驟 服務(wù)器端在匹配不成功時,向所述客戶端發(fā)送禁止運行程序的通知消息。
4. 如權(quán)利要求1所述的方法,其特征在于,根據(jù)比較結(jié)果確定是否允許所述客戶端執(zhí) 行程序,具體為服務(wù)器端在所述第一 Hash值與第二 Hash值相等時,確定允許所述客戶端執(zhí)行程序,并 向所述客戶端發(fā)送允許執(zhí)行程序的通知消息;服務(wù)器端在所述第一 Hash值與第二 Hash值不相等時,確定禁止所述客戶端執(zhí)行程序, 并向所述客戶端發(fā)送禁止執(zhí)行程序的通知消息。
5. 如權(quán)利要求1 4任一項所述的方法,其特征在于,所述服務(wù)器端與所述客戶端存儲 有約定的多種Hash算法,每種Hash算法對應(yīng)一個索引值;所述服務(wù)器端在向所述客戶端發(fā)送隨機數(shù)據(jù)時,還包括向所述客戶端發(fā)送用于確定所 述第一 Hash值的Hash算法的索引值;所述客戶端與服務(wù)器端所采用的設(shè)定的Hash算法為所述索引值對應(yīng)的Hash算法。
6. 如權(quán)利要求1 4任一項所述的方法,其特征在于,所述客戶端標(biāo)識為用戶編號、待 運行軟件的序列號或者為所述客戶端臨時產(chǎn)生的全球唯一標(biāo)識符GUID。
7. —種客戶端,其特征在于,包括第一收發(fā)模塊、第一確定模塊以及執(zhí)行模塊,其中 第一收發(fā)模塊,用于向所述服務(wù)器端發(fā)送攜帶有客戶端標(biāo)識以及待運行軟件版本信息的程序運行請求、第一Hash值;用于接收服務(wù)器端發(fā)送的隨機數(shù)據(jù),以及,用于接收服務(wù)器 端下發(fā)的允許執(zhí)行程序的通知消息或禁止執(zhí)行程序的通知消息;第一確定模塊,用于采用設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、所述隨機數(shù)據(jù)以及客戶端 存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第一 Hash值,并將所述第一 Hash值 發(fā)送至所述第一收發(fā)模塊;執(zhí)行模塊,用于根據(jù)所述收發(fā)模塊接收到的允許執(zhí)行程序的通知消息執(zhí)行所述待運行軟件對應(yīng)的程序代碼段;或者,根據(jù)所述收發(fā)模塊接收到的禁止執(zhí)行程序的通知消息不執(zhí) 行程序。
8. 如權(quán)利要求7所述的客戶端,其特征在于,還包括所述第一存儲模塊; 所述第一存儲模塊,用于存儲所述服務(wù)器端與所述客戶端存儲有約定的多種Hash算法,每種Hash算法對應(yīng)一個索引值;所述第一收發(fā)模塊進一步應(yīng)用為,接收所述服務(wù)器端發(fā)送的用于確定所述第一 Hash 值的Hash算法的索引值;所述第一確定模塊具體應(yīng)用為采用所述第一收發(fā)模塊接收到的索引值對應(yīng)的Hash 算法根據(jù)客戶端標(biāo)識、所述隨機數(shù)據(jù)以及客戶端存儲的待運行軟件對應(yīng)的程序代碼段確定 出第一Hash值。
9. 一種服務(wù)器,其特征在于,包括第二收發(fā)模塊、第二確定模塊以及驗證模塊,其中 第二收發(fā)模塊,用于接收客戶端發(fā)送的程序運行請求和第一Hash值;以及,用于將隨機數(shù)與允許執(zhí)行程序的通知消息發(fā)送至所述客戶端;第二確定模塊,用于采用所述設(shè)定的Hash算法根據(jù)所述客戶端標(biāo)識、隨機數(shù)據(jù)以及服 務(wù)器端存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第二 Hash值;驗證模塊,用于根據(jù)所述第二收發(fā)模塊接收到的程序運行請求中的客戶端標(biāo)識與待 運行版本信息,確定是否向所述客戶端發(fā)送隨機數(shù)據(jù);以及,比較所述第一 Hash值與第二 Hash值,根據(jù)比較結(jié)果確定是否允許客戶端執(zhí)行程序。
10. 如權(quán)利要求9所述的服務(wù)器,其特征在于,所述驗證模塊確定是否向所述客戶端發(fā) 送隨機數(shù)據(jù),具體應(yīng)用為驗證模塊獲取所述客戶端標(biāo)識相對應(yīng)的一個或多個軟件版本信 息;并將所述待運行軟件版本信息與獲取到的所述一個或多個軟件版本信息進行匹配,并 在匹配成功時確定向所述客戶端發(fā)送隨機數(shù)據(jù)。
11. 如權(quán)利要求9所述的服務(wù)器,其特征在于,所述驗證模塊根據(jù)比較結(jié)果確定是否允 許客戶端執(zhí)行程序,具體應(yīng)用為服務(wù)器端在所述第一 Hash值與第二 Hash值相等時,確定允許所述客戶端執(zhí)行程序,并 向所述客戶端發(fā)送允許執(zhí)行程序的通知消息;服務(wù)器端在所述第一 Hash值與第二 Hash值不相等時,確定禁止所述客戶端執(zhí)行程序, 并向所述客戶端發(fā)送禁止運行程序的通知消息。
12. 如權(quán)利要求9所述的服務(wù)器,其特征在于,還包括第二存儲模塊; 所述第二存儲模塊,用于存儲所述服務(wù)器端與所述客戶端存儲有約定的多種Hash算法,每種Hash算法對應(yīng)一個索引值;所述第二收發(fā)模塊進一步應(yīng)用為,在向所述客戶端發(fā)送隨機數(shù)據(jù)時,還包括向所述客 戶端發(fā)送用于確定所述第一 Hash值的Hash算法的索引值;所述第二確定模塊具體應(yīng)用為采用所述第二收發(fā)模塊發(fā)送的索引值對應(yīng)的Hash算 法根據(jù)客戶端標(biāo)識、所述隨機數(shù)據(jù)以及服務(wù)器端存儲的待運行軟件對應(yīng)的程序代碼段確定 出第二Hash值。
全文摘要
本發(fā)明公開了一種基于網(wǎng)絡(luò)的軟件保護方法、客戶端及服務(wù)器,提高對客戶端軟件是否被篡改進行檢測的準確性與有效性。方法包括服務(wù)器端接收客戶端發(fā)送的程序運行請求,并根據(jù)該程序運行請求向客戶端發(fā)送隨機數(shù)據(jù);客戶端采用設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、隨機數(shù)據(jù)以及客戶端存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第一Hash值;服務(wù)器端采用設(shè)定的Hash算法根據(jù)客戶端標(biāo)識、隨機數(shù)據(jù)以及服務(wù)器端存儲的待運行軟件版本信息對應(yīng)的程序代碼段確定出第二Hash值,將第一Hash值與第二Hash值進行比較,根據(jù)比較結(jié)果確定是否允許客戶端執(zhí)行程序。本發(fā)明技術(shù)方案提高了對客戶端軟件是否被篡改進行檢測的準確性與有效性。
文檔編號G06F21/22GK101783801SQ20101010485
公開日2010年7月21日 申請日期2010年1月29日 優(yōu)先權(quán)日2010年1月29日
發(fā)明者林明靜 申請人:福建星網(wǎng)銳捷網(wǎng)絡(luò)有限公司