2012-01-14 75 views
1

想知道「Process Explorer」或「Combo Fix」這樣的應用程序如何檢測隱藏進程?我假設這必須在C或C++中完成。即使在.NET中它也很容易訪問進程列表,但是這並不總是準確的,我知道root工具包可以掩蓋自己的任務管理器。它是通過內存訪問和IO嗎?好奇,如果有人知道這是如何完成的。如何檢測隱藏進程

回答

10

這個問題無法回答。這取決於過程如何被隱藏起來。例如,某人可以通過將用戶模式DLL注入到所有進程中來隱藏進程,這些進程掛鉤了EnumProcesses,Process32Next等,以及與進程枚舉相關的所有其他API。這將被跳過跳鉤的蹦牀繞過。

但是,如果通過修改內核EPROCESS鏈接列表來隱藏進程,該列表包含進程列表,則需要另一種方法來破壞執行隱藏的代碼。如果您定義了您認爲某個流程「隱藏」的方式,也許我們可以建議如何檢測它。你認爲哪些進程被隱藏,但仍然被Process Explorer發現?


還注意到你說的考慮,有可能是 多種方式隱藏的過程是什麼。 檢測到這一點的一些常見方法是什麼?

問題是,如果你不知道你在找什麼,幾乎不可能找到它。假設一個進程通過掛鉤EnumProcesses使其隱藏到任務管理器中。你可能會認爲這將是一個容易發現的情況。然而,這個過程可能會通過各種不同的方式掛鉤EnumProcesses。例如,函數開始時的無條件鉤子,IAT鉤子,導致在EnumProcesses處發生訪問衝突,並通過VEH捕獲並修改EIP/RIP等。即使在這種簡單情況下,它也是不可能保證檢測到掛鉤。這一切都假設鉤子已經在特定的API的usermode上執行,並且代碼不會試圖隱藏自己的檢測。

如果你正在尋找一般的指導方針,最好的方法可能是看看常見的繞行技術。一旦你知道一個方法是如何工作的,編寫代碼來檢測操作是微不足道的。

也許如果你給出了編寫這類代碼的動機或它的用途,我們將能夠更好地幫助你。


如果您正在尋找方案繞行其他進程的執行方式,它通常是通過兩種方法之一:

  • 動態(運行時)繞行 - 這是比較常見的方法是圖書館使用的是什麼,如Microsoft Detours。這裏是一個相關的論文,其中函數的前幾個字節被覆蓋,以無條件地分支到儀器。
  • (靜態)二進制重寫 - 這是一種不太常見的rootkit方法,但被研究項目使用。它允許通過靜態分析和覆蓋二進制來執行繞行。用於Windows的舊版(不公開提供)的軟件包是Etch。 This paper從概念上給出了它如何工作的高級視圖。

雖然Detours展示了一種動態迂迴的方法,但業界有無數的方法,特別是在逆向工程和黑客領域。這些包括上面提到的IAT和斷點方法。爲了「爲你指出正確的方向」,你應該看看在研究項目和逆向工程領域進行的「研究」。

+1

+1,正是我在想的 – 2012-01-14 21:30:27

+0

我不是在尋找代碼或確切的答案,但我認爲它不會很難指向我在一些資源的正確方向。感謝您的迴應。 – 2012-01-14 21:34:16

+0

同樣考慮到你所說的話,可能有多種方法來隱藏進程。檢測此問題的一些常用方法有哪些? – 2012-01-14 21:37:39