请帮助我使用恶意行为检测程序进行病毒检测

时间:2009-11-25 10:26:06

标签: c# .net antivirus

我知道防病毒如何检测病毒。我读了几篇文章:

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

在这一个月的假期里,我有。我想学习&编写简单的病毒检测程序: 因此,有2-3种方式(来自上述文章):

  1. 病毒词典:搜索病毒签名
  2. 检测恶意行为
  3. 我想采取第二种方法。我想从简单的事情开始。

    作为旁注,最近我遇到了一个名为“ThreatFire”的软件。它做得非常好。

    1. 我不明白的第一件事是这个程序如何在另一个之间插入另一个程序并提示用户有关其动作。这不是违规吗?
    2. 它如何扫描其他程序的内存?程序仅限于其虚拟空间吗?
    3. C#.NET是否适合做这种事情?
    4. 请发表您的想法如何去做?还要提一些我能做的简单事情。

3 个答案:

答案 0 :(得分:5)

  1. 这是因为有问题的软件可能安装了一个特殊的驱动程序,允许它进行低级内核访问,从而允许它拦截和拒绝各种潜在的恶意行为。

  2. 通过拥有许多驱动程序所拥有的权限,这使它能够扫描另一个进程内存空间。

  3. 没有。 C#需要已经加载的操作系统的很大一部分。驱动程序需要先加载。

  4. 了解驱动程序和内核级编程。 。 。我没有这样做,所以我在这里得不到更多的帮助。

答案 1 :(得分:3)

我认为系统调用是可行的方法,而且比实际尝试扫描多个进程的内存空间要多得多。虽然我不是一个低级别的Windows用户,但似乎可以使用Windows API钩子连接到低级API,可以修改系统范围内对系统调用的响应。这些钩子可以像内核模块一样安装,并拦截并可能修改系统调用。我找到了一个提供更多信息的article on CodeProject

在我参加的机器学习课程中,一个小组决定尝试类似于你为一个学期项目所描述的内容。他们使用一个程序最近的系统调用列表来确定执行程序是否是恶意的,并且结果很有希望(认为对新样本有95%的认可)。在他们的项目中,他们使用SVM在窗口化呼叫列表上进行训练,并使用它来确定良好的窗口大小。之后,您可以从不同的恶意程序中收集系统调用列表,并在整个列表中进行训练,或者找到您认为“恶意活动”的内容并对其进行标记。这种方法很酷(除了基于ML的事实)是窗口大小很小,许多训练有素的分类器(SVM,神经网络)执行得很快。

无论如何,如果不是你的风格,似乎可以在没有ML的情况下完成。如果您想了解有关该组的更多信息,请告诉我 - 我可以将其挖掘出来。祝你好运!

答案 2 :(得分:1)

  1. Windows提供API来执行此操作(通常涉及在内核中至少运行一些代码)。如果您有足够的权限,还可以将.dll注入其他进程。请参阅http://en.wikipedia.org/wiki/DLL_injection

  2. 当您拥有上述权力时,您可以这样做。您可以在内核空间中访问所有内容,也可以访问目标进程。

  3. 至少对于内核中的低级内容,你需要的东西比C#更低级,比如C或C ++。我不确定,但您可以在C#应用程序中完成其他一些事情。

  4. DLL注入听起来像是最简单的起点。你仍处于用户空间,不必学习如何在内核世界中生活(真的是完全不同的世界)。

  5. 关于主题的一些松散想法:

    • 您可以插入跟踪进程发出的系统调用。通常假设一个进程在没有发出系统调用的情况下不能做任何“危险”的事情。
    • 您可以拦截其网络流量并查看其连接位置,发送内容,接收内容,触摸的文件,系统调用失败
    • 你可以扫描它的内存并在沙盒中模拟它的执行(非常难)
    • 使用系统调用插入,您可以模拟对系统调用的一些响应,但实际上只是沙箱的过程
    • 您可以扫描进程内存并从中提取一些常规特征(连接到网络,修改注册表,挂钩到Windows,枚举进程等)并查看它是否看起来是恶意的
    • 只需将整个东西放在沙盒中,看看会发生什么(为Google Chrome设计了一个漂亮的沙盒,它是开源的!)
相关问题