如何在C#中检测Windows Server 2008上的防病毒软件?

ath*_*hom 18 c# antivirus windows-server-2008 windows-server-2008-r2

在搜索答案时,我已经多次看到类似以下的代码示例:

using System;
using System.Text;
using System.Management;

namespace ConsoleApplication1
{
  class Program
  {
    public static bool AntivirusInstalled()
    {

      string wmipathstr = @"\\" + Environment.MachineName + @"\root\SecurityCenter";
      try
      {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmipathstr, "SELECT * FROM AntivirusProduct");
        ManagementObjectCollection instances = searcher.Get();
        return instances.Count > 0;
      }

      catch (Exception e)
      {
        Console.WriteLine(e.Message);
      }

      return false;
    } 

    public static void Main(string[] args)
    {
      bool returnCode = AntivirusInstalled();
      Console.WriteLine("Antivirus Installed " + returnCode.ToString());
      Console.WriteLine();
      Console.Read();
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎Windows Server 2008没有SecurityCenterSecurityCenter2命名空间,所以Invalid namespace在尝试这种方法时会出现异常.

有谁知道确定Windows Server 2008上是否有防病毒软件运行的方法?任何帮助表示赞赏!

Jan*_*nen 6

使用EICAR测试病毒.

  1. 让您的应用程序尝试在磁盘上写下其中一个文件:http://www.eicar.org/85-0-Download.html
  2. 抓住例外

它不仅适用于地球上的每一种反病毒,它还会告诉你反病毒是否活跃!

如果您的防病毒处于活动状态,您可能会发现很难下载测试文件,因此您可能希望使用此字符串:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Run Code Online (Sandbox Code Playgroud)

请记住,您可能希望在应用程序上保留编码的字符串,然后在将其写入磁盘之前对其进行解码.否则,您的应用可能会被检测为病毒:)

在EICAR网站上,他们说:

任何支持EICAR测试文件的防病毒产品都应该在任何文件中检测到它,前提是该文件以下列68个字符开头,并且长度正好为68个字节

但是,我不认为AV开发人员已经阅读了规范,所以最好只保留字符串编码.事实上,我只是尝试将字符串保存在桌面上的.txt文件中,其中包含一些其他字符,Windows Defender开始尖叫.


Leo*_*rdo 2

我前一段时间为一个客户遇到了这个问题,我最终对本地系统驱动程序和进程执行字典搜索,寻找已知的防病毒签名模式(例如文件夹名称、进程名称等......)不是 100% 确定,因为有人会在你不知道的情况下下载一个全新的防病毒软件,但除此之外,它非常有效......