我知道防病毒如何检测病毒。我读了几篇文章:
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种方式(来自上述文章):
我想采取第二种方法。我想从简单的事情开始。
作为旁注,最近我遇到了一个名为“ThreatFire”的软件。它做得非常好。
答案 0 :(得分:5)
这是因为有问题的软件可能安装了一个特殊的驱动程序,允许它进行低级内核访问,从而允许它拦截和拒绝各种潜在的恶意行为。
通过拥有许多驱动程序所拥有的权限,这使它能够扫描另一个进程内存空间。
没有。 C#需要已经加载的操作系统的很大一部分。驱动程序需要先加载。
了解驱动程序和内核级编程。 。 。我没有这样做,所以我在这里得不到更多的帮助。
答案 1 :(得分:3)
我认为系统调用是可行的方法,而且比实际尝试扫描多个进程的内存空间要多得多。虽然我不是一个低级别的Windows用户,但似乎可以使用Windows API钩子连接到低级API,可以修改系统范围内对系统调用的响应。这些钩子可以像内核模块一样安装,并拦截并可能修改系统调用。我找到了一个提供更多信息的article on CodeProject。
在我参加的机器学习课程中,一个小组决定尝试类似于你为一个学期项目所描述的内容。他们使用一个程序最近的系统调用列表来确定执行程序是否是恶意的,并且结果很有希望(认为对新样本有95%的认可)。在他们的项目中,他们使用SVM在窗口化呼叫列表上进行训练,并使用它来确定良好的窗口大小。之后,您可以从不同的恶意程序中收集系统调用列表,并在整个列表中进行训练,或者找到您认为“恶意活动”的内容并对其进行标记。这种方法很酷(除了基于ML的事实)是窗口大小很小,许多训练有素的分类器(SVM,神经网络)执行得很快。
无论如何,如果不是你的风格,似乎可以在没有ML的情况下完成。如果您想了解有关该组的更多信息,请告诉我 - 我可以将其挖掘出来。祝你好运!
答案 2 :(得分:1)
Windows提供API来执行此操作(通常涉及在内核中至少运行一些代码)。如果您有足够的权限,还可以将.dll注入其他进程。请参阅http://en.wikipedia.org/wiki/DLL_injection。
当您拥有上述权力时,您可以这样做。您可以在内核空间中访问所有内容,也可以访问目标进程。
至少对于内核中的低级内容,你需要的东西比C#更低级,比如C或C ++。我不确定,但您可以在C#应用程序中完成其他一些事情。
DLL注入听起来像是最简单的起点。你仍处于用户空间,不必学习如何在内核世界中生活(真的是完全不同的世界)。
关于主题的一些松散想法: