2009-11-25 86 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

相关问题