專利名稱:基于Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程保護(hù)技術(shù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程保護(hù)技 術(shù),即InforGuard網(wǎng)頁(yè)防篡改系統(tǒng)中間件基于線程注入4支術(shù)的進(jìn)程保 護(hù)機(jī)制。
背景技術(shù):
在Windows系統(tǒng)中,普通的非系統(tǒng)進(jìn)程,能夠^:系統(tǒng)管理工具或 其他普通進(jìn)程強(qiáng)制關(guān)閉。對(duì)于安全產(chǎn)品,有時(shí)需要將自己的進(jìn)程保護(hù) 起來(lái),防止其被惡意關(guān)閉。
目前基于Windows系統(tǒng)的進(jìn)程保護(hù)技術(shù),簡(jiǎn)要分析如下
1. 雙進(jìn)程守護(hù)才幾制
在同 一系統(tǒng)中啟動(dòng)兩個(gè)進(jìn)程,相互之間完成守護(hù), 一個(gè)異常退出時(shí), 另一個(gè)將其重新啟動(dòng)。該機(jī)制在系統(tǒng)異常處理方面有一定意義,但針
于惡意的進(jìn)程破壞,是沒(méi)有作用的。
2. 桌面進(jìn)程機(jī)制
通過(guò)修改Windows的登錄例程庫(kù),可以在系統(tǒng)登錄之前,啟動(dòng)應(yīng)用 程序,此類進(jìn)程叫作桌面進(jìn)程。桌面進(jìn)程相對(duì)于用戶進(jìn)程屬于系統(tǒng)進(jìn) 程,不會(huì)被任務(wù)管理器等常規(guī)方式強(qiáng)行關(guān)閉。但該方法實(shí)現(xiàn)復(fù)雜,且 容易在系統(tǒng)級(jí)產(chǎn)生破壞作用。
3. 驅(qū)動(dòng)隱藏進(jìn)程機(jī)制
該方式是通過(guò)編寫并執(zhí)行驅(qū)動(dòng)程序,以在核心態(tài){多改系統(tǒng)進(jìn)程鏈 表,將需要保護(hù)的進(jìn)程信息隱藏。該方式的保護(hù)效果很好,但實(shí)現(xiàn)技 術(shù)難度高,容易因失敗導(dǎo)致系統(tǒng)崩潰。
發(fā)明內(nèi)容
本發(fā)明的目的就是針對(duì)上述的不足,提供了一種巧妙地將遠(yuǎn)程線 程注入的隱蔽性靈活應(yīng)用于進(jìn)程保護(hù)的方案,本方案解決了進(jìn)程保護(hù) 應(yīng)用中的隱蔽性問(wèn)題,同時(shí)兼顧實(shí)現(xiàn)的技術(shù)難度和穩(wěn)定性問(wèn)題。
該發(fā)明首先是通過(guò)Windows系統(tǒng)API調(diào)用,實(shí)現(xiàn)對(duì)遠(yuǎn)程線程的代 碼注入,即把用戶指定的一段代碼,以線程方式運(yùn)行在已經(jīng)存在的其 他進(jìn)程空間中,以達(dá)到代碼隱藏的目的。然后,由該隱藏的代碼,守 護(hù)被保護(hù)的目標(biāo)進(jìn)程, 一旦發(fā)現(xiàn)目標(biāo)進(jìn)程一皮破壞,則重新啟動(dòng)目標(biāo)進(jìn) 程。
本發(fā)明是通過(guò)如下技術(shù)實(shí)現(xiàn)的 一種基于Windows系統(tǒng)遠(yuǎn)程線程 監(jiān)控的進(jìn)程保護(hù)技術(shù),包括如下步驟
第一步實(shí)施遠(yuǎn)程線控注入; 第二步應(yīng)用進(jìn)程控制。
所述實(shí)施遠(yuǎn)程線控注入是通過(guò)如下步驟實(shí)現(xiàn)的
首先,執(zhí)行遠(yuǎn)程線程注入;實(shí)施保護(hù)的進(jìn)程(或被保護(hù)的進(jìn)程自 身)啟動(dòng)時(shí),在當(dāng)前系統(tǒng)中尋找可進(jìn)行遠(yuǎn)程線程注入的宿主進(jìn)程,該 將本進(jìn)程內(nèi)定義為遠(yuǎn)程線程的 一段代碼,啟動(dòng)為宿主進(jìn)程空間內(nèi)的線 程,此過(guò)程稱為遠(yuǎn)程線程注入。宿主進(jìn)程必須是持久運(yùn)行的進(jìn)程,否 則宿主進(jìn)程一旦退出,注入線程就會(huì)結(jié)束。
然后,設(shè)置保護(hù)信息,保護(hù)進(jìn)程在啟動(dòng)遠(yuǎn)程線程后,通過(guò)寫遠(yuǎn)程 線程數(shù)據(jù)區(qū)的方式,告知遠(yuǎn)程線程需要保護(hù)的進(jìn)程信息及相關(guān)策略, 如檢測(cè)間隔時(shí)間,被保護(hù)進(jìn)程啟動(dòng)失敗重試策略等等;
最后,結(jié)束保護(hù),保護(hù)進(jìn)程退出運(yùn)行狀態(tài),僅遠(yuǎn)程線程運(yùn)行以便 實(shí)現(xiàn)進(jìn)程保護(hù)功能;當(dāng)不再需要保護(hù)功能時(shí),保護(hù)進(jìn)程再次啟動(dòng),并 通知遠(yuǎn)程線程結(jié)束運(yùn)行,從而結(jié)束保護(hù)。
所述實(shí)施遠(yuǎn)程線程注入是通過(guò)如下步驟實(shí)現(xiàn)的
首先,創(chuàng)建線程函數(shù)體,填寫線程參數(shù)和代碼;
然后,將線程代碼拷貝到目標(biāo)進(jìn)程地址空間中或者其他宿主進(jìn)程 能執(zhí)行地方(如共享內(nèi)存映射區(qū));選擇宿主進(jìn)程拷貝線程體的時(shí), 需要使用VirtualAllocEx函數(shù)在宿主進(jìn)程中申請(qǐng)一塊存儲(chǔ)區(qū)域,然后 再通過(guò)WriteProcessMemory函數(shù)將線程代碼寫入宿主進(jìn)程中。
最后,在宿主進(jìn)程中用CreateRemoteThread函數(shù)創(chuàng)建遠(yuǎn)程線程。
實(shí)現(xiàn)所述應(yīng)用進(jìn)程控制是通過(guò)如下步驟實(shí)現(xiàn)的
首先,檢測(cè)進(jìn)行存在狀態(tài),遠(yuǎn)程線程一直運(yùn)行,并定時(shí)檢測(cè)被保 護(hù)進(jìn)程的運(yùn)行狀態(tài),主要是利用系統(tǒng)函數(shù)EnumProcesses沖文舉當(dāng)前系 統(tǒng)的進(jìn)程列表,查看被保護(hù)進(jìn)程是否存在;
其次,檢測(cè)進(jìn)程控制狀態(tài),從線程數(shù)據(jù)區(qū)獲取當(dāng)前設(shè)置的被保護(hù) 進(jìn)程狀態(tài),并進(jìn)行判斷;
最后,根據(jù)進(jìn)程狀態(tài)及線程數(shù)據(jù)控制進(jìn)程,如果上述判斷當(dāng)前運(yùn) 行狀態(tài)為"未啟動(dòng)",且當(dāng)前設(shè)置狀態(tài)為"啟動(dòng)",則執(zhí)行啟動(dòng)過(guò)程; 如果當(dāng)前運(yùn)行狀態(tài)為"啟動(dòng),,,且當(dāng)前設(shè)置狀態(tài)為"未啟動(dòng)",則執(zhí)行 停止過(guò)程;否則不執(zhí)行任務(wù)處理。
據(jù)外部設(shè)置的進(jìn)程狀態(tài),靈活地控制被保護(hù)進(jìn)程的運(yùn)行狀態(tài):i進(jìn)程 保護(hù)方法,將遠(yuǎn)程線程的隱密性和進(jìn)程狀態(tài)控制巧妙地結(jié)合起來(lái),滿
足了進(jìn)程保護(hù)的安全性需要。遠(yuǎn)程線程注入技術(shù)實(shí)現(xiàn)筒便,安全性容 易控制,但其隱藏性卻很好,針對(duì)惡意的進(jìn)程破壞,能夠達(dá)到保護(hù)進(jìn)
程的目的。
圖1為本發(fā)明實(shí)施例中執(zhí)行遠(yuǎn)程線控注入流程圖; 圖2為本發(fā)明實(shí)施例中應(yīng)用進(jìn)程控制流程圖。
具體實(shí)施例方式
下面將對(duì)本發(fā)明的實(shí)施方式進(jìn)行詳細(xì)說(shuō)明。
一種基于Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程保護(hù)技術(shù),是通過(guò)如 下步驟實(shí)現(xiàn)的共可以分為兩個(gè)步驟, 一為實(shí)施遠(yuǎn)程線控注入,如圖 1, 二為應(yīng)用進(jìn)程控制,如圖2。
其中,如圖1所示,實(shí)現(xiàn)第一步實(shí)施遠(yuǎn)程線控注入是通過(guò)如下步 驟實(shí)現(xiàn)的
首先開始步驟101,執(zhí)行遠(yuǎn)程線程注入。所述執(zhí)行遠(yuǎn)程線程注入 是通過(guò)如下步驟實(shí)現(xiàn)的
首先,創(chuàng)建線程函數(shù)體,填寫線程參數(shù)和代碼。
然后,將線程代碼拷貝到目標(biāo)進(jìn)程地址空間中(該地址必須是頁(yè) 面屬性為PAGE_EXECUTE_READWRITE的頁(yè)面)或者其他宿主進(jìn)程能執(zhí)行 地方(如共享內(nèi)存映射區(qū))。選擇宿主進(jìn)程拷貝線程體的時(shí),需要使 用VirtualAllocEx函數(shù)在宿主進(jìn)程中申請(qǐng)一塊存儲(chǔ)區(qū)域,然后再通過(guò) WriteProcessMe隨y函數(shù)將線程代碼寫入宿主進(jìn)程中。
最后,在宿主進(jìn)程中用CreateRemoteThread函數(shù)創(chuàng)建遠(yuǎn)程線程。
然后進(jìn)行步驟102,設(shè)置保護(hù)信息,保護(hù)進(jìn)程在啟動(dòng)遠(yuǎn)程線程后, 通過(guò)寫遠(yuǎn)程線程數(shù)據(jù)區(qū)的方式,告知遠(yuǎn)程線程需要保護(hù)的進(jìn)程信息及 相關(guān)策略。如檢測(cè)間隔時(shí)間,被保護(hù)進(jìn)程啟動(dòng)失敗重試策略等等。
最后進(jìn)行步驟103,結(jié)束保護(hù)。保護(hù)進(jìn)程退出運(yùn)行狀態(tài),僅遠(yuǎn)程 線程運(yùn)行以便實(shí)現(xiàn)進(jìn)程保護(hù)功能;當(dāng)不再需要保護(hù)功能時(shí),保護(hù)進(jìn)程 再次啟動(dòng),并通知遠(yuǎn)程線程結(jié)束運(yùn)行,從而結(jié)束保護(hù)。
如圖2所示,應(yīng)用進(jìn)程控制是通過(guò)如下步驟實(shí)現(xiàn)的
首先開始步驟201,檢測(cè)進(jìn)行存在狀態(tài),遠(yuǎn)程線程一直運(yùn)行,并 定時(shí)檢測(cè)被保護(hù)進(jìn)程的運(yùn)行狀態(tài)。
然后進(jìn)行步驟202,檢測(cè)進(jìn)程控制狀態(tài),從線程數(shù)據(jù)區(qū)獲取當(dāng)前 設(shè)置的被保護(hù)進(jìn)程狀態(tài),并進(jìn)行判斷。
最后進(jìn)行步驟203,根據(jù)進(jìn)程狀態(tài)及線程數(shù)據(jù)控制進(jìn)程,如果上
述判斷當(dāng)前運(yùn)行狀態(tài)為"未啟動(dòng)",且當(dāng)前設(shè)置狀態(tài)為"啟動(dòng)",則執(zhí)
行啟動(dòng)過(guò)程;如果當(dāng)前運(yùn)行狀態(tài)為"啟動(dòng)",且當(dāng)前設(shè)置狀態(tài)為"未啟 動(dòng)",則執(zhí)行停止過(guò)程;否則不執(zhí)行任務(wù)處理。
權(quán)利要求
1. 一種基于Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程保護(hù)技術(shù),其特征在于包括如下步驟第一步實(shí)施遠(yuǎn)程線控注入;第二步應(yīng)用進(jìn)程控制。
2. 根據(jù)權(quán)利要求1所述的Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程保護(hù) 技術(shù),其特征在于所述實(shí)施遠(yuǎn)程線控注入是通過(guò)如下步驟實(shí)現(xiàn)的首先,執(zhí)行遠(yuǎn)程線程注入;然后,設(shè)置保護(hù)信息,保護(hù)進(jìn)程在啟動(dòng)遠(yuǎn)程線程后,通過(guò)寫遠(yuǎn)程 線程數(shù)據(jù)區(qū)的方式,告知遠(yuǎn)程線程需要保護(hù)的進(jìn)程信息及相關(guān)策略;最后,結(jié)束保護(hù),保護(hù)進(jìn)程退出運(yùn)行狀態(tài),僅遠(yuǎn)程線程運(yùn)行以便 實(shí)現(xiàn)進(jìn)程保護(hù)功能;當(dāng)不再需要保護(hù)功能時(shí),保護(hù)進(jìn)程再次啟動(dòng),并 通知遠(yuǎn)程線程結(jié)束運(yùn)行,從而結(jié)束保護(hù)。
3. 根據(jù)權(quán)利要求1或2所述的Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程 保護(hù)技術(shù),其特征在于所述執(zhí)行遠(yuǎn)程線程注入是通過(guò)如下步驟實(shí)現(xiàn)的首先,創(chuàng)建線程函數(shù)體,填寫線程參數(shù)和代碼; 然后,將線程代碼拷貝到目標(biāo)進(jìn)程地址空間中或者其他宿主進(jìn)程 能寺丸4于地方;最后,在宿主進(jìn)程中用CreateRemoteThread函數(shù)創(chuàng)建遠(yuǎn)程線程。
4. 根據(jù)權(quán)利要求3所述的Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程保護(hù) 技術(shù),其特征在于所述目標(biāo)地址空間為頁(yè)面屬性為 PAGE-EXECUTE-READWRITE的頁(yè)面。
5. 根據(jù)權(quán)利要求1所述的Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程保護(hù) 技術(shù),其特征在于實(shí)現(xiàn)所述應(yīng)用進(jìn)程控制是通過(guò)如下步驟實(shí)現(xiàn)的首先,檢測(cè)進(jìn)行存在狀態(tài),遠(yuǎn)程線程一直運(yùn)行,并定時(shí)檢測(cè)被保 護(hù)進(jìn)程的運(yùn)行狀態(tài);其次,檢測(cè)進(jìn)程控制狀態(tài),從線程數(shù)據(jù)區(qū)獲取當(dāng)前設(shè)置的被保護(hù) 進(jìn)程狀態(tài),并進(jìn)行判斷;最后,根據(jù)進(jìn)程狀態(tài)及線程數(shù)據(jù)控制進(jìn)程,如果上述判斷當(dāng)前運(yùn) 行狀態(tài)為"未啟動(dòng)",且當(dāng)前設(shè)置狀態(tài)為"啟動(dòng)",則執(zhí)行啟動(dòng)過(guò)程; 如果當(dāng)前運(yùn)行狀態(tài)為"啟動(dòng)",且當(dāng)前設(shè)置狀態(tài)為"未啟動(dòng)",則執(zhí)行 停止過(guò)程;否則不執(zhí)行任務(wù)處理。
全文摘要
本發(fā)明涉及一種基于Windows系統(tǒng)遠(yuǎn)程線程監(jiān)控的進(jìn)程保護(hù)技術(shù),即InforGuard網(wǎng)頁(yè)防篡改系統(tǒng)中間件基于線程注入技術(shù)的進(jìn)程保護(hù)機(jī)制。包括如下步驟第一步實(shí)施遠(yuǎn)程線控注入;第二步應(yīng)用進(jìn)程控制。本發(fā)明提供了一種巧妙地將遠(yuǎn)程線程注入的隱蔽性靈活應(yīng)用于進(jìn)程保護(hù)的方案,本方案解決了進(jìn)程保護(hù)應(yīng)用中的隱蔽性問(wèn)題,同時(shí)兼顧實(shí)現(xiàn)的技術(shù)難度和穩(wěn)定性問(wèn)題。
文檔編號(hào)G06F21/22GK101388061SQ20081015847
公開日2009年3月18日 申請(qǐng)日期2008年11月5日 優(yōu)先權(quán)日2008年11月5日
發(fā)明者春 劉, 靖 劉, 劉宗福, 劉慶良, 劉江寧, 景新海, 磊 石, 程建平 申請(qǐng)人:山東中創(chuàng)軟件工程股份有限公司