專(zhuān)利名稱(chēng):一種用于枚舉系統(tǒng)進(jìn)程的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種用于枚舉系統(tǒng)進(jìn)程的方法。本發(fā)明還涉及一種用于枚舉系統(tǒng)進(jìn)程的裝置。
背景技術(shù):
Windows任務(wù)管理器可以枚舉出系統(tǒng)當(dāng)前的進(jìn)程,并能夠根據(jù)需要選擇終止進(jìn)程。 為管理系統(tǒng)進(jìn)程提供了很大的便利。
Windows任務(wù)管理器枚舉系統(tǒng)當(dāng)前進(jìn)程是通過(guò)其N(xiāo)ative API函數(shù) ZwQuerySystemInfomation來(lái)操作進(jìn)程活動(dòng)鏈表來(lái)實(shí)現(xiàn)的。具體的過(guò)程如下
首先,獲取當(dāng)前任一進(jìn)程的指針,例如可以通過(guò)PsGetCurrentProcess O來(lái)獲取當(dāng)前進(jìn)程的PEPR0CESS指針。
然后定位到記錄該當(dāng)前進(jìn)程與其它進(jìn)程鏈接信息的Activelist處,具體的操作方式為ActiveList = pCurrentEprocess+0x88,即當(dāng)前進(jìn)程指針移動(dòng)一定的步長(zhǎng)。其中 0x88為winxp sp3下Activelist與pCurrentEprocess的步長(zhǎng),在不同win操作系統(tǒng)時(shí)該步長(zhǎng)并不相同。
接著,以所定位的當(dāng)前進(jìn)程的Activelist遍歷整個(gè)進(jìn)程活動(dòng)鏈表 (Activelistlink)上每一進(jìn)程的數(shù)據(jù)結(jié) 構(gòu),即可獲得當(dāng)前的存在于進(jìn)程活動(dòng)鏈表的所有進(jìn)程。
如上所述,因?yàn)閣indows任務(wù)管理器是基于ZwQuerySystemInformation來(lái)實(shí)現(xiàn)的,所以如果將進(jìn)程對(duì)象從進(jìn)程活動(dòng)鏈表中移除,那么調(diào)用NtQuerySystemInfomation來(lái)枚舉進(jìn)程的任務(wù)管理器TaskMgr. exe中就不會(huì)看到目標(biāo)進(jìn)程了。同時(shí),Windows的任務(wù)調(diào)度分配器使用的另一的數(shù)據(jù)結(jié)構(gòu),也就是說(shuō),進(jìn)程是否被調(diào)度執(zhí)行與進(jìn)程活動(dòng)鏈表無(wú)關(guān),不會(huì)因?yàn)閺倪M(jìn)程活動(dòng)鏈表刪除就被CPU忽略,因此進(jìn)程仍然會(huì)被執(zhí)行。這很容易被一些惡意軟件或者RootKit程序利用,在進(jìn)程活動(dòng)鏈表上不顯示其存在,但是仍然被執(zhí)行,這可能導(dǎo)致用戶(hù)的計(jì)算機(jī)在不知不覺(jué)中被感染病毒、植入木馬或者竊取了信息,對(duì)計(jì)算機(jī)造成潛在的或現(xiàn)實(shí)的威脅。因而有必要能夠查找出這種被進(jìn)程活動(dòng)鏈表忽略而實(shí)質(zhì)上又在被執(zhí)行的隱藏進(jìn)程。發(fā)明內(nèi)容
鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的用于枚舉系統(tǒng)進(jìn)程的方法和相應(yīng)的用于枚舉系統(tǒng)進(jìn)程的裝置。
依據(jù)本發(fā)明的一個(gè)方面,提供一種用于枚舉系統(tǒng)進(jìn)程的方法,包括
獲取System進(jìn)程的EPR0CESS結(jié)構(gòu);
以Mmsystem range start地址為起始點(diǎn)并以所述EPR0CESS的長(zhǎng)度作為步長(zhǎng)遍歷 Mmsystem range start地址至所述System進(jìn)程的EPR0CESS結(jié)構(gòu)之間的內(nèi)存空間,獲取每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中的內(nèi)容;
所述每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程;若是,則記錄該進(jìn)程;若否,則忽略該內(nèi)存地址段;
集合所獲得的所有合法進(jìn)程,形成系統(tǒng)進(jìn)程集合。
可選的,所述獲取System進(jìn)程EPR0CESS結(jié)構(gòu)包括
在驅(qū)動(dòng)加載的入口函數(shù)中調(diào)用函數(shù)PsGetCurrentProcess O獲得System進(jìn)程的 EPR0CESS 結(jié)構(gòu)。
可選的,所述判斷該內(nèi)存地址段中的內(nèi)容是否為進(jìn)程包括
將內(nèi)存地址段中的內(nèi)容賦值給EPR0CESS結(jié)構(gòu);
判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量ExitTime的值是否為零;判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量_b ject_type的類(lèi)型值是否為process ;
若上述兩個(gè)成員變量均為是,則內(nèi)存地址段中的內(nèi)容為合法的進(jìn)程,否則為不合法進(jìn)程。
可選的,所述判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量ExitTime的值是否為零包括
由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x78,獲得成員變量ExitTime ;
提取所述成員變量ExitTime的值;
判斷所述成員變量ExitTime的值是否等于零。
可選的,所述判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變的類(lèi)型值是否為Process包括
由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x8,獲得成員變量_b ject_type ;
由所述成員變的首地址偏移0x40,獲得成員type ;
提取所述成員type的值;
判斷所述成員type的值是否等于process。
可選的,所述判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程包括
獲取當(dāng)前進(jìn)程的EPR0CESS ;
獲取該當(dāng)前進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址;
若所述進(jìn)程環(huán)境塊地址為零,則返回到所述獲取當(dāng)前進(jìn)程的EPR0CESS的步驟,或者通過(guò)遍歷私有句柄表鏈或活動(dòng)進(jìn)程表鏈獲得其它任一進(jìn)程,獲取該任一進(jìn)程的EPR0CESS 的進(jìn)程環(huán)境塊地址并判斷該地址是否為零;
若非零,則提取所述進(jìn)程環(huán)境塊地址高四位的值作為參考值;
獲取所述內(nèi)存地址段中由起始地址偏移IBO處的內(nèi)容的高四位,作為待檢值;
判斷所述待檢值是否與參考值相同;
若相同,則內(nèi)存地址中的內(nèi)容為合法的進(jìn)程,否則為不合法進(jìn)程。
可選的,所述獲取當(dāng)前進(jìn)程包括
通過(guò)PsGetCurrentProcess O 獲得當(dāng)前的進(jìn)程的 EPR0CESS。
可選的,所述獲取該當(dāng)前進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址包括
由該當(dāng)前進(jìn)程的EPR0CESS首地址偏移1B0獲取其進(jìn)程環(huán)境塊成員變量;
提取所述進(jìn)程環(huán)境塊成員變量的值。
可選的,所述每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程包括
通過(guò)MmlsAddressInPageValidO函數(shù)驗(yàn)證該地址的有效性。
可選的,還包括
將獲取的進(jìn)程集合與Windows任務(wù)管理器的進(jìn)程表比對(duì);
找出不同于Windows任務(wù)管理器的進(jìn)程表中的進(jìn)程;
以所述找出的進(jìn)程作為內(nèi)容向用戶(hù)發(fā)送或者向用戶(hù)發(fā)送提示消息或報(bào)警。
根據(jù)本發(fā)明的另一方面,還提供一種用于枚舉系統(tǒng)進(jìn)程的裝置,包括
System進(jìn)程獲取單元,用于獲取System進(jìn)程的EPR0CESS結(jié)構(gòu);
遍歷單元,用于以Mmsystem range start地址為起始點(diǎn)并以所述EPR0CESS的長(zhǎng)度作為步長(zhǎng)遍歷Mmsystem range start地址至所述System進(jìn)程的EPR0CESS結(jié)構(gòu)之間的內(nèi)存空間,獲取每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中的內(nèi)容;
判斷單元,用于所述每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程;若是,則記錄該進(jìn)程;若否, 則忽略該內(nèi)存地址段;
集合單元,用于集合所獲得的所有合法進(jìn)程,形成系統(tǒng)進(jìn)程集合。
可選的,所述判斷單元,包括
賦值單元,用于將內(nèi)存地址段中的內(nèi)容賦值給Eprocess結(jié)構(gòu);
第一判斷單元,用于判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量ExitTime的值是否為零;
第二判斷單元,用于判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變的類(lèi)型值是否為process。
可選的,所述第一判斷單元包括
第一偏移單元,用于由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x78,獲得成員變量 ExitTime ;
第一提取單元,用于提取所述成員變量ExitTime的值;
第一執(zhí)行單元,用于判斷所述成員變量ExitTime的值是否等于零。
可選的,所述第二判斷單元包括
第二偏移單元,用于由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x8,獲得成員變量_ bject_type ;
第三偏移單元,用于由所述成員變的首地址偏移0x40,獲得成員 type ;
第二提取單元,用于提取所述成員type的值;
第二執(zhí)行單元,用于判斷所述成員type的值是否等于process。
可選的,所述判斷單元包括
當(dāng)前進(jìn)程獲取單元,用于獲取當(dāng)前進(jìn)程的EPR0CESS ;
進(jìn)程環(huán)境塊地址獲取單元,用于獲取該當(dāng)前進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址;
判斷提取單元,用于若所述進(jìn)程環(huán)境塊地址為零,則返回到所述獲取當(dāng)前進(jìn)程的 EPR0CESS的步驟,或者通過(guò)遍歷私有句柄表鏈或活動(dòng)進(jìn)程表鏈獲得其它任一進(jìn)程,并獲取該任一進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址并判斷該地址是否為零;若非零,則提取所述進(jìn)程環(huán)境塊地址高四位的值作為參考值;
獲取單元,用于獲取所述內(nèi)存地址段中由起始地址偏移IBO處的內(nèi)容的高四位, 作為待檢值;
判斷執(zhí)行單元,判斷所述待檢值是否與參考值相同。
可選的,所述進(jìn)程環(huán)境塊地址獲取單元包括
第四偏移單元,用于由該當(dāng)前進(jìn)程的EPR0CESS首地址偏移IBO獲取其進(jìn)程環(huán)境塊成員變量;
第三提取單元,用于提取所述進(jìn)程環(huán)境塊成員變量的值。
可選的,還包括
對(duì)比單元,用于將獲取的進(jìn)程集合與Windows任務(wù)管理器的進(jìn)程表比對(duì);
提取單元,用于找出不同于Windows任務(wù)管理器的進(jìn)程表中的進(jìn)程;
報(bào)警單元,用于以所述找出的進(jìn)程作為內(nèi)容向用戶(hù)發(fā)送或者向用戶(hù)發(fā)送提示消息或報(bào)警。
本發(fā)明的方法中,通過(guò)搜索Mmsystem range start地址至所述System進(jìn)程的 EPR0CESS結(jié)構(gòu)之間的內(nèi)存空間,過(guò)濾出滿(mǎn)足EPR0CESS結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu),從而獲得系統(tǒng)的當(dāng)前進(jìn)程表;在win系統(tǒng)中,所有進(jìn)程的EPR0CESS結(jié)構(gòu)的存儲(chǔ)空間被系統(tǒng)分配在Mmsystem range start與進(jìn)程System的Eprocess結(jié)構(gòu)之間的內(nèi)存區(qū)間上,因而遍歷該內(nèi)存區(qū)間,便可獲得系統(tǒng)所有的進(jìn)程;也就是說(shuō),即使有些進(jìn)程從進(jìn)程活動(dòng)鏈表中刪除,通過(guò)本發(fā)明的方法仍然能夠枚舉出該進(jìn)程,使得一些惡意軟件或者Rootkit無(wú)處藏身,有利于減少一些惡意的隱藏進(jìn)程對(duì)系統(tǒng)的威脅。
上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段, 而可依照說(shuō)明書(shū)的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式
。
通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中
圖I為本發(fā)明的一種用于枚舉系統(tǒng)進(jìn)程的方法的實(shí)施例的流程圖2為本發(fā)明的一種用于枚舉系統(tǒng)進(jìn)程的裝置的一種實(shí)施例的示意圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開(kāi)的示例性實(shí)施例。雖然附圖中顯示了本公開(kāi)的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開(kāi),并且能夠?qū)⒈竟_(kāi)的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
請(qǐng)參考圖1,其為本發(fā)明的一種用于枚舉系統(tǒng)進(jìn)程的方法的實(shí)施例的流程圖。本實(shí)施例中,包括如下步驟
步驟100,獲取System進(jìn)程的EPR0CESS結(jié)構(gòu)。
在Win系統(tǒng)中,每個(gè)進(jìn)程都有一個(gè)EPR0CESS結(jié)構(gòu),在這個(gè)結(jié)構(gòu)中保存了該進(jìn)程的所有信息,包括進(jìn)程路徑、進(jìn)程名稱(chēng)、進(jìn)程PID、進(jìn)程創(chuàng)建時(shí)間、結(jié)束時(shí)間等信息。系統(tǒng)的所有進(jìn)程都被分配在內(nèi)存空間中Mmsystem range start地址至系統(tǒng)的System進(jìn)程的Eprocess 結(jié)構(gòu)之間的內(nèi)存空間上。在內(nèi)存空間中定位system進(jìn)程的EPR0CESS結(jié)構(gòu)的首地址,在 PAE (Physical Address Extension,物理地址擴(kuò)展)模式下的 Mmsystem range start 地址為0X80000000 (十六進(jìn)制)。遍歷所述Mssystem range start與所述System進(jìn)程的 EPR0CESS之間的內(nèi)存區(qū)間,即可獲得系統(tǒng)的所有進(jìn)程。
不難理解,若欲遍歷上述的內(nèi)存區(qū)間,首先需要獲取System進(jìn)程的EPR0CESS結(jié)構(gòu)。本實(shí)施例中,通過(guò)在驅(qū)動(dòng)加載的入口函數(shù)中調(diào)用函數(shù)PsGetCurrentProcess O ,獲得 System進(jìn)程的EPR0CESS結(jié)構(gòu)。當(dāng)然,獲取System進(jìn)程的EPR0CESS結(jié)構(gòu)的方式并不局限于此,任何能夠獲取System進(jìn)程的EPR0CESS結(jié)構(gòu)的方法均可應(yīng)用于此,本實(shí)施例中對(duì)此并無(wú)限制。
步驟SI 10,以Mmsystem range start地址為起始點(diǎn)并以所述EPR0CESS的長(zhǎng)度作為步長(zhǎng)遍歷Mmsystem range start地址至所述System進(jìn)程的EPR0CESS結(jié)構(gòu)之間的內(nèi)存空間,獲取每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中的內(nèi)容。
在Win系統(tǒng)中,所有進(jìn)程EPR0CESS在內(nèi)存空間中的長(zhǎng)度都是一樣的,故遍歷的步長(zhǎng)可以為任一進(jìn)程EPR0CESS的長(zhǎng)度,當(dāng)然,也包括所述的System進(jìn)程的EPR0CESS。本步驟中,遍歷所述區(qū)間,獲取每一步長(zhǎng)對(duì)應(yīng)的存地址段中的內(nèi)容。以備下述步驟中根據(jù)其內(nèi)容判斷該步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中存儲(chǔ)的是否是進(jìn)程的EPR0CESS。
步驟S120,所述每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程;若是,則記錄該進(jìn)程;若否,則忽略該內(nèi)存地址段。
如上所述,每一進(jìn)程的EPR0CESS中保存著該進(jìn)程的所有信息,這些信息被存儲(chǔ)在內(nèi)存地址中固定空間中。按照進(jìn)程的EPR0CESS的長(zhǎng)度作為步長(zhǎng)遍歷該固定的內(nèi)存地址空間,對(duì)于每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中,根據(jù)其中存儲(chǔ)的內(nèi)容判斷該內(nèi)存地址段中存儲(chǔ)是否一個(gè)合法的進(jìn)程的EPR0CESS,并找出所有為進(jìn)程的EPR0CESS。由于任何進(jìn)程均在系統(tǒng)的內(nèi)存空間中存在,故通過(guò)本方式能夠獲取系統(tǒng)所有的進(jìn)程。
對(duì)于每一個(gè)步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段,首先要判斷該內(nèi)存地址段是否為有效地址, 這是由于內(nèi)存中有的地址或地址區(qū)間由于某些原因會(huì)被棄用,導(dǎo)致該地址或地址區(qū)間無(wú)效。合法進(jìn)程的EPR0CESS存的內(nèi)存地址區(qū)間自然應(yīng)當(dāng)是有效的地址區(qū)間,故在判斷某內(nèi)存地址段中的內(nèi)容是否為EPR0CESS的信息,需要先判斷該內(nèi)存地址段是否為有效地址區(qū)間。 本實(shí)施例中,通過(guò)MmlsAddressInPageValidO函數(shù)驗(yàn)證該地址的有效性。
若驗(yàn)證某內(nèi)存地址段為有效地址,則進(jìn)一步分析該地址段中的內(nèi)容,判斷其是否是進(jìn)程。其中,所述的判斷某地址段中的內(nèi)容是否為進(jìn)程包括a,讀取該內(nèi)存地址段中的內(nèi)容,并將內(nèi)存地址段中的內(nèi)容賦值給EPR0CESS結(jié)構(gòu);b,判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量ExitTime的值是否為零;c,判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量_bject_type 的類(lèi)型值是否為process ;若上述b和c步驟中兩步判斷的結(jié)果均為是,則內(nèi)存地址段中的內(nèi)容為進(jìn)程,否則為不是進(jìn)程。具體而言,讀取內(nèi)存地址段中的內(nèi)容之后,按照正常情況下EPR0CESS結(jié)構(gòu)在內(nèi)存地址段中各個(gè)成員變量值與地址的對(duì)應(yīng)方式,將讀取的內(nèi)存地址段中的內(nèi)容賦值給一個(gè)無(wú)變量值的EPR0CESS結(jié)構(gòu);然后分析該被賦值的EPR0CESS結(jié)構(gòu)中的成員變量值是否滿(mǎn)足進(jìn)程EPR0CESS的要求。例如,成員變量ExitTime = O, _bject_type的類(lèi)型為process等等。將被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x78 (十六進(jìn)制),即可獲得成員變量ExitTime,提取該成員變量ExitTime的值,即可判斷其是否為零。同樣的方式,由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x8 (十六進(jìn)制),即獲得成員變量_bject_type ;由所述成員變量_bject_type的首地址偏移0x40 (十六進(jìn)制),獲得其成員type ;提取所述成員 type的值;并判斷所述成員type的值是否等于process。
若內(nèi)存地址段中存放的為進(jìn)程,還需要進(jìn)一步判斷該進(jìn)程是否為合法的進(jìn)程,這是由于在系統(tǒng)中某些進(jìn)程雖然被終止,但其并未放棄所占用的內(nèi)存空間,通過(guò)上述賦值并判斷的方式依然能夠找到該進(jìn)程。但是系統(tǒng)已經(jīng)認(rèn)為該進(jìn)程已經(jīng)終止,故該進(jìn)程為非法的進(jìn)程,在進(jìn)程枚舉時(shí)是不予考慮的。本實(shí)施例中通過(guò)如下步驟判斷進(jìn)程為合法的進(jìn)程:A, 獲取當(dāng)前進(jìn)程的EPROCESS ;B,獲取該當(dāng)前進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址(Process Environment Block, PEB) ;C,若所述進(jìn)程環(huán)境塊地址為零,則返回到所述獲取當(dāng)前進(jìn)程的 EPROCESS的步驟,或者通過(guò)遍歷私有句柄表鏈或活動(dòng)進(jìn)程表鏈獲得其它任一進(jìn)程,獲取該任一進(jìn)程的EPROCESS的進(jìn)程環(huán)境塊地址并判斷該地址是否為零;若非零,則提取所述進(jìn)程環(huán)境塊地址高四位的值作為參考值;D,獲取所述內(nèi)存地址段中由起始地址偏移1B0處的內(nèi)容的高四位,作為待檢值;E,判斷所述待檢值是否與參考值相同;若相同,則內(nèi)存地址中的內(nèi)容為合法的進(jìn)程,否則為不合法進(jìn)程。具體而言,在Win系統(tǒng)中,每一個(gè)進(jìn)程都有自己的 PEB,在PEB中存放著進(jìn)程的信息。PEB為進(jìn)程EPROCESS的成員變量之一,其在EPROCESS中的地址也是固定的,即首地址偏移1B0 (十六進(jìn)制)。對(duì)于Win系統(tǒng)而言,不同進(jìn)程的PEB的地址的高四位均相同。故若能夠獲取已有的任一合法進(jìn)程(包括當(dāng)前進(jìn)程)的PEB地址, 并提取其高四位作為參考值,將被賦值的EPROCESS中對(duì)應(yīng)PEB的地址內(nèi)容取出,并提取高四位與參考值對(duì)比,判斷二者是否相同,若相同,則內(nèi)存地址段中存放的是合法的進(jìn)程,否則即是非法進(jìn)程。以此種方式判斷每一內(nèi)存地址段中的內(nèi)容,即可找出所有合法的進(jìn)程。
其中,所述的獲取當(dāng)前進(jìn)程的方法包括通過(guò)函數(shù)PsGetCurrentProcess O獲得當(dāng)前的進(jìn)程的EPROCESS。獲取當(dāng)前進(jìn)程EPROCESS之后,如上所述,由首地址偏移1B0獲取其 PEB成員變量;接著可提取所述PEB成員變量的值。由于系統(tǒng)進(jìn)程System進(jìn)程的PEB地址是零,比較特殊,故沒(méi)有可參考性,若通過(guò)上述方式獲取到當(dāng)前進(jìn)程恰好是System進(jìn)程,則還需要獲取其它合法進(jìn)程作為參考,獲取方式包括再次執(zhí)行函數(shù)PsGetCurrentProcess O 或者通過(guò)每一進(jìn)程的私有句柄表鏈遍歷獲取其它進(jìn)程,這里不再一一進(jìn)行贅述如何獲取其它合法進(jìn)程的方法。
將所述內(nèi)存地址區(qū)間中所有的內(nèi)存地址段內(nèi)容均按照上述的方式進(jìn)行判斷,即可找出所有合法的進(jìn)程。對(duì)于不滿(mǎn)足上述要求的內(nèi)存地址段,忽略即可。
步驟130,集合所獲得的所有合法進(jìn)程,形成系統(tǒng)當(dāng)前進(jìn)程集合。
本發(fā)明上述實(shí)施例中,通過(guò)搜索Mmsystem range start地址至所述System進(jìn)程的EPROCESS結(jié)構(gòu)之間的內(nèi)存空間,過(guò)濾出滿(mǎn)足EPROCESS結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu),從而獲得系統(tǒng)的當(dāng)前進(jìn)程表;在win系統(tǒng)中,所有進(jìn)程的EPROCESS結(jié)構(gòu)的存儲(chǔ)空間被系統(tǒng)分配在Mmsystem range start與進(jìn)程System的Eprocess結(jié)構(gòu)之間的內(nèi)存區(qū)間上,因而遍歷該內(nèi)存區(qū)間,便可獲得系統(tǒng)所有的進(jìn)程;也就是說(shuō),即使有些進(jìn)程從進(jìn)程活動(dòng)鏈表中刪除,通過(guò)本發(fā)明的方法仍然能夠枚舉出該進(jìn)程,使得一些惡意軟件或者Rootkit無(wú)處藏身,有利于減少一些惡意的隱藏進(jìn)程對(duì)系統(tǒng)的威脅。
通過(guò)上述實(shí)施例獲得進(jìn)程列集合,還可以繼續(xù)執(zhí)行如下的步驟
I.將獲取的進(jìn)程集合與Windows任務(wù)管理器的進(jìn)程表比對(duì);II.找出不同于 Windows任務(wù)管理器的進(jìn)程表中的進(jìn)程;III.將所述找出的進(jìn)程向用戶(hù)發(fā)送提示消息或發(fā)送報(bào)警。也就是說(shuō),通過(guò)將本發(fā)明的實(shí)施例獲得的進(jìn)程集合與前述背景技術(shù)中的方法所獲得進(jìn)程表進(jìn)行比對(duì),并將本發(fā)明的實(shí)施例的方法獲得的進(jìn)程表與背景技術(shù)中所獲得的方法所不同的進(jìn)程找出并提示用戶(hù)或發(fā)出報(bào)警。用戶(hù)可以根據(jù)該提示或報(bào)警對(duì)所找出的不同進(jìn)程進(jìn)一步分析,判斷是否惡意進(jìn)程。
以上公開(kāi)了本發(fā)明的一種用于枚舉系統(tǒng)進(jìn)程的方法的實(shí)施例,與此相應(yīng)的,本發(fā)明還公開(kāi)了一種用于枚舉系統(tǒng)進(jìn)程的裝置。請(qǐng)參考圖2,其為本發(fā)明的一種用于枚舉系統(tǒng)進(jìn)程的裝置的一種實(shí)施例的示意圖。由于該裝置的實(shí)施例與前述的方法的實(shí)施例基本相同, 下面僅簡(jiǎn)單描述本實(shí)施例中的裝置。
本實(shí)施例公開(kāi)的一種用于枚舉系統(tǒng)進(jìn)程的裝置,包括=System進(jìn)程獲取單元200, 用于獲取System進(jìn)程的EPROCESS結(jié)構(gòu);遍歷單元202,用于以Mmsystem range start地址為起始點(diǎn)并以所述EPROCESS的長(zhǎng)度作為步長(zhǎng)遍歷Mmsystem range start地址至所述 System進(jìn)程的EPROCESS結(jié)構(gòu)之間的內(nèi)存空間,獲取每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中的內(nèi)容; 判斷單元204,用于所述每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程;若是,則記錄該進(jìn)程;若否,則忽略該內(nèi)存地址段;集合單元206,用于集合所獲得的所有合法進(jìn)程,形成系統(tǒng)當(dāng)前進(jìn)程集合。
可選的,所述判斷單元204包括賦值單元,用于將內(nèi)存地址段中的內(nèi)容賦值給 Eprocess結(jié)構(gòu);第一判斷單元,用于判斷被賦值的EPROCESS結(jié)構(gòu)的成員變量ExitTime的值是否為零;第二判斷單元,用于判斷被賦值的EPROCESS結(jié)構(gòu)的成員變的類(lèi)型值是否為process。
可選的,所述第一判斷單元包括第一偏移單元,用于由被賦值的EPROCESS結(jié)構(gòu)首地址偏移0x78,獲得成員變量ExitTime ;第一提取單元,用于提取所述成員變量 ExitTime的值;第一執(zhí)行單元,用于判斷所述成員變量ExitTime的值是否等于零。
可選的,所述第二判斷單元包括第二偏移單元,用于由被賦值的EPROCESS結(jié)構(gòu)首地址偏移0x8,獲得成員變量_bject_type ;第三偏移單元,用于由所述成員變量_13」6(31:_ type的首地址偏移0x40,獲得成員type ;第二提取單元,用于提取所述成員type的值;第二執(zhí)行單元,用于判斷所述成員type的值是否等于process。
可選的,所述判斷單元204包括當(dāng)前進(jìn)程獲取單元,用于獲取當(dāng)前進(jìn)程的 EPROCESS ;進(jìn)程環(huán)境塊地址獲取單元,用于獲取該當(dāng)前進(jìn)程的EPROCESS的進(jìn)程環(huán)境塊地址;判斷提取單元,用于若所述進(jìn)程環(huán)境塊地址為零,則返回到所述獲取當(dāng)前進(jìn)程的 EPROCESS的步驟,或者通過(guò)遍歷私有句柄表鏈或活動(dòng)進(jìn)程表鏈獲得其它任一進(jìn)程,并獲取該任一進(jìn)程的EPROCESS的進(jìn)程環(huán)境塊地址并判斷該地址是否為零;若非零,則提取所述進(jìn)程環(huán)境塊地址高四位的值作為參考值;獲取單元,用于獲取所述內(nèi)存地址段中由起始地址偏移1B0處的內(nèi)容的高四位,作為待檢值;判斷執(zhí)行單元,判斷所述待檢值是否與參考值相同。
可選的,所述進(jìn)程環(huán)境塊地址獲取單元包括第四偏移單元,用于由該當(dāng)前進(jìn)程的 EPROCESS首地址偏移IBO獲取其進(jìn)程環(huán)境塊成員變量;第三提取單元,用于提取所述進(jìn)程環(huán)境塊成員變量的值。
可選的,所述用于枚舉系統(tǒng)進(jìn)程的裝置還包括對(duì)比單元,用于將獲取的進(jìn)程集合與Windows任務(wù)管理器的進(jìn)程表比對(duì);提取單元,用于找出不同于Windows任務(wù)管理器的進(jìn)程表中的進(jìn)程;報(bào)警單元,用于以所述找出的進(jìn)程作為內(nèi)容向用戶(hù)發(fā)送或者向用戶(hù)發(fā)送提示消息或報(bào)警。
應(yīng)用本發(fā)明實(shí)施例的裝置可獲得與上述方法實(shí)施例相同的技術(shù)效果,這里不再贅述。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。 各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類(lèi)系統(tǒng)所要求的結(jié)構(gòu)是顯而易見(jiàn)的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說(shuō)明書(shū)中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書(shū)的理解。
類(lèi)似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開(kāi)并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開(kāi)的方法解釋成反映如下意圖即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書(shū)所反映的那樣,發(fā)明方面在于少于前面公開(kāi)的單個(gè)實(shí)施例的所有特征。因此, 遵循具體實(shí)施方式
的權(quán)利要求書(shū)由此明確地并入該具體實(shí)施方式
,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的所有特征以及如此公開(kāi)的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書(shū)中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用12微處理器或者數(shù)字信號(hào)處理器(DSP)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的用于枚舉系統(tǒng)進(jìn)程的裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中, 不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱(chēng)。
權(quán)利要求
1.一種用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,包括獲取System進(jìn)程的EPR0CESS結(jié)構(gòu);以Mmsystem range start地址為起始點(diǎn)并以所述EPR0CESS的長(zhǎng)度作為步長(zhǎng)遍歷 Mmsystem range start地址至所述System進(jìn)程的EPR0CESS結(jié)構(gòu)之間的內(nèi)存空間,獲取每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中的內(nèi)容;所述每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程;若是,則記錄該進(jìn)程;若否,則忽略該內(nèi)存地址段;集合所獲得的所有合法進(jìn)程,形成系統(tǒng)進(jìn)程集合。
2.根據(jù)權(quán)利要求I所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,所述獲取System進(jìn)程EPR0CESS結(jié)構(gòu)包括在驅(qū)動(dòng)加載的入口函數(shù)中調(diào)用函數(shù)PsGetCurrentProcess O獲得System進(jìn)程的 EPR0CESS 結(jié)構(gòu)。
3.根據(jù)權(quán)利要求I所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,所述判斷該內(nèi)存地址段中的內(nèi)容是否為進(jìn)程包括將內(nèi)存地址段中的內(nèi)容賦值給EPR0CESS結(jié)構(gòu);判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量ExitTime的值是否為零;判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量_bject_type的類(lèi)型值是否為process ; 若上述兩個(gè)成員變量均為是,則內(nèi)存地址段中的內(nèi)容為合法的進(jìn)程,否則為不合法進(jìn)程。
4.根據(jù)權(quán)利要求3所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,所述判斷被賦值的 EPR0CESS結(jié)構(gòu)的成員變量ExitTime的值是否為零包括由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x78,獲得成員變量ExitTime ;提取所述成員變量ExitTime的值;判斷所述成員變量ExitTime的值是否等于零。
5.根據(jù)權(quán)利要求3所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,所述判斷被賦值的 EPR0CESS結(jié)構(gòu)的成員變量_bject_type的類(lèi)型值是否為Process包括由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x8,獲得成員變量_b ject_type ;由所述成員變量_bject_type的首地址偏移0x40,獲得成員type ;提取所述成員type的值;判斷所述成員type的值是否等于process。
6.根據(jù)權(quán)利要求3至5任一所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,所述判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程包括獲取當(dāng)前進(jìn)程的EPR0CESS ;獲取該當(dāng)前進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址;若所述進(jìn)程環(huán)境塊地址為零,則返回到所述獲取當(dāng)前進(jìn)程的EPR0CESS的步驟,或者通過(guò)遍歷私有句柄表鏈或活動(dòng)進(jìn)程表鏈獲得其它任一進(jìn)程,獲取該任一進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址并判斷該地址是否為零;若非零,則提取所述進(jìn)程環(huán)境塊地址高四位的值作為參考值;獲取所述內(nèi)存地址段中由起始地址偏移IBO處的內(nèi)容的高四位,作為待檢值;判斷所述待檢值是否與參考值相同;若相同,則內(nèi)存地址中的內(nèi)容為合法的進(jìn)程,否則為不合法進(jìn)程。
7.根據(jù)權(quán)利要求6所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,所述獲取當(dāng)前進(jìn)程包括通過(guò)PsGetCurrentProcess O獲得當(dāng)前的進(jìn)程的EPR0CESS。
8.根據(jù)權(quán)利要求6所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,所述獲取該當(dāng)前進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址包括由該當(dāng)前進(jìn)程的EPR0CESS首地址偏移IBO獲取其進(jìn)程環(huán)境塊成員變量;提取所述進(jìn)程環(huán)境塊成員變量的值。
9.根據(jù)權(quán)利要求I至8任一所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,所述每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程包括通過(guò)MmlsAddressInPageValidO函數(shù)驗(yàn)證該地址的有效性。
10.根據(jù)權(quán)利要求I至8任一所述的用于枚舉系統(tǒng)進(jìn)程的方法,其特征在于,還包括 將獲取的進(jìn)程集合與Windows任務(wù)管理器的進(jìn)程表比對(duì);找出不同于Windows任務(wù)管理器的進(jìn)程表中的進(jìn)程;以所述找出的進(jìn)程作為內(nèi)容向用戶(hù)發(fā)送或者向用戶(hù)發(fā)送提示消息或報(bào)警。
11.一種用于枚舉系統(tǒng)進(jìn)程的裝置,其特征在于,包括System進(jìn)程獲取單元,用于獲取System進(jìn)程的EPR0CESS結(jié)構(gòu);遍歷單元,用于以Mmsystem range start地址為起始點(diǎn)并以所述EPR0CESS的長(zhǎng)度作為步長(zhǎng)遍歷Mmsystem range start地址至所述System進(jìn)程的EPR0CESS結(jié)構(gòu)之間的內(nèi)存空間,獲取每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中的內(nèi)容;判斷單元,用于所述每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷該內(nèi)存地址段中的內(nèi)容是否為合法的進(jìn)程;若是,則記錄該進(jìn)程;若否,則忽略該內(nèi)存地址段;集合單元,用于集合所獲得的所有合法進(jìn)程,形成系統(tǒng)進(jìn)程集合。
12.根據(jù)權(quán)利要求11所述的用于枚舉系統(tǒng)進(jìn)程的裝置,其特征在于,所述判斷單元,包括賦值單元,用于將內(nèi)存地址段中的內(nèi)容賦值給Eprocess結(jié)構(gòu);第一判斷單元,用于判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變量ExitTime的值是否為零;第二判斷單元,用于判斷被賦值的EPR0CESS結(jié)構(gòu)的成員變的類(lèi)型值是否為 process。
13.根據(jù)權(quán)利要求12所述的用于枚舉系統(tǒng)進(jìn)程的裝置,其特征在于,所述第一判斷單元包括第一偏移單元,用于由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x78,獲得成員變量 ExitTime ;第一提取單元,用于提取所述成員變量ExitTime的值;第一執(zhí)行單元,用于判斷所述成員變量ExitTime的值是否等于零。
14.根據(jù)權(quán)利要求12所述的用于枚舉系統(tǒng)進(jìn)程的裝置,其特征在于,所述第二判斷單元包括第二偏移單元,用于由被賦值的EPR0CESS結(jié)構(gòu)首地址偏移0x8,獲得成員變量_bject_ type ;第三偏移單元,用于由所述成員變量_bject_type的首地址偏移0x40,獲得成員 type ;第二提取單元,用于提取所述成員type的值;第二執(zhí)行單元,用于判斷所述成員type的值是否等于process。
15.根據(jù)權(quán)利要求11所述的用于枚舉系統(tǒng)進(jìn)程的裝置,其特征在于,所述判斷單元包括當(dāng)前進(jìn)程獲取單元,用于獲取當(dāng)前進(jìn)程的EPR0CESS ;進(jìn)程環(huán)境塊地址獲取單元,用于獲取該當(dāng)前進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址; 判斷提取單元,用于若所述進(jìn)程環(huán)境塊地址為零,則返回到所述獲取當(dāng)前進(jìn)程的 EPR0CESS的步驟,或者通過(guò)遍歷私有句柄表鏈或活動(dòng)進(jìn)程表鏈獲得其它任一進(jìn)程,并獲取該任一進(jìn)程的EPR0CESS的進(jìn)程環(huán)境塊地址并判斷該地址是否為零;若非零,則提取所述進(jìn)程環(huán)境塊地址高四位的值作為參考值;獲取單元,用于獲取所述內(nèi)存地址段中由起始地址偏移IBO處的內(nèi)容的高四位,作為待檢值;判斷執(zhí)行單元,判斷所述待檢值是否與參考值相同。
16.根據(jù)權(quán)利要求15所述的用于枚舉系統(tǒng)進(jìn)程的裝置,其特征在于,所述進(jìn)程環(huán)境塊地址獲取單元包括第四偏移單元,用于由該當(dāng)前進(jìn)程的EPR0CESS首地址偏移IBO獲取其進(jìn)程環(huán)境塊成員變量;第三提取單元,用于提取所述進(jìn)程環(huán)境塊成員變量的值。
17.根據(jù)權(quán)利要求I至16任一所述的用于枚舉系統(tǒng)進(jìn)程的裝置,其特征在于,還包括 對(duì)比單元,用于將獲取的進(jìn)程集合與Windows任務(wù)管理器的進(jìn)程表比對(duì);提取單元,用于找出不同于Windows任務(wù)管理器的進(jìn)程表中的進(jìn)程;報(bào)警單元,用于以所述找出的進(jìn)程作為內(nèi)容向用戶(hù)發(fā)送或者向用戶(hù)發(fā)送提示消息或報(bào)
全文摘要
本發(fā)明公開(kāi)了一種用于枚舉系統(tǒng)進(jìn)程的方法,包括獲取System進(jìn)程的EPROCESS結(jié)構(gòu);以Mmsystem range start地址為起始點(diǎn)并以EPROCESS的長(zhǎng)度作為步長(zhǎng)遍歷Mmsystem range start至System進(jìn)程的EPROCESS結(jié)構(gòu)之間的內(nèi)存空間,獲取每一步長(zhǎng)對(duì)應(yīng)的內(nèi)存地址段中的內(nèi)容;所述每一內(nèi)存地址段中,對(duì)于起始地址為有效地址的內(nèi)存地址段,判斷其中的內(nèi)容是否為合法的進(jìn)程;若是,則記錄該進(jìn)程;若否,則忽略該內(nèi)存地址段;集合所獲得的所有合法進(jìn)程,形成系統(tǒng)進(jìn)程集合。本發(fā)明還公開(kāi)一種用于枚舉系統(tǒng)進(jìn)程的裝置。本發(fā)明能夠枚舉出系統(tǒng)所有進(jìn)程;有利于減少一些惡意的隱藏進(jìn)程對(duì)系統(tǒng)的威脅。
文檔編號(hào)G06F21/55GK102945343SQ201210362570
公開(kāi)日2013年2月27日 申請(qǐng)日期2012年9月25日 優(yōu)先權(quán)日2012年9月25日
發(fā)明者張輝 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司