[發明專利]一種用于枚舉系統進程的方法及裝置有效
申請號: | 201210362570.6 | 申請日: | 2012-09-25 |
公開(公告)號: | CN102945343A | 公開(公告)日: | 2013-02-27 |
發明(設計)人: | 張輝 | 申請(專利權)人: | 北京奇虎科技有限公司;奇智軟件(北京)有限公司 |
主分類號: | G06F21/55 | 分類號: | G06F21/55 |
代理公司: | 北京市德權律師事務所 11302 | 代理人: | 劉杰 |
地址: | 100088 北京市西城區新*** | 國省代碼: | 北京;11 |
權利要求書: | 查看更多 | 說明書: | 查看更多 |
摘要: | |||
搜索關鍵詞: | 一種 用于 枚舉 系統 進程 方法 裝置 | ||
技術領域
本發明涉及計算機技術領域,特別是涉及一種用于枚舉系統進程的方法。本發明還涉及一種用于枚舉系統進程的裝置。
背景技術
Windows任務管理器可以枚舉出系統當前的進程,并能夠根據需要選擇終止進程。為管理系統進程提供了很大的便利。
Windows任務管理器枚舉系統當前進程是通過其Native?API函數ZwQuerySystemInfomation來操作進程活動鏈表來實現的。具體的過程如下:
首先,獲取當前任一進程的指針,例如可以通過PsGetCurrentProcess()來獲取當前進程的PEPROCESS指針。
然后定位到記錄該當前進程與其它進程鏈接信息的Activelist處,具體的操作方式為ActiveList=pCurrentEprocess+0x88,即當前進程指針移動一定的步長。其中0x88為winxp?sp3下Activelist與pCurrentEprocess的步長,在不同win操作系統時該步長并不相同。
接著,以所定位的當前進程的Activelist遍歷整個進程活動鏈表(Activelistlink)上每一進程的數據結構,即可獲得當前的存在于進程活動鏈表的所有進程。
如上所述,因為windows任務管理器是基于ZwQuerySystemInformation來實現的,所以如果將進程對象從進程活動鏈表中移除,那么調用NtQuerySystemInfomation來枚舉進程的任務管理器TaskMgr.exe中就不會看到目標進程了。同時,Windows的任務調度分配器使用的另一的數據結構,也就是說,進程是否被調度執行與進程活動鏈表無關,不會因為從進程活動鏈表刪除就被CPU忽略,因此進程仍然會被執行。這很容易被一些惡意軟件或者RootKit程序利用,在進程活動鏈表上不顯示其存在,但是仍然被執行,這可能導致用戶的計算機在不知不覺中被感染病毒、植入木馬或者竊取了信息,對計算機造成潛在的或現實的威脅。因而有必要能夠查找出這種被進程活動鏈表忽略而實質上又在被執行的隱藏進程。
發明內容
鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的用于枚舉系統進程的方法和相應的用于枚舉系統進程的裝置。
依據本發明的一個方面,提供一種用于枚舉系統進程的方法,包括:
獲取System進程的EPROCESS結構;
以Mmsystem?range?start地址為起始點并以所述EPROCESS的長度作為步長遍歷Mmsystem?range?start地址至所述System進程的EPROCESS結構之間的內存空間,獲取每一步長對應的內存地址段中的內容;
所述每一步長對應的內存地址段中,對于起始地址為有效地址的內存地址段,判斷該內存地址段中的內容是否為合法的進程;若是,則記錄該進程;若否,則忽略該內存地址段;
集合所獲得的所有合法進程,形成系統進程集合。
可選的,所述獲取System進程EPROCESS結構包括:
在驅動加載的入口函數中調用函數PsGetCurrentProcess()獲得System進程的EPROCESS結構。
可選的,所述判斷該內存地址段中的內容是否為進程包括:
將內存地址段中的內容賦值給EPROCESS結構;
判斷被賦值的EPROCESS結構的成員變量ExitTime的值是否為零;
判斷被賦值的EPROCESS結構的成員變量_bject_type的類型值是否為process;
若上述兩個成員變量均為是,則內存地址段中的內容為合法的進程,否則為不合法進程。
可選的,所述判斷被賦值的EPROCESS結構的成員變量ExitTime的值是否為零包括:
由被賦值的EPROCESS結構首地址偏移0x78,獲得成員變量ExitTime;
提取所述成員變量ExitTime的值;
判斷所述成員變量ExitTime的值是否等于零。
可選的,所述判斷被賦值的EPROCESS結構的成員變量_bject_type的類型值是否為Process包括:
由被賦值的EPROCESS結構首地址偏移0x8,獲得成員變量_bject_type;
由所述成員變量_bject_type的首地址偏移0x40,獲得成員type;
提取所述成員type的值;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京奇虎科技有限公司;奇智軟件(北京)有限公司,未經北京奇虎科技有限公司;奇智軟件(北京)有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210362570.6/2.html,轉載請聲明來源鉆瓜專利網。