新四季網

一種用於枚舉系統進程的方法及裝置的製作方法

2023-06-12 06:46:21 2


專利名稱::一種用於枚舉系統進程的方法及裝置的製作方法
技術領域:
:本發明涉及計算機
技術領域:
,特別是涉及一種用於枚舉系統進程的方法。本發明還涉及一種用於枚舉系統進程的裝置。
背景技術:
:Windows任務管理器可以枚舉出系統當前的進程,並能夠根據需要選擇終止進程。為管理系統進程提供了很大的便利。Windows任務管理器枚舉系統當前進程是通過其NativeAPI函數ZwQuerySystemInfomation來操作進程活動鍊表來實現的。具體的過程如下首先,獲取當前任一進程的指針,例如可以通過PsGetCurrentProcessO來獲取當前進程的PEPR0CESS指針。然後定位到記錄該當前進程與其它進程連結信息的Activelist處,具體的操作方式為ActiveList=pCurrentEprocess+0x88,即當前進程指針移動一定的步長。其中0x88為winxpsp3下Activelist與pCurrentEprocess的步長,在不同win作業系統時該步長並不相同。接著,以所定位的當前進程的Activelist遍歷整個進程活動鍊表(Activelistlink)上每一進程的數據結構,即可獲得當前的存在於進程活動鍊表的所有進程。如上所述,因為windows任務管理器是基於ZwQuerySystemInformation來實現的,所以如果將進程對象從進程活動鍊表中移除,那麼調用NtQuerySystemInfomation來枚舉進程的任務管理器TaskMgr.exe中就不會看到目標進程了。同時,Windows的任務調度分配器使用的另一的數據結構,也就是說,進程是否被調度執行與進程活動鍊表無關,不會因為從進程活動鍊表刪除就被CPU忽略,因此進程仍然會被執行。這很容易被一些惡意軟體或者RootKit程序利用,在進程活動鍊表上不顯示其存在,但是仍然被執行,這可能導致用戶的計算機在不知不覺中被感染病毒、植入木馬或者竊取了信息,對計算機造成潛在的或現實的威脅。因而有必要能夠查找出這種被進程活動鍊表忽略而實質上又在被執行的隱藏進程。
發明內容鑑於上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的用於枚舉系統進程的方法和相應的用於枚舉系統進程的裝置。依據本發明的一個方面,提供了一種用於枚舉系統進程的方法,包括獲取系統進程和線程對象句柄表;遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象,獲得系統的進程;集合所獲得的所有進程,形成系統進程集合。可選的,所述獲取系統進程和線程對象句柄表包括獲取內核進程控制區域地址;將內核進程控制區域地址偏移固定的步長獲取系統進程和線程對象句柄表地址;根據其地址獲取系統進程和線程對象句柄表可選的,所述獲取系統進程和線程對象句柄表包括通過系統進程和線程對象句柄表的函數中特徵搜索定位系統進程和線程對象句柄表。可選的,所述特徵搜索的特徵串包括0x35ff和0x8e。可選的,所述遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象包括在所述進程和線程對象句柄表中獲取所有對象體指針;在所述所有對象體指針中獲取進程對象頭指針;遍歷所述進程對象頭指針指向的進程對象,獲取所有進程。可選的,所述在所述進程和線程對象句柄表中獲取對象體指針包括獲取所述句柄表層數;若獲取的句柄表層數為一層,按照固定的步長遍歷該層每一句柄表項,獲取每一句柄表項中的指向進程對象的對象體指針地址;若獲取的句柄表層數大於一層,則首先指向句柄表最高層,由最高層按照固定步長遍歷該層每一句柄表項;並獲取每一句柄表項中的指向相鄰下層句柄表項的成員指針;重複執行遍歷每一層的句柄表項,直至最下層;並由該最下層的每一句柄表項中的指向進程對象的對象體指針地址;由所述對象體指針地址獲取對象體指針。可選的,所述在所述所有對象體指針中獲取進程對象頭指針包括由對象體指針偏移一定步長獲取相應的對象頭指針;在所述對象頭指針中讀取其指針類型信息;選出所有類型為進程的對象頭指針。可選的,所述獲取所述句柄表層數包括讀取進程和線程對象句柄表中tablecode值的後兩位值;根據所述後兩位值判斷句柄表層數。可選的,所述所述首先指向句柄表最高層包括獲取句柄表中TableCode指針;將所述TableCode指針定位到句柄表最高層。可選的,所述選出所有類型為進程的對象頭指針包括選取當前任一進程,並取得其對象體指針;由該當前進程的對象體指針偏移獲取其對象頭指針;在該對象頭指針中讀取其指針類型信息;選取所有與所述指針類型信息相同的對象頭指針。可選的,還包括對於所述獲得系統的進程中的至少一個進程,按照該進程所在的SessionProcessLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。可選的,還包括對於所述獲得系統的進程中的至少一個進程,按照該進程所在Vm.WorkingSetExpansionLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程口口O可選的,還包括將獲取的當前進程集合與Windows任務管理器的進程表比對;找出不同於Windows任務管理器的進程表中的進程;以所述找出的進程作為內容向用戶發送或者向用戶發送提示消息或報警。根據本發明的另一方面,還提供一種用於枚舉系統進程的裝置,包括句柄表獲取單元,用於獲取系統進程和線程對象句柄表;遍歷執行單元,用於遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象,獲得系統的進程;集合單元,集合所獲得的所有進程,形成系統進程集合。可選的,所述句柄表獲取單元包括地址獲取單元,用於獲取內核進程控制區域地址;偏移單元,用於將內核進程控制區域地址偏移固定的步長獲取系統進程和線程對象句柄表地址;根據其地址獲取系統進程和線程對象句柄表可選的,所述句柄表獲取單元包括搜索定位單元,用於通過系統進程和線程對象句柄表的函數中特徵搜索定位系統進程和線程對象句柄表。可選的,所述遍歷執行單元包括對象體指針獲取單元,用於在所述進程和線程對象句柄表中獲取所有對象體指針;進程對象體指針獲取單元,用於在所述所有對象體指針中獲取進程對象頭指針;執行單元,用於遍歷所述進程對象頭指針指向的進程對象,獲取所有進程。可選的,所述對象體指針獲取單元,包括句柄表層數獲取單元,用於獲取所述句柄表層數;遍歷執行單元,用於根據句柄表層數遍歷句柄表項,若獲取的句柄表層數為一層,按照固定的步長遍歷該層每一句柄表項,並獲取每一句柄表項中的指向進程對象的對象體指針地址;若獲取的句柄表層數大於一層,則首先指向句柄表最高層,由最高層按照固定步長遍歷該層每一句柄表項;並獲取每一句柄表項中的指向相鄰下層句柄表項的成員指針;重複執行遍歷每一層的句柄表項,直至最下層;並由該最下層的每一句柄表項中的指向進程對象的對象體指針地址;對象體指針提取單元,用於由該對象體指針地址獲取對象體指針。可選的,所述進程對象頭指針獲取單元,包括對象頭指針獲取單元,用於由對象體指針偏移一定步長獲取相應的對象頭指針;指針類型提取單元,用於在所述對象頭指針中讀取其指針類型信息;選擇單元,用於選出所有類型為進程的對象頭指針,與該對象頭指針相應的對象體指針即為向進程對象頭指針。可選的,所述句柄表層數獲取單元,包括讀取單元,用於讀取進程和線程對象句柄表中tablecode值的後兩位值;判斷單元,用於根據所述後兩位值判斷句柄表層數。可選的,所述遍歷執行單元還包括TableCode指針獲取單元,用於獲取句柄表中TableCode指針;定位單元,用於將所述TableCode指針定位到句柄表最高層。可選的,所述選擇單元,包括當前進程獲取單元,用於選取當前任一進程,並取得其對象體指針;對象頭指針獲取單元,用於由該當前進程的對象體指針偏移獲取其對象頭指針;指針類型提取單元,用於在該對象頭指針中讀取其指針類型信息;選擇執行單元,用於選取所有與所述指針類型信息相同的對象頭指針。可選的,還包括第二遍歷執行單元,用於對於所述獲得系統的進程中的至少一個進程,按照該進程所在的SessionPiOcessLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程口口O可選的,還包括第三遍歷執行單元,用於對於所述獲得系統的進程中的至少一個進程,按照該進程所在Vm.WorkingSetExpansionLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。可選的,還包括對比單元,用於將獲取的當前進程集合與Windows任務管理器的進程表比對;提取單元,用於找出不同於Windows任務管理器的進程表中的進程;報警單元,用於以所述找出的進程作為內容向用戶發送或者向用戶發送提示消息或報警。根據本發明提供的具體實施例,本發明公開了以下技術效果本發明的方法中,通過獲取系統進程和線程對象句柄表(pspCidTable),並遍歷該表中進程對象體指針指向的進程對象來獲取系統的進程;由於在pspCidTable中保存了系統所有進程和線程的對象指針,而且該對象指針指向對象體,因而只要挑選出所有的進程對象體指針並遍歷其指向的進行對象,即可獲取所有的進程,包括隱藏的進程;也就是說,即使有些進程從進程活動鍊表中刪除,通過本發明的方法仍然能夠枚舉出該進程,使得一些惡意軟體或者Rootkit無處藏身,有利於減少一些惡意的隱藏進程對系統的威脅。上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,並且為了讓本發明的上述和其它目的、特徵和優點能夠更明顯易懂,以下特舉本發明的具體實施方式。通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對於本領域普通技術人員將變得清楚明了。附圖僅用於示出優選實施方式的目的,而並不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中圖I為本發明的用於枚舉系統進程的方法的實施例的流程圖;圖2為本發明的一種用於枚舉系統進程的裝置的一種實施例的示意圖。具體實施例方式下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這裡闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,並且能夠將本公開的範圍完整的傳達給本領域的技術人員。請參考圖1,其為本發明的用於枚舉系統進程的方法的實施例的流程圖。步驟100,獲取系統進程和線程對象句柄表。具體而言,系統進程和線程對象句柄表(PspCidTable)是Windows系統中一種句柄表,其中存放的對象是系統中所有的進線程對象。因此只要能遍歷這個PspCidTable句柄表,就可以遍歷到系統的所有進程,包括所有隱藏進程。不難理解,若欲通過PspCidTable來獲取系統進程,則首先需要獲取PspCidTable,即定位到所述PspCidTablede的首地址。獲取所述PspCidTablede的方法有很多種,在這裡列舉其中兩種。方法之一包括a,獲取內核進程控制區域地址;b,將內核進程控制區域地址偏移固定的步長獲取系統進程和線程對象句柄表地址;C,根據其地址獲取系統進程和線程對象句柄表。具體而言,首先獲取內核進程控制區域(KernelProcessControlRegion,KPCR)的地址。在windows系統中,所述KPCR的地址為OxFFDFFOOO。且該地址一般不會隨windows的版本變動而變化。在所述KPCR的結構中有KPRCB、內核變量塊(KdVersionBlock)、TSS等信息。接著,在KPCR的地址OxFFDFFOOO基礎上偏移+0x34(0xFFDFF034)即可找到所述KdVersionBlocko其中,KdVersionBlock是一個結構體指針,其對應的結構體是_DBGKD_GET_VERSI0N64o由這個結構體_DBGKD_GET_VERSI0N64的起始位置偏移+0x80既可以獲得PspCidTable。方法之二通過函數PsLookupProcessThreadByCidO或者PsLookupProcessByProcessId、PsLookupThreadByThreadIdO中特徵搜索定位系統進程和線程對象句柄表。所謂內存特徵搜索是指調用這些函數的時候會用到PspCidTable,但是個系統中的PspCidTable出現的地方不同,可以根據PspCidTable前後的特徵來實現搜索。其中,所述特徵搜索的特徵串在不同的作業系統下有可能不同,Win2000和Win2003中是0x35FF和0xe8,win7是0x3D8B和0xe8。當然,還可以通過其它方式獲取PspCidTable,這裡不再一一列舉。需要強調的是,任何能夠獲取PspCidTable的方法均可應用於此,在本實施例中對此並無限制。步驟110,遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象,獲得系統的進程。PspCidtable為_Handle_Table結構,在Windows2000系統中,其為固定的三層表結構,TableCode中記錄著三層表即一級表(一級表也稱為基本表,最表)、二級表和三級表(為最上層表)的基地址。在上述的三層表中,上一級表中存放的地址指針指向與其臨近的下一層地址,如三級表中存放的是指向二級表的指針,二級表中存放的是指向基本表的指針,在基本表中存放的才是指向進程對象或線程的指針。而在Windowsxp和Windows2003中,為了節省系統空間,採用了動態可擴展的三層表結構,當句柄數目較少時候僅僅採用基本表,當句柄數目較大時系統才會啟用二級表,直至三級表。無論是上述的固定三層表結構還是動態可擴展的三層表結構,都需要根據每一層表的基地址按照固定的步長遍歷每一層存放的地址指針,方能獲得該句柄表中所有句柄表項。只不過在動態可擴展的三層表結構中,首先需要判斷其真正的句柄表層數是多少,然後再根據該實際的句柄表層數執行相應個層的遍歷。具體過程如下A,首先獲取句柄表層數;B,判斷句柄表層數為一層還是大於一層;若獲取的句柄表層數為一層,按照固定的步長遍歷該層每一句柄表項,獲取每一句柄表項中的指向進程對象的對象體指針地址;若獲取的句柄表層數大於一層,則首先指向句柄表最高層,由最高層按照固定步長遍歷該層每一句柄表項;並獲取每一句柄表項中的指向相鄰下層句柄表項的成員指針;重複執行遍歷每一層的句柄表項,直至最下層;並由該最下層的每一句柄表項中的指向進程對象的對象體指針地址;C,由所述對象體指針地址獲取對象體指針。其中,在動態可擴展的三層表中,TableCode的後兩位是判斷句柄表層數的依據,後兩位是00則是一層表結構,後兩位是01則是兩層表結構,後兩位是10則是二層表結構。通過讀取進程和線程對象句柄表中tablecode值的後兩位值可以獲得句柄表層數。此外,在上述句柄表層數大於一層時,通過如下方式指向句柄表最高層獲取句柄表中TableCode指針;接著將所述TableCode指針定位到句柄表最高層。如上所述,在PspCidTable句柄表中,存放的是系統進程和線程的對象句柄。通過遍歷能夠獲得基層表中記錄的指向對象指針,但是該指針是指向對象體的,無法判斷其是進程還是線程。故還需要通過偏移獲取類型為_0BJECT_HEADER的、指向對象頭的指針,並由對象頭指針中讀出其指針類型,方能確定指針指向的是進程還是線程。選出類型為進程的對象頭指針,通過所述進程對象頭指針,既可以獲得相應的進程。遍歷該PspCidTable句柄表,即可獲得該句柄表中記錄的所述進程,即獲得所有進程對象的數據結構_EPR0CESS。本實施例中通過如下方式判斷對象頭指針中類型為進程的指針類型信息,即通過PsGetCurrentProcessO或IoGetCurrentProcessO等函數獲取當前進程,由該當前進程的對象體指針偏移獲取其對象頭指針;在該對象頭指針中讀取其指針類型信息。步驟S120,集合所獲得的所有進程,形成系統當前進程集合。本發明的上述實施例中,通過獲取系統進程和線程對象句柄表(pspCidTable),並遍歷該表中進程對象體指針指向的進程對象來獲取系統的進程;由於在pspCidTable中保存了系統所有進程和線程的對象指針,而且該對象指針指向對象體,因而只要挑選出所有的進程對象體指針並遍歷其指向的進行對象,即可獲取所有的進程,包括隱藏的進程;也就是說,即使有些進程從進程活動鍊表中刪除,通過本發明的方法仍然能夠枚舉出該進程,使得一些惡意軟體或者Rootkit無處藏身,有利於減少一些惡意的隱藏進程對系統的威脅。對於所述獲得系統的進程中的至少一個進程,還可以按照該進程所在的SessionProcessLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。WINDBG中數據結構如下kd>dt—eprocess81c2c6d8nt!—EPROCESS+OxObOVirtualSize0x3933000+0x0b4SessionProcessLinks:_LIST_ENTRY由上述結構可知,進程的SessionProcessLinks也是_LIST_ENTRY結構的環形雙向鍊表,對於每一進程,通過遍歷該SessionProcessLinks,均可得到一個進程的列表。對通過上述實施例的方法得到進程列表中的任一或多個進程,再通過SessionProcessLinks遍歷,可得到一個或多個進程表,將獲得的進程表與上述實施例中得到的進程表集合,並去除重複進程,即可得到更為完整的進程集合。此外,對於所述獲得系統的進程中的至少一個進程,按照該進程所在Vm.WorkingSetExpansionLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。其中,Vm.WorkingSetExpansionLinks遍歷的原理同SessionProcessLinks遍歷,這裡不再贅述。此外,通過上述實施例獲得進程列集合,還可以繼續執行如下的步驟I.將獲取的當前進程集合與Windows任務管理器的進程表比對;II.找出不同於Windows任務管理器的進程表中的進程;III.將所述找出的進程向用戶發送提示消息或發送報警。也就是說,通過將本發明的實施例獲得的進程集合與前述
背景技術:
中的方法所獲得進程表進行比對,並將本發明的實施例的方法獲得的進程集合與
背景技術:
中所獲得的方法所不同的進程找出並提示用戶或發出報警。用戶可以根據該提示或報警對所找出的不同進程進一步分析,判斷是否惡意進程。以上公開了本發明的一種用於枚舉系統進程的方法的實施例,與此相應的,本發明還公開了一種用於枚舉系統進程的裝置。請參考圖2,其為本發明的一種用於枚舉系統進程的裝置的一種實施例的示意圖。由於該裝置的實施例與前述的方法的實施例基本相同,下面僅簡單描述本實施例中的裝置。本實施例中,一種用於枚舉系統進程的裝置包括句柄表獲取單元200,用於獲取系統進程和線程對象句柄表;遍歷執行單元210,用於遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象,獲得系統的進程;集合單元220,集合所獲得的所有進程,形成系統當前進程集合。可選的,所述句柄表獲取單元包括地址獲取單元,用於獲取內核進程控制區域地址;偏移單元,用於將內核進程控制區域地址偏移固定的步長獲取系統進程和線程對象句柄表地址;根據其地址獲取系統進程和線程對象句柄表可選的,所述句柄表獲取單元包括搜索定位單元,用於通過系統進程和線程對象句柄表的函數中特徵搜索定位系統進程和線程對象句柄表。可選的,所述遍歷執行單元包括對象體指針獲取單元,用於在所述進程和線程對象句柄表中獲取所有對象體指針;進程對象體指針獲取單元,用於在所述所有對象體指針中獲取進程對象頭指針;執行單元,用於遍歷所述進程對象頭指針指向的進程對象,獲取所有進程。可選的,所述對象體指針獲取單元,包括句柄表層數獲取單元,用於獲取所述句柄表層數;遍歷執行單元,用於根據句柄表層數遍歷句柄表項,若獲取的句柄表層數為一層,按照固定的步長遍歷該層每一句柄表項,並獲取每一句柄表項中的指向進程對象的對象體指針地址;若獲取的句柄表層數大於一層,則首先指向句柄表最高層,由最高層按照固定步長遍歷該層每一句柄表項;並獲取每一句柄表項中的指向相鄰下層句柄表項的成員指針;重複執行遍歷每一層的句柄表項,直至最下層;並由該最下層的每一句柄表項中的指向進程對象的對象體指針地址;對象體指針提取單元,用於由該對象體指針地址獲取對象體指針。可選的,所述進程對象頭指針獲取單元,包括對象頭指針獲取單元,用於由對象體指針偏移一定步長獲取相應的對象頭指針;指針類型提取單元,用於在所述對象頭指針中讀取其指針類型信息;選擇單元,用於選出所有類型為進程的對象頭指針,與該對象頭指針相應的對象體指針即為向進程對象頭指針。可選的,所述句柄表層數獲取單元,包括讀取單元,用於讀取進程和線程對象句柄表中tablecode值的後兩位值;判斷單元,用於根據所述後兩位值判斷句柄表層數。可選的,所述遍歷執行單元還包括=TableCode指針獲取單元,用於獲取句柄表中TableCode指針;定位單元,用於將所述TableCode指針定位到句柄表最高層。可選的,所述選擇單元,包括當前進程獲取單元,用於選取當前任一進程,並取得其對象體指針;對象頭指針獲取單元,用於由該當前進程的對象體指針偏移獲取其對象頭指針;指針類型提取單元,用於在該對象頭指針中讀取其指針類型信息;選擇執行單元,用於選取所有與所述指針類型信息相同的對象頭指針。可選的,還包括第二遍歷執行單元,用於對於所述獲得系統的進程中的至少一個進程,按照該進程所在的SessionProcessLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。可選的,還包括第三遍歷執行單元,用於對於所述獲得系統的進程中的至少一個進程,按照該進程所在Vm.WorkingSetExpansionLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。可選的,本實施例的用於枚舉系統進程的裝置還包括對比單元,用於將獲取的當前進程集合與Windows任務管理器的進程表比對;提取單元,用於找出不同於Windows任務管理器的進程表中的進程;報警單元,用於以所述找出的進程作為內容向用戶發送或者向用戶發送提示消息或報警。應用本發明實施例的裝置可獲得與上述方法實施例相同的技術效果,這裡不再贅述。在此提供的算法和顯示不與任何特定計算機、虛擬系統或者其它設備固有相關。各種通用系統也可以與基於在此的示教一起使用。根據上面的描述,構造這類系統所要求的結構是顯而易見的。此外,本發明也不針對任何特定程式語言。應當明白,可以利用各種程式語言實現在此描述的本發明的內容,並且上面對特定語言所做的描述是為了披露本發明的最佳實施方式。在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本發明的實施例可以在沒有這些具體細節的情況下實踐。在一些實例中,並未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。類似地,應當理解,為了精簡本公開並幫助理解各個發明方面中的一個或多個,在上面對本發明的示例性實施例的描述中,本發明的各個特徵有時被一起分組到單個實施例、圖、或者對其的描述中。然而,並不應將該公開的方法解釋成反映如下意圖即所要求保護的本發明要求比在每個權利要求中所明確記載的特徵更多的特徵。更確切地說,如下面的權利要求書所反映的那樣,發明方面在於少於前面公開的單個實施例的所有特徵。因此,遵循具體實施方式的權利要求書由此明確地併入該具體實施方式,其中每個權利要求本身都作為本發明的單獨實施例。本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變並且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特徵和/或過程或者單元中的至少一些是相互排斥之外,可以採用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特徵以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特徵可以由提供相同、等同或相似目的的替代特徵來代替。此外,本領域的技術人員能夠理解,儘管在此所述的一些實施例包括其它實施例中所包括的某些特徵而不是其它特徵,但是不同實施例的特徵的組合意味著處於本發明的範圍之內並且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。本發明的各個部件實施例可以以硬體實現,或者以在一個或者多個處理器上運行的軟體模塊實現,或者以它們的組合實現。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數位訊號處理器(DSP)來實現根據本發明實施例的用於枚舉系統的裝置中的一些或者全部部件的一些或者全部功能。本發明還可以實現為用於執行這裡所描述的方法的一部分或者全部的設備或者裝置程序(例如,電腦程式和電腦程式產品)。這樣的實現本發明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從網際網路網站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。應該注意的是上述實施例對本發明進行說明而不是對本發明進行限制,並且本領域技術人員在不脫離所附權利要求的範圍的情況下可設計出替換實施例。在權利要求中,不應將位於括號之間的任何參考符號構造成對權利要求的限制。單詞「包含」不排除存在未列在權利要求中的元件或步驟。位於元件之前的單詞「一」或「一個」不排除存在多個這樣的元件。本發明可以藉助於包括有若干不同元件的硬體以及藉助於適當編程的計算機來實現。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬體項來具體體現。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。權利要求1.一種用於枚舉系統進程的方法,其特徵在於,包括獲取系統進程和線程對象句柄表;遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象,獲得系統的進程;集合所獲得的所有進程,形成系統進程集合。2.根據權利要求I所述的用於枚舉系統進程的方法,其特徵在於,所述獲取系統進程和線程對象句柄表包括獲取內核進程控制區域地址;將內核進程控制區域地址偏移固定的步長獲取系統進程和線程對象句柄表地址;根據其地址獲取系統進程和線程對象句柄表。3.根據權利要求I所述的用於枚舉系統進程的方法,其特徵在於,所述獲取系統進程和線程對象句柄表包括通過系統進程和線程對象句柄表的函數中特徵搜索定位系統進程和線程對象句柄表。4.根據權利要求3所述的用於枚舉系統進程的方法,其特徵在於,所述特徵搜索的特徵串包括0x35ff和0x8e。5.根據權利要求I所述的用於枚舉系統進程的方法,其特徵在於,所述遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象包括在所述進程和線程對象句柄表中獲取所有對象體指針;在所述所有對象體指針中獲取進程對象頭指針;遍歷所述進程對象頭指針指向的進程對象,獲取所有進程。6.根據權利要求5所述的用於枚舉系統進程的方法,其特徵在於,所述在所述進程和線程對象句柄表中獲取對象體指針包括獲取所述句柄表層數;若獲取的句柄表層數為一層,按照固定的步長遍歷該層每一句柄表項,獲取每一句柄表項中的指向進程對象的對象體指針地址;若獲取的句柄表層數大於一層,則首先指向句柄表最高層,由最高層按照固定步長遍歷該層每一句柄表項;並獲取每一句柄表項中的指向相鄰下層句柄表項的成員指針;重複執行遍歷每一層的句柄表項,直至最下層;並由該最下層的每一句柄表項中的指向進程對象的對象體指針地址;由所述對象體指針地址獲取對象體指針。7.根據權利要求5所述的用於枚舉系統進程的方法,其特徵在於,所述在所述所有對象體指針中獲取進程對象頭指針包括由對象體指針偏移一定步長獲取相應的對象頭指針;在所述對象頭指針中讀取其指針類型信息;選出所有類型為進程的對象頭指針。8.根據權利要求6所述的用於枚舉系統進程的方法,其特徵在於,所述獲取所述句柄表層數包括讀取進程和線程對象句柄表中tablecode值的後兩位值;根據所述後兩位值判斷句柄表層數。9.根據權利要求6所述的用於枚舉系統進程的方法,其特徵在於,所述所述首先指向句柄表最聞層包括獲取句柄表中TableCode指針;將所述TableCode指針定位到句柄表最高層。10.根據權利要求7所述的用於枚舉系統進程的方法,其特徵在於,所述選出所有類型為進程的對象頭指針包括選取當前任一進程,並取得其對象體指針;由該當前進程的對象體指針偏移獲取其對象頭指針;在該對象頭指針中讀取其指針類型信息;選取所有與所述指針類型信息相同的對象頭指針。11.根據權利要求I所述的用於枚舉系統進程的方法,其特徵在於還包括對於所述獲得系統的進程中的至少一個進程,按照該進程所在的SessionProcessLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。12.根據權利要求I所述的用於枚舉系統進程的方法,其特徵在於還包括對於所述獲得系統的進程中的至少一個進程,按照該進程所在Vm.WorkingSetExpansionLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。13.根據權利要求I所述的用於枚舉系統進程的方法,其特徵在於,還包括將獲取的當前進程集合與Windows任務管理器的進程表比對;找出不同於Windows任務管理器的進程表中的進程;以所述找出的進程作為內容向用戶發送或者向用戶發送提示消息或報警。14.一種用於枚舉系統進程的裝置,其特徵在於,包括句柄表獲取單元,用於獲取系統進程和線程對象句柄表;遍歷執行單元,用於遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象,獲得系統的進程;集合單元,集合所獲得的所有進程,形成系統進程集合。15.根據權利要求14所述的用於枚舉系統進程的裝置,其特徵在於,所述句柄表獲取單元包括地址獲取單元,用於獲取內核進程控制區域地址;偏移單元,用於將內核進程控制區域地址偏移固定的步長獲取系統進程和線程對象句柄表地址;根據其地址獲取系統進程和線程對象句柄表。16.根據權利要求14所述的用於枚舉系統進程的裝置,其特徵在於,所述句柄表獲取單元包括搜索定位單元,用於通過系統進程和線程對象句柄表的函數中特徵搜索定位系統進程和線程對象句柄表。17.根據權利要求14所述的用於枚舉系統進程的裝置,其特徵在於,所述遍歷執行單元包括對象體指針獲取單元,用於在所述進程和線程對象句柄表中獲取所有對象體指針;進程對象體指針獲取單元,用於在所述所有對象體指針中獲取進程對象頭指針;執行單元,用於遍歷所述進程對象頭指針指向的進程對象,獲取所有進程。18.根據權利要求17所述的用於枚舉系統進程的裝置,其特徵在於,所述對象體指針獲取單元,包括句柄表層數獲取單元,用於獲取所述句柄表層數;遍歷執行單元,用於根據句柄表層數遍歷句柄表項,若獲取的句柄表層數為一層,按照固定的步長遍歷該層每一句柄表項,並獲取每一句柄表項中的指向進程對象的對象體指針地址;若獲取的句柄表層數大於一層,則首先指向句柄表最高層,由最高層按照固定步長遍歷該層每一句柄表項;並獲取每一句柄表項中的指向相鄰下層句柄表項的成員指針;重複執行遍歷每一層的句柄表項,直至最下層;並由該最下層的每一句柄表項中的指向進程對象的對象體指針地址;對象體指針提取單元,用於由該對象體指針地址獲取對象體指針。19.根據權利要求17所述的用於枚舉系統進程的裝置,其特徵在於,所述進程對象頭指針獲取單元,包括對象頭指針獲取單元,用於由對象體指針偏移一定步長獲取相應的對象頭指針;指針類型提取單元,用於在所述對象頭指針中讀取其指針類型信息;選擇單元,用於選出所有類型為進程的對象頭指針,與該對象頭指針相應的對象體指針即為向進程對象頭指針。20.根據權利要求18所述的用於枚舉系統進程的裝置,其特徵在於,所述句柄表層數獲取單元,包括讀取單元,用於讀取進程和線程對象句柄表中tablecode值的後兩位值;判斷單元,用於根據所述後兩位值判斷句柄表層數。21.根據權利要求18所述的用於枚舉系統進程的裝置,其特徵在於,所述遍歷執行單元還包括TableCode指針獲取單元,用於獲取句柄表中TableCode指針;定位單元,用於將所述TableCode指針定位到句柄表最高層。22.根據權利要求19所述的用於枚舉系統進程的裝置,其特徵在於,所述選擇單元,包括當前進程獲取單元,用於選取當前任一進程,並取得其對象體指針;對象頭指針獲取單元,用於由該當前進程的對象體指針偏移獲取其對象頭指針;指針類型提取單元,用於在該對象頭指針中讀取其指針類型信息;選擇執行單元,用於選取所有與所述指針類型信息相同的對象頭指針。23.根據權利要求14所述的用於枚舉系統進程的裝置,其特徵在於,還包括第二遍歷執行單元,用於對於所述獲得系統的進程中的至少一個進程,按照該進程所在的SessionProcessLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合I=ITTO24.根據權利要求14所述的用於枚舉系統進程的裝置,其特徵在於,還包括第三遍歷執行單元,用於對於所述獲得系統的進程中的至少一個進程,按照該進程所在Vm.WorkingSetExpansionLinks鍊表再做遍歷,並將獲得的進程表與所述獲得系統的進程集合合併。25.根據權利要求14所述的用於枚舉系統進程的裝置,其特徵在於,還包括對比單元,用於將獲取的當前進程集合與Windows任務管理器的進程表比對;提取單元,用於找出不同於Windows任務管理器的進程表中的進程;報警單元,用於以所述找出的進程作為內容向用戶發送或者向用戶發送提示消息或報全文摘要本發明公開了一種用於枚舉系統進程的方法,包括獲取系統進程和線程對象句柄表;遍歷所述系統進程和線程對象句柄表中進程對象體指針指向的進程對象,獲得系統的進程;集合所獲得的所有進程,形成系統進程集合。本發明還公開了一種用於枚舉系統進程的裝置。本發明能夠枚舉出系統所有的進程,包括隱藏的進程,有利於減少一些惡意的隱藏進程對系統的威脅。文檔編號G06F21/50GK102867139SQ20121035981公開日2013年1月9日申請日期2012年9月25日優先權日2012年9月25日發明者張輝申請人:北京奇虎科技有限公司,奇智軟體(北京)有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀