欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種監(jiān)控進(jìn)程的方法及裝置與流程

文檔序號(hào):11590918閱讀:202來源:國(guó)知局
本發(fā)明涉及信息處理領(lǐng)域,更具體地,涉及一種監(jiān)控進(jìn)程的方法及裝置。
背景技術(shù)
::目前,軟件開發(fā)通常會(huì)采用模塊化開發(fā),將軟件的功能進(jìn)行模塊化拆分,不同的模塊負(fù)責(zé)不同的功能。同時(shí)在設(shè)計(jì)模塊時(shí)盡可能的使得模塊松耦合,使得模塊能夠獨(dú)立使用,從而對(duì)于軟件開發(fā)人員來說可以獨(dú)立的去開發(fā)一個(gè)個(gè)模塊功能。當(dāng)程序發(fā)布時(shí),程序主框架則會(huì)加載一個(gè)個(gè)獨(dú)立的模塊來實(shí)現(xiàn)整個(gè)程序的功能。對(duì)于windows客戶端,程序則是一個(gè)動(dòng)態(tài)鏈接庫(dynamiclinklibrary,dll)文件,在程序發(fā)布到windows客戶端后,可以從客戶端安裝目錄中獲取到一個(gè)個(gè)獨(dú)立的dll文件。而對(duì)于程序自身來說,有些核心功能都是編寫在dll中的,一旦黑客獲取到模塊后,可以修改模塊的代碼從而實(shí)現(xiàn)一些非法的功能,或者在程序啟動(dòng)后再對(duì)程序進(jìn)行修改?,F(xiàn)有的監(jiān)控程序模塊加載活動(dòng)的方法包括:步驟1,接收操作系統(tǒng)發(fā)出的程序模塊加載活動(dòng)通知;步驟2,獲取上述程序模塊在系統(tǒng)內(nèi)存中處于加載狀態(tài)下的可執(zhí)行文件(portableexecutable,pe)頭部信息、以及該程序模塊包含在磁盤中對(duì)應(yīng)的原始文件內(nèi)容中的pe頭部信息;步驟3,比較所述獲取的加載狀態(tài)下的pe頭部信息與原始文件內(nèi)容中的pe頭部信息是否匹配,如果不匹配則結(jié)束加載,如果匹配則繼續(xù)加載。但是現(xiàn)有的監(jiān)控程序模塊加載活動(dòng)的方法,其校驗(yàn)與被校驗(yàn)在一個(gè)進(jìn)程中進(jìn)行,這樣可能會(huì)暴露程序模塊本身,制造修改程序模塊的機(jī)會(huì);并且該監(jiān)控程序模塊加載活動(dòng)的方法只在程序模塊加載時(shí)進(jìn)行監(jiān)控,仍然存在被修改的風(fēng)險(xiǎn)。技術(shù)實(shí)現(xiàn)要素:針對(duì)上述的問題,本發(fā)明提供一種監(jiān)控進(jìn)程的方法及裝置。第一方面,本發(fā)明提供一種監(jiān)控進(jìn)程的方法,包括:s1,獲知當(dāng)前運(yùn)行的所有進(jìn)程中存在客戶端程序的進(jìn)程;s2,獲取所述客戶端程序的進(jìn)程模塊信息,并接收所述客戶端程序傳輸?shù)呐渲眯畔?;s3,將所述進(jìn)程模塊信息與所述配置信息進(jìn)行校驗(yàn);s4,若校驗(yàn)結(jié)果不一致,則終止所述客戶端程序運(yùn)行;或者若校驗(yàn)結(jié)果一致,則允許所述客戶端程序繼續(xù)運(yùn)行。其中,所述s1進(jìn)一步包括:每隔預(yù)設(shè)時(shí)間枚舉當(dāng)前運(yùn)行的所有進(jìn)程,并判斷所述所有進(jìn)程中是否存在所述客戶端程序的進(jìn)程。其中,所述s2進(jìn)一步包括:所述客戶端程序每次登錄時(shí),服務(wù)器將所述配置信息發(fā)送至所述客戶端程序,所述客戶端程序再將所述配置信息通過進(jìn)程間通信的方式傳輸至所述服務(wù)器。其中,所述s2中的配置信息包括:所述客戶端程序中的模塊名稱、模塊基址、模塊代碼段起始地址、模塊代碼長(zhǎng)度和校驗(yàn)值。其中,所述s1進(jìn)一步包括:通過調(diào)用函數(shù)createthread來創(chuàng)建線程函數(shù),所述線程函數(shù)用于每隔預(yù)設(shè)時(shí)間枚舉當(dāng)前運(yùn)行的所有進(jìn)程,并判斷所述所有進(jìn)程中是否存在所述客戶端程序的進(jìn)程。其中,所述s2中獲取所述客戶端程序的進(jìn)程模塊信息進(jìn)一步包括:通過調(diào)用函數(shù)createtoolhelp32snapshot來獲取所述客戶端程序的進(jìn)程模塊信息。其中,所述s3中的所述進(jìn)程模塊信息與所述配置信息進(jìn)行校驗(yàn)為進(jìn)行hash校驗(yàn)。第二方面,本發(fā)明提供一種監(jiān)控進(jìn)程的裝置,包括:獲知模塊,用于獲知當(dāng)前運(yùn)行的所有進(jìn)程中存在客戶端程序的進(jìn)程;處理模塊,用于獲取所述客戶端程序的進(jìn)程模塊信息,并接收所述客戶端程序傳輸?shù)呐渲眯畔?;校?yàn)?zāi)K,用于將所述進(jìn)程模塊信息與所述配置信息進(jìn)行校驗(yàn);執(zhí)行模塊,用于若校驗(yàn)結(jié)果不一致,則終止所述客戶端程序運(yùn)行;或者若校驗(yàn)結(jié)果一致,則允許所述客戶端程序繼續(xù)運(yùn)行。其中,所述獲知模塊進(jìn)一步用于:每隔預(yù)設(shè)時(shí)間枚舉當(dāng)前運(yùn)行的所有進(jìn)程,并判斷所述所有進(jìn)程中是否存在所述客戶端程序的進(jìn)程。本發(fā)明提供的一種監(jiān)控進(jìn)程的方法及裝置,通過一個(gè)獨(dú)立的服務(wù)程序監(jiān)控客戶端程序的進(jìn)程,當(dāng)獲知客戶端程序正在啟動(dòng)或運(yùn)行時(shí),服務(wù)程序會(huì)獲取客戶端程序的進(jìn)程模塊信息,并將進(jìn)程模塊信息與配置信息進(jìn)行校驗(yàn)。然后服務(wù)程序根據(jù)校驗(yàn)結(jié)果確定是否允許客戶端程序繼續(xù)運(yùn)行,若校驗(yàn)結(jié)果不一致,則關(guān)閉該客戶端程序的進(jìn)程,阻止該客戶端程序繼續(xù)運(yùn)行;或者若校驗(yàn)結(jié)果一致,則允許所述客戶端程序繼續(xù)運(yùn)行,從而達(dá)到監(jiān)控客戶端程序是否被修改的目的。并且這種監(jiān)控進(jìn)程的方法,其校驗(yàn)與被校驗(yàn)是兩個(gè)不同的進(jìn)程,能夠?qū)Ψ?wù)程序自身起到比較好的隱藏保護(hù)作用,同時(shí)在客戶端程序被校驗(yàn)時(shí),也不會(huì)影響到客戶端程序自身的運(yùn)行。附圖說明為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例提供的監(jiān)控進(jìn)程方法的流程圖;圖2為本發(fā)明實(shí)施例提供的監(jiān)控進(jìn)程裝置的結(jié)構(gòu)框圖。具體實(shí)施方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。圖1為本發(fā)明實(shí)施例提供的監(jiān)控進(jìn)程方法的流程圖,如圖1所示,該方法包括:s1,獲知當(dāng)前運(yùn)行的所有進(jìn)程中存在客戶端程序的進(jìn)程;s2,獲取所述客戶端程序的進(jìn)程模塊信息,并接收所述客戶端程序傳輸?shù)呐渲眯畔ⅲ籹3,將所述進(jìn)程模塊信息與所述配置信息進(jìn)行校驗(yàn);s4,若校驗(yàn)結(jié)果不一致,則終止所述客戶端程序運(yùn)行;或者若校驗(yàn)結(jié)果一致,則允許所述客戶端程序繼續(xù)運(yùn)行。其中,客戶端也可稱為用戶端,是指與服務(wù)器相對(duì)應(yīng),為客戶提供本地服務(wù)的程序。除了一些只在本地運(yùn)行的應(yīng)用程序之外,一般安裝在普通的客戶機(jī)上,需要與服務(wù)端互相配合運(yùn)行。因特網(wǎng)發(fā)展以后,較常用的用戶端包括了如萬維網(wǎng)使用的網(wǎng)頁瀏覽器、收寄電子郵件時(shí)的電子郵件客戶端、觀看直播時(shí)的直播軟件客戶端、以及即時(shí)通訊的客戶端軟件等。對(duì)于這一類應(yīng)用程序,需要網(wǎng)絡(luò)中有相應(yīng)的服務(wù)器和服務(wù)程序來提供相應(yīng)的服務(wù),如數(shù)據(jù)庫服務(wù),電子郵件服務(wù)等等,這樣在客戶機(jī)和服務(wù)器端,需要建立特定的通信連接,來保證應(yīng)用程序的正常運(yùn)行。其中,進(jìn)程是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。程序是指令、數(shù)據(jù)及其組織形式的描述,進(jìn)程是程序的實(shí)體。具體地,在監(jiān)控客戶端程序的進(jìn)程之前,先建立一個(gè)獨(dú)立的服務(wù)程序,并在服務(wù)器端對(duì)客戶端程序需要校驗(yàn)的模塊及代碼進(jìn)行配置。當(dāng)服務(wù)程序獲知當(dāng)前運(yùn)行的所有進(jìn)程中存在客戶端程序的進(jìn)程時(shí),也就是說客戶端程序正在啟動(dòng)或者運(yùn)行,此時(shí)服務(wù)程序會(huì)去獲取客戶端程序的進(jìn)程模塊信息,例如,進(jìn)程模塊信息為該客戶端程序進(jìn)程所有加載的動(dòng)態(tài)鏈接庫(dynamiclinklibrary,dll)信息,并且此時(shí)服務(wù)程序會(huì)接收到客戶端程序傳輸?shù)呐渲眯畔?。然后服?wù)程序?qū)ll信息與配置信息進(jìn)行校驗(yàn),若校驗(yàn)結(jié)果不一致,說明模塊被修改,此時(shí)服務(wù)程序?qū)⒔K止該客戶端程序運(yùn)行;若校驗(yàn)結(jié)果一致,說明模塊處于正常狀態(tài),此時(shí)服務(wù)程序?qū)⒃试S該客戶端程序繼續(xù)運(yùn)行。本發(fā)明實(shí)施例與現(xiàn)有技術(shù)相比,通過一個(gè)獨(dú)立的服務(wù)程序監(jiān)控客戶端程序的進(jìn)程,當(dāng)獲知客戶端程序正在啟動(dòng)或運(yùn)行時(shí),服務(wù)程序?qū)υ摽蛻舳顺绦虻倪M(jìn)程模塊信息與配置信息進(jìn)行校驗(yàn),若校驗(yàn)結(jié)果不一致,則關(guān)閉該客戶端程序的進(jìn)程,阻止該客戶端程序繼續(xù)運(yùn)行,從而達(dá)到監(jiān)控客戶端程序是否被修改的目的。并且這種監(jiān)控進(jìn)程的方法,其校驗(yàn)與被校驗(yàn)是兩個(gè)不同的進(jìn)程,能夠?qū)Ψ?wù)程序自身起到比較好的隱藏保護(hù)作用,同時(shí)在客戶端程序被校驗(yàn)時(shí),也不會(huì)影響到客戶端程序自身的運(yùn)行。其中,在服務(wù)程序建立好之后,會(huì)隨著客戶端程序一起打包到安裝程序中,當(dāng)?shù)谝淮螁?dòng)客戶端程序時(shí),則會(huì)調(diào)用系統(tǒng)命令來注冊(cè)一個(gè)服務(wù)程序。注冊(cè)服務(wù)程序可以使用命令行:sccreatesvnservebinpath=“服務(wù)程序的全路徑”然后調(diào)用命令行:scstart服務(wù)名來啟動(dòng)服務(wù)程序,其中服務(wù)名則是編寫的服務(wù)程序注冊(cè)的服務(wù)的名稱,這樣就實(shí)現(xiàn)了服務(wù)程序的打包及啟動(dòng)。通過將服務(wù)程序與客戶端程序打包到一個(gè)安裝包中,可以讓用戶在下載一次安裝包的情況下,既可以下載客戶端程序的安裝包,又可以下載校驗(yàn)該客戶端程序的服務(wù)程序的安裝包,為用戶的安裝提供方便。服務(wù)程序的建立步驟如下:1、定義一個(gè)服務(wù)轉(zhuǎn)發(fā)表結(jié)構(gòu)service_table_entryservicetable;servicetable[0].lpservicename=_t(service_name);servicetable[0].lpserviceproc=(lpservice_main_function)service_main;其中轉(zhuǎn)發(fā)表的結(jié)構(gòu)是service_table_entry,定義的變量是servicetable。而轉(zhuǎn)發(fā)表中有2個(gè)屬性,一個(gè)是注冊(cè)的服務(wù)的名稱,一個(gè)是服務(wù)的回調(diào)函數(shù)。其中服務(wù)的名稱指創(chuàng)建的服務(wù)程序的名稱,而回調(diào)函數(shù)則指明服務(wù)程序啟動(dòng)后會(huì)去執(zhí)行的函數(shù)。2、注冊(cè)服務(wù)入口函數(shù)通過調(diào)用系統(tǒng)api函數(shù)startservicectrldispatcher來注冊(cè)服務(wù)的入口函數(shù)。其中參數(shù)則填入步驟1創(chuàng)建的服務(wù)轉(zhuǎn)發(fā)表,從而在系統(tǒng)中創(chuàng)建了服務(wù)名稱和入口函數(shù)的對(duì)應(yīng)關(guān)系。當(dāng)服務(wù)程序啟動(dòng)時(shí)則會(huì)調(diào)用對(duì)應(yīng)的入口函數(shù)邏輯。3、編寫服務(wù)停止的回調(diào)函數(shù)當(dāng)服務(wù)程序被停止時(shí),則需要進(jìn)行一些服務(wù)的清理工作,包括釋放資源等等。即在服務(wù)程序啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)線程來監(jiān)控客戶端程序軟件進(jìn)程的啟動(dòng),那么在服務(wù)程序被停止時(shí),則需要停止這個(gè)線程的執(zhí)行,并釋放線程。此函數(shù)的原型如下:voidwinapiservicehandler(dwordfdwcontrol)其中參數(shù)dwordfdwcontrol標(biāo)示服務(wù)控制事件類型。那么當(dāng)收到類型為service_control_stop、service_control_shutdown則標(biāo)示服務(wù)被停止,那么此時(shí)則需要停止線程的執(zhí)行。具體為調(diào)用windows的函數(shù)terminatethread來停止線程,其中傳入創(chuàng)建的線程句柄。4、編寫服務(wù)的入口函數(shù)當(dāng)服務(wù)程序啟動(dòng)后會(huì)調(diào)用這個(gè)入口函數(shù),所以服務(wù)程序的所有邏輯都編寫在這個(gè)入口函數(shù)中。其函數(shù)原型如下:voidwinapiservice_main(intargc,char**argv)在此函數(shù)中需要編寫創(chuàng)建服務(wù)停止的回調(diào)函數(shù)注冊(cè),同時(shí)需要?jiǎng)?chuàng)建一個(gè)線程來執(zhí)行后續(xù)的監(jiān)控客戶端程序軟件進(jìn)程的啟動(dòng)功能。其中windows函數(shù)registerservicectrlhandler則是用來注冊(cè)一個(gè)服務(wù)的回調(diào)函數(shù),其函數(shù)原型如下:service_status_handlewinapiregisterservicectrlhandler(lpctstrlpservicename,lphandler_functionlphandlerproc);其中參數(shù)lpctstrlpservicename,標(biāo)示服務(wù)的名稱。其中參數(shù)lphandler_functionlphandlerproc標(biāo)示服務(wù)的回調(diào)函數(shù)。此回調(diào)函數(shù)則對(duì)應(yīng)于步驟3編寫的服務(wù)停止的回調(diào)函數(shù),當(dāng)服務(wù)停止時(shí)則會(huì)調(diào)用步驟3編寫的函數(shù)。同時(shí)在服務(wù)程序的入口函數(shù)中還要?jiǎng)?chuàng)建一個(gè)線程來監(jiān)控客戶端程序軟件進(jìn)程的啟動(dòng)。調(diào)用windows函數(shù)createthread來創(chuàng)建線程,實(shí)現(xiàn)如下:handletask_handle=createthread(null,null,check_thread,null,null,null);其中最重要的是線程的回調(diào)執(zhí)行函數(shù)check_thread函數(shù),此函數(shù)執(zhí)行線程的整個(gè)邏輯功能。至此,服務(wù)程序的建立過程已經(jīng)完成,然后將服務(wù)程序與客戶端程序一起打包到安裝程序中,方便用戶下載安裝。在上述實(shí)施例的基礎(chǔ)上,所述s1進(jìn)一步包括:每隔預(yù)設(shè)時(shí)間枚舉當(dāng)前運(yùn)行的所有進(jìn)程,并判斷所述所有進(jìn)程中是否存在所述客戶端程序的進(jìn)程。服務(wù)程序獲知當(dāng)前運(yùn)行的所有進(jìn)程中存在客戶端程序的進(jìn)程進(jìn)一步包括:服務(wù)程序會(huì)每隔預(yù)設(shè)時(shí)間枚舉系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程,例如,預(yù)設(shè)時(shí)間為30秒或者15秒等任意時(shí)間值,在本發(fā)明實(shí)施例中預(yù)設(shè)時(shí)間以30秒為例,但并不用于限制本發(fā)明的保護(hù)范圍。則服務(wù)程序會(huì)每隔30秒去枚舉系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程,然后在當(dāng)前運(yùn)行的所有進(jìn)程中判斷是否存在該客戶端程序的進(jìn)程,如果存在該客戶端程序的進(jìn)程,說明該客戶端程序正在啟動(dòng)或者運(yùn)行。此時(shí)服務(wù)程序會(huì)去獲取該客戶端程序的進(jìn)程模塊信息,并對(duì)該進(jìn)程模塊信息進(jìn)行校驗(yàn),若校驗(yàn)結(jié)果不一致,說明模塊被修改,服務(wù)程序?qū)⒆柚乖摽蛻舳顺绦蚶^續(xù)運(yùn)行。在本發(fā)明實(shí)施例中,通過服務(wù)程序每隔預(yù)設(shè)時(shí)間去枚舉當(dāng)前運(yùn)行的所有進(jìn)程,并在當(dāng)前運(yùn)行的所有進(jìn)程中判斷是否存在該客戶端程序的進(jìn)程,達(dá)到實(shí)時(shí)監(jiān)控客戶端程序的進(jìn)程的目的,從而能夠?qū)崟r(shí)校驗(yàn)客戶端程序是否被修改的目的,提高安全性。在上述實(shí)施例的基礎(chǔ)上,所述s2進(jìn)一步包括:客戶端程序每次登錄時(shí),服務(wù)器將所述配置信息發(fā)送至所述客戶端程序,所述客戶端程序再將所述配置信息通過進(jìn)程間通信的方式傳輸至所述服務(wù)器。其中,進(jìn)程間通信(interprocesscommunication,ipc)是一組編程接口,讓程序員能夠協(xié)調(diào)不同的進(jìn)程,使之能在一個(gè)操作系統(tǒng)里同時(shí)運(yùn)行,并相互傳遞和交換信息。這使得一個(gè)程序能夠在同一時(shí)間里處理許多用戶的要求。因?yàn)榧词怪挥幸粋€(gè)用戶發(fā)出要求,也可能導(dǎo)致一個(gè)操作系統(tǒng)中多個(gè)進(jìn)程的運(yùn)行,進(jìn)程之間必須互相通話,ipc接口就提供了這種可能性。ipc包括管道(pipe)、消息排隊(duì)、旗語、共用內(nèi)存以及套接字(socket)。在本發(fā)明實(shí)施例中,進(jìn)程間通信的方式以命名管道的方式為例進(jìn)行說明,但不用于限制本發(fā)明的保護(hù)范圍。其中,“命名管道”又名“命名管線”(namedpipes),是一種簡(jiǎn)單的進(jìn)程間通信(ipc)機(jī)制,microsoftwindows大都提供了對(duì)它的支持(但不包括windowsce)。命名管道可在同一臺(tái)計(jì)算機(jī)的不同進(jìn)程之間或在跨越一個(gè)網(wǎng)絡(luò)的不同計(jì)算機(jī)的不同進(jìn)程之間,支持可靠的、單向或雙向的數(shù)據(jù)通信。采用命名管道作為進(jìn)程通信方案的一項(xiàng)重要原因是因?yàn)樗鼈兛梢猿浞掷脀indows內(nèi)建的安全特性(acl等)。具體地,在客戶端程序登錄時(shí)便會(huì)與服務(wù)器建立連接關(guān)系,此時(shí)服務(wù)器將事先配置需要校驗(yàn)的配置信息發(fā)送至該客戶端程序,并且當(dāng)在服務(wù)器端對(duì)該客戶端程序的配置進(jìn)行更新時(shí),客戶端程序也可以通過服務(wù)器發(fā)送的配置信息進(jìn)行更新,從而達(dá)到不斷更新客戶端程序的目的。然后客戶端程序再將該配置信息通過命名管道的方式傳輸至服務(wù)器,例如,服務(wù)器為服務(wù)程序,也就是說,客戶端程序每開啟一次都會(huì)與服務(wù)程序建立一次命名管道通信,通過該命名管道通信的方式將客戶端程序接收到的配置信息傳輸至服務(wù)程序。在客戶端程序有更新的情況下,服務(wù)程序接收到的配置信息也隨著客戶端程序的更新而更新,使得服務(wù)程序?qū)Σ粩喔碌目蛻舳顺绦蛲瑯幽芷鸬奖O(jiān)控作用。然后服務(wù)程序?qū)⒃撆渲眯畔⑴c其獲取的客戶端程序的進(jìn)程模塊信息進(jìn)行校驗(yàn),達(dá)到監(jiān)控客戶端程序是否被修改的目的。在本發(fā)明實(shí)施例中,服務(wù)器在客戶端程序每次登陸時(shí)將所述配置信息發(fā)送至所述客戶端程序,所述客戶端程序再將所述配置信息通過進(jìn)程間通信的方式傳輸至服務(wù)器,達(dá)到不斷更新配置信息和客戶端程序的目的,并且服務(wù)器也可以根據(jù)更新的配置信息對(duì)不斷更新的客戶端程序進(jìn)行校驗(yàn)。在上述實(shí)施例的基礎(chǔ)上,所述s2中的配置信息包括:所述客戶端程序中的模塊名稱、模塊基址、模塊代碼段起始地址、模塊代碼長(zhǎng)度和校驗(yàn)值。具體地,在服務(wù)器端配置客戶端程序需要被校驗(yàn)的配置信息時(shí),該配置信息包括:客戶端程序中的模塊名稱、模塊基址、模塊代碼段起始地址、模塊代碼長(zhǎng)度和校驗(yàn)值。服務(wù)器可以使用正確的模塊計(jì)算得到正確的校驗(yàn)值。在客戶端程序啟動(dòng)時(shí),服務(wù)器將配置好的配置信息發(fā)送至客戶端程序,客戶端程序再通過進(jìn)程間通信的方式傳輸至服務(wù)程序。在上述實(shí)施例的基礎(chǔ)上,所述s1進(jìn)一步包括:通過調(diào)用函數(shù)createthread來創(chuàng)建線程函數(shù),所述線程函數(shù)用于每隔預(yù)設(shè)時(shí)間枚舉當(dāng)前運(yùn)行的所有進(jìn)程,并判斷所述所有進(jìn)程中是否存在所述客戶端程序的進(jìn)程。其中,函數(shù)createthread是windowsapi函數(shù)。該函數(shù)在主線程的基礎(chǔ)上創(chuàng)建一個(gè)新線程。具體地,通過啟動(dòng)服務(wù)程序則會(huì)調(diào)用函數(shù)createthread來創(chuàng)建一個(gè)線程函數(shù),該線程函數(shù)用于監(jiān)控客戶端程序的啟動(dòng)。即線程函數(shù)每隔預(yù)設(shè)時(shí)間(例如,預(yù)設(shè)時(shí)間為30秒)去枚舉系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程,然后判斷當(dāng)前進(jìn)程中是否有客戶端程序的進(jìn)程,如果有則調(diào)用對(duì)客戶端程序進(jìn)程模塊的檢測(cè)功能,如果沒有則繼續(xù)等待下次預(yù)設(shè)時(shí)間來枚舉。調(diào)用windows函數(shù)createthread來創(chuàng)建線程函數(shù),具體如下:handletask_handle=createthread(null,null,check_thread,null,null,null);其中最重要的是線程的回調(diào)執(zhí)行函數(shù)check_thread函數(shù),此函數(shù)執(zhí)行線程的整個(gè)邏輯功能。線程函數(shù)枚舉系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程,并判斷當(dāng)前進(jìn)程中是否有客戶端程序進(jìn)程的步驟具體如下:1、獲取系統(tǒng)進(jìn)程名列表的快照hsnapshot=createtoolhelp32snapshot(th32cs_snapall,0)通過調(diào)用系統(tǒng)api函數(shù)createtoolhelp32snapshot來獲取系統(tǒng)進(jìn)程名的快照,其中傳入?yún)?shù)1th32cs_snapprocess,標(biāo)示獲取的是進(jìn)程的快照,第二個(gè)參數(shù)為0標(biāo)示獲取當(dāng)前系統(tǒng)的進(jìn)程列表。2、獲取第一個(gè)進(jìn)程的名字process32first(hsnapshot,&procentry32)通過調(diào)用系統(tǒng)api函數(shù)process32first來獲取系統(tǒng)的第一個(gè)進(jìn)程的信息。其中第一個(gè)參數(shù)hsnapshot是步驟1獲取進(jìn)程列表快照的句柄,第二個(gè)參數(shù)則用于返回獲取的進(jìn)程的信息,其中procentry32有一個(gè)屬性szexefile是進(jìn)程的名字,所以procentry32.szexefile是進(jìn)程的名字。3、獲取系統(tǒng)剩下所有進(jìn)程的名字while(bmore){bmore=process32next(hprocesssnap,&procentry32);}通過一個(gè)while循環(huán)來調(diào)用函數(shù)process32next不斷的獲取下一個(gè)進(jìn)程的名字,直到所有進(jìn)程都獲取完畢。每調(diào)用一次process32next則從procentry32.szexefile中獲取到一個(gè)進(jìn)程的名字。通過上述步驟可以獲取到系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程名稱列表。4、從所有進(jìn)程名稱列表中判斷是否存在客戶端程序的進(jìn)程獲取到系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程名列表后,可以從所有進(jìn)程列表中判斷是否存在客戶端程序的進(jìn)程。如果存在該客戶端程序的進(jìn)程,則后續(xù)會(huì)獲取客戶端進(jìn)程中的模塊信息,然后對(duì)每個(gè)模塊進(jìn)行校驗(yàn)。在本發(fā)明實(shí)施例中,服務(wù)程序通過調(diào)用函數(shù)createthread來創(chuàng)建一個(gè)線程函數(shù),然后通過該線程函數(shù)監(jiān)控客戶端程序的啟動(dòng),當(dāng)客戶端程序啟動(dòng)或者運(yùn)行時(shí),服務(wù)程序就會(huì)對(duì)其進(jìn)行校驗(yàn),從而達(dá)到實(shí)時(shí)校驗(yàn)客戶端程序是否被修改的目的,提高安全性。在上述實(shí)施例的基礎(chǔ)上,所述s2中獲取所述客戶端程序的進(jìn)程模塊信息進(jìn)一步包括:通過調(diào)用函數(shù)createtoolhelp32snapshot來獲取所述客戶端程序的進(jìn)程模塊信息。其中,createtoolhelp32snapshot可以通過獲取進(jìn)程信息為指定的進(jìn)程、進(jìn)程使用的堆[heap]、模塊[module]、線程建立一個(gè)快照。具體地,當(dāng)服務(wù)程序的線程函數(shù)監(jiān)控到客戶端程序在啟動(dòng)或者運(yùn)行后,則會(huì)調(diào)用函數(shù)createtoolhelp32snapshot去獲取客戶端程序的所有加載模塊信息,然后對(duì)每個(gè)模塊進(jìn)行校驗(yàn)。具體實(shí)現(xiàn)如下:通過調(diào)用windowsapi函數(shù)createtoolhelp32snapshot來獲取加載的所有模塊列表的快照。createtoolhelp32snapshot(th32cs_snapmodule,processid);其中參數(shù)th32cs_snapmodule標(biāo)示獲取客戶端程序進(jìn)程模塊的快照。其中參數(shù)processid則是客戶端程序進(jìn)程的id。bmodule=module32first(hmodule,&mem32);然后調(diào)用windowsapi函數(shù)module32first來獲取第一個(gè)模塊的名稱。其中mem32結(jié)構(gòu)中szexepath則是模塊的名稱。while(bmodule){bmodule=module32next(hmodule,&mem32);}然后通過一個(gè)while循環(huán)不斷的調(diào)用函數(shù)module32next來獲取下一個(gè)模塊的名稱。其中mem32結(jié)構(gòu)中szexepath則是模塊的名稱,其中mem32結(jié)構(gòu)中modbaseaddr則是模塊加載的內(nèi)存基址。通過上述步驟則獲取到客戶端程序進(jìn)程加載的所有模塊的名稱列表。在本發(fā)明實(shí)施例中,當(dāng)服務(wù)程序監(jiān)控到客戶端程序啟動(dòng)或者運(yùn)行后,則通過調(diào)用函數(shù)createtoolhelp32snapshot來獲取所述客戶端程序的進(jìn)程模塊信息,然后對(duì)進(jìn)程模塊信息進(jìn)行校驗(yàn),達(dá)到只要客戶端程序啟動(dòng)或者運(yùn)行,則對(duì)其進(jìn)行校驗(yàn)的目的,提高安全性。在上述實(shí)施例的基礎(chǔ)上,所述s3中的所述進(jìn)程模塊信息與所述配置信息進(jìn)行校驗(yàn)為進(jìn)行hash校驗(yàn)。其中,hash一般翻譯為“散列”,也可直接音譯為“哈?!?,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射,pre-image),通過散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。簡(jiǎn)單的說就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。具體地,在服務(wù)程序已經(jīng)獲取到客戶端程序的進(jìn)程模塊信息后,例如,進(jìn)程模塊信息為客戶端程序所有加載的模塊名稱、模塊基址、模塊代碼段起始地址和模塊代碼長(zhǎng)度。從而可以從服務(wù)器下發(fā)到客戶端程序,然后客戶端程序再傳輸至服務(wù)程序的配置信息中來對(duì)客戶端程序中的每個(gè)模塊的代碼進(jìn)行hash校驗(yàn)。由于每個(gè)模塊在內(nèi)存中加載的起始地址不一樣,所以先需要對(duì)校驗(yàn)的模塊代碼進(jìn)行安裝、服務(wù)器下發(fā)的地址進(jìn)行重定位,重定位后再來計(jì)算模塊的內(nèi)存hash值。hash計(jì)算后再校驗(yàn)結(jié)果是否一致,如果校驗(yàn)結(jié)果一致表明該模塊是正常的沒有被修改,此時(shí)服務(wù)程序?qū)⒃试S客戶端程序繼續(xù)運(yùn)行,如果校驗(yàn)結(jié)果不一樣則說明模塊被修改,此時(shí)服務(wù)程序?qū)⒔K止客戶端程序的運(yùn)行。圖2為本發(fā)明實(shí)施例提供的監(jiān)控進(jìn)程裝置的結(jié)構(gòu)框圖,如圖2所示,該裝置包括獲知模塊201、處理模塊202、校驗(yàn)?zāi)K203和執(zhí)行模塊204。獲知模塊201用于獲知當(dāng)前運(yùn)行的所有進(jìn)程中存在客戶端程序的進(jìn)程。處理模塊202用于獲取客戶端程序的進(jìn)程模塊信息,并接收所述客戶端程序傳輸?shù)呐渲眯畔?。校?yàn)?zāi)K203用于將所述進(jìn)程模塊信息與所述配置信息進(jìn)行校驗(yàn)。執(zhí)行模塊204用于若校驗(yàn)結(jié)果不一致,則終止所述客戶端程序運(yùn)行;或者若校驗(yàn)結(jié)果一致,則允許所述客戶端程序繼續(xù)運(yùn)行。具體地,在監(jiān)控客戶端程序的進(jìn)程之前,在服務(wù)器端對(duì)客戶端程序需要校驗(yàn)的模塊及代碼進(jìn)行配置。當(dāng)獲知模塊201獲知系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程中存在客戶端程序的進(jìn)程,也就是說客戶端程序正在啟動(dòng)或者運(yùn)行,此時(shí)處理模塊202會(huì)去獲取客戶端程序的進(jìn)程模塊信息,此時(shí)處理模塊202還會(huì)接收到客戶端程序傳輸?shù)呐渲眯畔ⅰH缓笮r?yàn)?zāi)K203將進(jìn)程模塊信息與配置信息進(jìn)行校驗(yàn),執(zhí)行模塊204根據(jù)校驗(yàn)結(jié)果來確定是否允許客戶端程序繼續(xù)運(yùn)行,若校驗(yàn)結(jié)果不一致,說明模塊被修改,此時(shí)執(zhí)行模塊204將終止該客戶端程序運(yùn)行;或者若校驗(yàn)結(jié)果一致,說明模塊處于正常狀態(tài),此時(shí)執(zhí)行模塊204將允許該客戶端程序繼續(xù)運(yùn)行。本發(fā)明實(shí)施例與現(xiàn)有技術(shù)相比,通過判斷模塊監(jiān)控客戶端程序的進(jìn)程,當(dāng)獲知客戶端程序正在啟動(dòng)或者運(yùn)行時(shí),處理模塊會(huì)去獲取客戶端程序的進(jìn)程模塊信息,然后校驗(yàn)?zāi)K對(duì)該進(jìn)程模塊信息進(jìn)行校驗(yàn),最后執(zhí)行模塊根據(jù)校驗(yàn)結(jié)果來確定是否允許客戶端程序繼續(xù)運(yùn)行,從而達(dá)到監(jiān)控客戶端程序是否被修改的目的。并且這種監(jiān)控進(jìn)程的方法,其校驗(yàn)和被校驗(yàn)是兩個(gè)不同的進(jìn)程,能夠?qū)Ψ?wù)程序自身起到比較好的隱藏保護(hù)作用,同時(shí)在對(duì)客戶端程序被校驗(yàn)時(shí),也不會(huì)影響到客戶端程序自身的運(yùn)行。在上述圖2所示實(shí)施例的基礎(chǔ)上,所述獲知模塊201進(jìn)一步用于每隔預(yù)設(shè)時(shí)間枚舉當(dāng)前運(yùn)行的所有進(jìn)程,并判斷所述所有進(jìn)程中是否存在所述客戶端程序的進(jìn)程。獲知模塊201獲知當(dāng)前運(yùn)行的所有進(jìn)程中存在客戶端程序的進(jìn)程具體為:獲知模塊201會(huì)每隔預(yù)設(shè)時(shí)間枚舉系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程,例如,預(yù)設(shè)時(shí)間為30秒或者15秒等任意時(shí)間值,在本發(fā)明實(shí)施例中預(yù)設(shè)時(shí)間以20秒為例,但并不用于限制本發(fā)明的保護(hù)范圍。則獲知模塊201會(huì)每隔20秒去枚舉系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程,然后在所有進(jìn)程中判斷是否存在該客戶端程序的進(jìn)程,如果存在該客戶端程序的進(jìn)程,說明該客戶端程序正在啟動(dòng)或者運(yùn)行。此時(shí)處理模塊202會(huì)去獲取該客戶端程序的進(jìn)程模塊信息,然后校驗(yàn)?zāi)K203對(duì)該進(jìn)程模塊信息進(jìn)行校驗(yàn),執(zhí)行模塊204再根據(jù)校驗(yàn)結(jié)果確定是否允許客戶端程序繼續(xù)運(yùn)行,若校驗(yàn)結(jié)果不一致,說明模塊被修改,則阻止該客戶端程序繼續(xù)運(yùn)行。在本發(fā)明實(shí)施例中,通過獲知模塊每隔預(yù)設(shè)時(shí)間去枚舉系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程,并在所有進(jìn)程中判斷是否存在該客戶端程序的進(jìn)程,達(dá)到實(shí)時(shí)監(jiān)控客戶端程序的進(jìn)程的目的,并能夠?qū)崟r(shí)校驗(yàn)客戶端程序是否被修改的目的。在上述各實(shí)施例提供的監(jiān)控客戶端程序的方法及裝置,通過注冊(cè)一個(gè)服務(wù)程序,然后通過服務(wù)程序每隔預(yù)設(shè)時(shí)間去枚舉系統(tǒng)當(dāng)前運(yùn)行的所有進(jìn)程,如果獲知當(dāng)前運(yùn)行的所有進(jìn)程中存在該應(yīng)用程的進(jìn)程,則服務(wù)程序同時(shí)會(huì)去獲取該客戶端程序進(jìn)程所有加載的dll信息,并對(duì)該dll中的代碼進(jìn)行校驗(yàn),若校驗(yàn)結(jié)果不一致,則關(guān)閉該客戶端程序進(jìn)程,阻止該客戶端程序繼續(xù)使用,從而達(dá)到實(shí)時(shí)監(jiān)控客戶端程序是否被黑客修改的目的。并且這種監(jiān)控客戶端程序的方法,其校驗(yàn)與被校驗(yàn)是兩個(gè)不同的進(jìn)程,能夠?qū)Ψ?wù)程序自身起到比較好的隱藏保護(hù)作用,同時(shí)在本方法中只要該客戶端程序進(jìn)程存在,服務(wù)程序會(huì)一直對(duì)該進(jìn)程的所有模塊進(jìn)行校驗(yàn),提高安全性。最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。當(dāng)前第1頁12當(dāng)前第1頁12
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
洛浦县| 石屏县| 温泉县| 平邑县| 松江区| 南城县| 年辖:市辖区| 石泉县| 商洛市| 商丘市| 安陆市| 鸡东县| 洮南市| 聂拉木县| 重庆市| 宿迁市| 莱州市| 乌恰县| 天镇县| 铁力市| 元江| 高陵县| 太和县| 杭锦后旗| 柘城县| 江川县| 锦屏县| 迁西县| 丰都县| 屯门区| 玛沁县| 保山市| 镇原县| 新和县| 株洲市| 绥芬河市| 大竹县| 奈曼旗| 大安市| 和林格尔县| 崇明县|