
假設我有一個進程資源管理器向我顯示我有一個名為EvilAppsRUs.exe
running 的應用程式。
我殺了它,但它又重新開始了。我已檢查以確保它沒有服務(透過在 Process Explorer 中右鍵單擊 -> 其屬性)。
所以,我相當確定還有另一個進程(可能稱為良性進程DisplayDriver.exe
)正在啟動(並重新啟動)EvilAppsRUs.exe
。
我怎麼知道正在重新啟動邪惡進程的進程的名稱是什麼?
答案1
答案2
長話短說:不要相信顯示進程樹的常用工具提供的此資訊。
沒有像這樣的工具提及 過程監控器或有些相關的系統監視器 你不可能知道這個。和他們,理論上是可能的,只要相應的工具捕獲流程創建和使用的事件那捕獲的資訊用於(重新)建立進程樹。
然而,父進程和子進程之間的關係並不相關的在 Windows 上就像在 Unix 上一樣。在 Unix 上,父行程必須收集子程序的退出狀態,這樣子程序才不會成為殭屍。這是一條重要的訊息,因為它也解釋了為什麼一般來說,Windows 並不像 Unix 那樣重視父子程序關係。 Windows 中的父行程不需要收集其子程序的退出狀態。
更糟的是:在創建進程期間,您可以透過使用來偽造父進程PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
,通常應該讓您了解 Process 中的進程樹的可信度探險家是(提示:不是)。這些資訊可以也只要進行該操作的進程對被操作的進程具有適當的存取級別,就可以在正在運行的進程上進行偽造。
理論上,進程監視器的優點是它可以看到正在創建的進程,而不必依賴您可以提取的信息事後來自每個各自的進程(並且可以偽造)。但是,我不知道該資訊是否用於填充其進程樹。看起來好像不是。鑑於在捕獲之前可以顯示進程樹任何Process Monitor 中的事件,按理說它與 Process Explorer 類似,這意味著該資訊也不可信。
雖然PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
僅在 Windows 7 左右引入,但即使在早期的 Windows 版本中,父子進程關係也從未非常相關。
延伸閱讀:
PS:傳統工具將使用記錄的tlhelp32
(CreateToolhelp32Snapshot
等人)PROCESSENTRY32W::th32ParentProcessID
) 功能或 NT 本機 APINtQuerySystemInformation
與某事喜歡 SystemProcessInformation
(內貝特稱為SystemProcessesAndThreadsInformation
)。這意味著他們將返回可能偽造的父 PID。