2009-11-25 88 views
2

我知道防病毒如何檢測病毒。我讀了幾aticles:請幫助我使用檢測惡意行爲的病毒檢測程序

How do antivirus programs detect viruses?

http://www.antivirusworld.com/articles/antivirus.php

http://www.agusblog.com/wordpress/what-is-a-virus-signature-are-they-still-used-3.htm

http://hooked-on-mnemonics.blogspot.com/2011/01/intro-to-creating-anti-virus-signatures.html

在我有這個1個月假期。我想學習&一個簡單的代碼病毒檢測程序: 因此,有2-3辦法(從上面的文章):

  1. 病毒字典:搜索病毒特徵碼
  2. 檢測惡意行爲

我想採取第二種方法。我想從簡單的事情開始。

作爲便箋,最近我遇到了一個名爲「ThreatFire」的軟件。它做得很好。

  1. 第一件事我不明白的是,這個程序如何幹涉他人之間的執行,並提示用戶其行爲。是不是像違規?
  2. 它如何掃描其他程序的內存?一個程序僅限於它的虛擬空間嗎?
  3. C#.NET是否適合做這種東西?
  4. 請發表您的想法如何去做呢?還提一些我可以做的簡單事情。
+0

凹凸。如果目前的答案不夠充分,你能否補充一些缺乏的意見。謝謝。 – 2009-12-01 05:23:18

回答

5
  1. 這是因爲有問題的軟件可能已安裝,使它低級內核訪問,使其能夠攔截和拒絕各種潛在惡意行爲的特殊驅動程序。

  2. 通過擁有許多驅動程序的權限,這賦予它掃描另一個進程內存空間的能力。

  3. 編號C#需要一大塊已經加載的操作系統。驅動程序需要先加載。

  4. 瞭解驅動程序和內核級編程。 。 。我沒有這樣做,所以我在這裏沒有更多的幫助。

+0

我正在尋找每個細節。 「瞭解驅動程序和內核編程」太籠統了。我最近遇到了在維基上閱讀的「鉤子」,他們用於攔截呼叫。如果有人能給我另一種方法,我在等待。 – claws 2009-12-01 19:15:43

+0

我想知道我可能有的所有可能的選擇。正如你所說,你沒有做任何你提到的東西。所以,我在等待一個對這些東西有很好的認識的人去投射更多的光芒。 – claws 2009-12-01 19:19:36

+1

「瞭解駕駛員級別編程」是一個起點。除非你知道如何創建一個相對簡單的驅動程序,否則你的能力就像病毒檢查程序那樣花哨,將會受到阻礙。 – 2009-12-02 05:34:29

3

我認爲系統調用是要走的路,比實際嘗試掃描多個進程的內存空間更可行。雖然我不是一個低級別的Windows用戶,但似乎可以使用Windows API掛鉤來完成這一任務 - 綁定到可以修改系統調用的系統級響應的低級API。這些鉤子可以像內核模塊一樣安裝,並攔截並可能修改系統調用。我發現了一個提供更多信息的article on CodeProject

在我參加的機器學習課程中,一個小組決定嘗試類似於您爲一個學期項目描述的內容。他們使用程序最近的系統調用列表來確定執行的程序是否是惡意的,結果是有希望的(認爲新樣本95%的認可)。在他們的項目中,他們在窗口呼叫列表上使用SVM進行了培訓,並使用它來確定一個好的窗口大小。之後,您可以收集來自不同惡意程序的系統調用列表,並且可以在整個列表中進行培訓,或者查找您認爲是「惡意活動」並標記它。這種方法很酷(除了基於ML的事實)外,窗口大小很小,許多訓練有素的分類器(SVM,神經網絡)很快執行。

無論如何,它似乎可以做到沒有ML,如果它不是你的風格。如果您想了解更多有關該團體的信息,請告訴我 - 我可能會將其挖掘出來。祝你好運!

+0

猜猜怎樣?我還計劃做類似的事情,「使用SVM」來分類惡意活動。你能否給我更多的信息。 – claws 2009-11-30 05:57:02

+1

我在查找他們的最終論文時遇到了一些麻煩 - 我不確定他們是否繼續發佈。該課程是喬治亞理工學院CS 4/7641統計機器學習簡介,由Charles Isbell在2009年春季授課。我現在給他發了一封電子郵件,詢問我是否可以得到這份文件的副本。 – 2009-12-01 00:38:38

+0

儘管如此 - 「使用支持向量機檢測未知計算機病毒」,張等人,「國際計算智能研究雜誌」,第2卷,2006年第1期。Google Docs有一個快速查看。無論如何,當我聽到回聲時,我會讓你知道 - 我意識到這些都無法回答手頭的問題 - Windows API掛鉤。 – 2009-12-01 00:55:55

1
  1. Windows爲此提供了API(通常涉及在內核中運行至少一些代碼)。如果您擁有足夠的權限,則還可以將.dll注入其他進程。請參閱http://en.wikipedia.org/wiki/DLL_injection

  2. 當你擁有上述權力時,你可以這樣做。您不是在內核空間中就可以訪問所有內容,或者在目標進程中。

  3. 至少對於低級別的內核中的東西,你需要比C++更低級別的東西,比如C或C++。我不確定,但是您可能可以在C#應用程序中執行其他一些操作。

  4. DLL注入聽起來像是最簡單的起點。你仍然在用戶空間中,並且不必學習如何在內核世界中生活(真的是完全不同的世界)。

的話題有些鬆動的想法一般:

  • 你可以設置由跟蹤進程發出的系統調用。通常假定一個進程在發出系統調用的情況下不能做任何「危險」的事情。
  • 你可以攔截其網絡流量,看看它連接,這是什麼派,這是什麼接收,哪些文件它碰,哪些系統調用失敗
  • 可以掃描內存,並在模擬其執行沙箱(真的很難)
  • 與系統調用中介,你可以模擬一些系統調用的響應,但真的只是沙盒的過程
  • 你可以掃描進程內存並從中提取一些一般特性(連接到網絡,修改註冊表,掛鉤到Windows,枚舉進程等),看看它是否看起來非常惡意
  • 只是把沙盒中的所有東西,並看看會發生什麼(一個很好的沙盒已經爲谷歌瀏覽器,它是開源的!)
+0

謝謝。這非常有幫助。 – claws 2009-12-03 12:40:07

相關問題