18

答えを探すときに、次のようなコードサンプルを何度も見ました。

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();
    }

  }
}

残念ながら、Windows Server 2008にはSecurityCenterまたはSecurityCenter2名前空間がないようです。そのため、Invalid namespaceこのアプローチを試みると例外が発生します。

Windows Server 2008でウイルス対策ソフトウェアが実行されているかどうかを判断する方法を知っている人はいますか?どんな助けでも大歓迎です!

4

5 に答える 5

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*

おそらく、文字列をアプリでエンコードしたままにして、ディスクに書き込む直前にデコードする必要があることに注意してください。そうしないと、アプリがウイルスとして検出される危険があります:)

EICAR サイトでは、次のように述べています。

EICAR テスト ファイルをサポートするウイルス対策製品は、ファイルが次の 68 文字で始まり、正確に 68 バイトの長さであれば、どのファイルでもそれを検出する必要があります。

ただし、AV 開発者が仕様を読んだことはないと思いますので、文字列をエンコードしたままにしておくことをお勧めします。実際、デスクトップ上の .txt ファイルに文字列を保存しようとしたところ、追加の文字が含まれていたため、Windows Defender が叫び始めました。

于 2012-12-13T22:48:56.917 に答える
3

うーん、私は PowerShell で遊んでしまいました:

$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" -computername "." -filter "Name like '%antivirus%'"
if ($avSoftware.Count -gt 0) {
    foreach ($av in $avSoftware) {
        write-host $p.Name
    }
} else {
    write-host "No AV software found"
}

Windows Server 2008 と 2008 R2 インスタンスの両方で動作しているようです...

詳細はこちら: https://serverfault.com/questions/12343/how-can-i-determine-whether-an-antivirus-product-is-installed

于 2012-12-14T20:19:52.203 に答える
2

少し前にクライアントでこの問題に直面し、ローカル システム ドライバーとプロセスで辞書検索を実行して、既知のウイルス対策シグネチャ (フォルダー名、プロセス名など) のパターンを探しました。どこかで誰かがあなたの知らない新しいアンチウイルスをダウンロードするので、100% 確実ではありませんが、それを除けば、非常に効果的でした...

于 2012-12-10T17:12:31.103 に答える
1

これは完璧な解決策というよりもアイデアです。Leonardo さんの回答に対して、実際のウイルス対策ソフト (それに対するリンク) を使用して、他のウイルス対策ソフトを検索してみてはいかがでしょうか。ClamAV はオープンソースであり、開始するのに適したポイントです。新しいかなり具体的な署名データベースを定義する必要があるのは「だけ」です。

于 2012-12-13T19:18:38.633 に答える
0

ほとんどのWebによると、SecurityCenterとSecurityCenter2はWindows Server 2008では使用できません(既に自分で解決しているため)。

回避策が含まれているこのSOの記事を見つけました。 Windows2003サーバーおよび2008サーバー2003サーバーR2および2008サーバーR2にインストールされているアンチウイルスをWMIまたはその他のC++でWMIを使用して検出する方法

確かに、これはC ++の実装ですが、C#に移植できない理由はわかりません。

OESISフレームワークの使用を提案するこのページも見つかりました。 http://social.msdn.microsoft.com/Forums/en/windowsgeneraldevelopmentissues/thread/b0806608-fee0-413c-a34d-674aeb11be3c

于 2012-12-10T14:54:30.607 に答える