2008-11-16 90 views
7

有沒有辦法在系統啓動之前監視系統中啓動的進程?在系統中監視進程啓動

舉例:
在象ZoneAlarm或防病毒程序的程序,當你運行一個程序會詢問你是否允許運行此程序或不運行之前...

回答

3

你可以找出流程時啓動通過使用實時ETW消費 - 然而,能夠採取一些行動可能可能從開始取消的過程中,你必須做一些見不得人/無證,如掛鉤的CreateProcess,或者使用內核篩選器驅動程序阻止對EXE的讀取。

6

你應該看看easyhook-continuing-detours項目,這是Microsoft Detours項目的.NET端口。它將允許您掛鉤非託管API(例如CreateProcess)。查看一個簡單的FileMon程序here的代碼示例。

+0

請不要在生產代碼中執行此操作,它在x64上不起作用,並且很可能會導致混亂 – 2008-11-19 22:51:20

2

只需使用進程創建通知。它包含在Windows中。 你不需要鉤住任何東西。

7

有幾種方法可以做到這一點。如果您只需要跟蹤來自特定程序(或幾個程序)的進程創建,這裏提到的EasyHook/Detours方法將會很好地工作,但您實際上需要在每個程序中安裝一個CreateProcess鉤子,所以它不是如果您想跟蹤系統中的所有流程創建,這是一個很好的解決方案

在基於NT的Windows變體(NT/2000/XP/Vista)中有一個稱爲PsSetCreateProcessNotifyRoutine()的特定API。不幸的是,你只能從ring0調用這個函數,所以需要在驅動程序中完成。這個CodeProject文章中有一個方便的解釋(和代碼):http://www.codeproject.com/KB/threads/procmon.aspx

AFAIK,這只是一個通知,而不是本身並允許你告訴系統的過程中是否應該創建與否。但是,如果您需要這樣做,則可以暫停該過程(例如,通過將其作爲調試器附加到該過程),同時代碼決定是否要殺死它。