2013-11-25 63 views
1

我想創建一個應用程序,它檢查所有正在運行的進程對白名單和任何不在列表中的進程將終止。
我的想法是第一次嘗試使用tasklikst命令,得到名單可以說,每一秒,並檢查它針對列表。
後來我想這將是一個更好的主意,更早檢查,創建過程中,尚未執行時,有我們檢查一下針對我們列表,然後如果不在列表中終止它。 那我該怎麼辦呢?
您建議如何處理此問題?
我也對使用C++或C#的語言表示懷疑嗎? 它會在這種情況下有所作爲嗎?我如何知道什麼時候正在創建進程並阻止其在Windows中執行或終止它?

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684865(v=vs.85).aspx – Abhineet

+0

您需要此IIRC的WMI –

+2

已有組策略。使用它們。沒有必要重新發明輪子。 –

回答

3

C#中最簡單的方法是定期使用Process.GetProcesses,然後使用Process.Kill殺死任何你想死的東西。但是請注意,當你殺死它的時候,這個過程可能正在進行一些工作 - 它只會幫助你抵禦遊戲(等等),而不是針對惡意軟件。另外,不要忘記,用戶可以將exe文件重命名爲「notepad.exe」。如果這是一個問題,您可以檢查可執行文件的完整路徑,而不僅僅是文件名。

如果你想要一個更智能的方式,不用輪詢,你可以在啓動過程調用中創建一個鉤子 - 參見Monitor process start in the system。通過這種方式,您實際上可以防止進程首先運行。

1

你可以在C++或C#中實現這個,這個不是真的的問題。選擇一個你最舒服的人。下面是一個算法:

  • 設置定時器或計劃任務之類的東西,這將在一段時間
  • 枚舉進程
  • 對於每一個發現過程檢查名稱對塗白一旦執行代碼上市字典
  • 試圖殺死一個進程

在C#中,你可以使用Process class枚舉和殺害。

現在事情就明白了:

  • 您的應用程序可能沒有足夠的權限列舉或殺死其他應用
  • 您的代碼可能會要求管理員權限
  • 事情可能會變得複雜,如果在運行Active Directory中設置了組策略
  • 病毒或其他不需要的應用程序能夠「注入」他們的代碼到無人不曉或無辜的應用程序(也就是到您的白名單中的應用程序之一)
  • 您將無法殺死大部分的系統任務,所以就不要嘗試全球化是
  • 檢查的支持,進程名稱可以得到改變
  • 單靠名依託是一個貧窮的做法。如果你想檢查真實性,你應該依靠一些加密簽名,當然,這是一個痛苦的維護,因爲應用程序得到更新。

考慮到最後一段,你試圖實施該解決方案是非常基本的。沒有什麼會阻止用戶幹掉你的應用程序。或者將病毒應用程序重命名爲標準。它看起來很像「通過隱藏的安全」,這有一定的好處,但在防守方面實力真的很弱。

1

一種技術是創建使用SetWindowsHookEx,這將被注入到每一個過程全局鉤子DLL。通過這種方式,您將獲得任何新流程的通知,並且您可以根據需要採取措施。

當然,你需要使這個DLL作爲輕量級儘可能考慮到它會被加載到每一道工序,直到永遠。但我仍然認爲這比投票不斷,或IAT補丁更苗條。

+0

可以通過調用SetWindowsHookEx我勾CreateProcess函數?如果是如何,如果沒有我怎樣才能掛鉤的CreateProcess? – Breeze

相關問題