Как обнаружить антивирус на Windows Server 2008 В C#?
Я видел примеры кода, похожие на следующие несколько раз в моем поиске ответа:
using System;
using System.Text;
using System.Management;
namespace ConsoleApplication1
{
class Program
{
public static bool AntivirusInstalled()
{
string wmipathstr = @"" + Environment.MachineName + @"rootSecurityCenter";
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? Любая помощь приветствуется!
5 ответов
Я столкнулся с этой проблемой некоторое время назад для клиента, и я закончил выполнение диктонарного поиска по локальным системным драйверам и процессам, ищущим шаблон известных антивирусных сигнатур (таких как имена папок, имена процессов и т. д...) это не 100% уверен, потому что где-то кто-то будет donwload совершенно новый антивирус, что вы unware, но это в стороне, это было очень эффективно...
используйте тестовый вирус EICAR.
- пусть ваше приложение попытается записать один из этих файлов на диск:http://www.eicar.org/85-0-Download.html
- поймать исключение
Он будет работать не только на каждом антивирусе на земле, но он также скажет вам, если антивирус активен!
вам может быть трудно загрузить тестовый файл, если у вас активен антивирус, поэтому вы можете использовать эту строку вместо этого:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
имейте в виду, вы, вероятно, хотите сохранить строку закодированной в вашем приложении и декодировать ее непосредственно перед записью на диск. В противном случае вы можете рисковать ваше приложение будет обнаружено как вирус :)
на сайте EICAR они говорят:
любой антивирусный продукт, поддерживающий тестовый файл EICAR, должен обнаружить он в любом файле при условии, что файл начинается со следующей 68 символов, и ровно 68 байт долго
однако я бы не считал, что разработчики AV прочитали спецификацию, поэтому лучше просто сохранить строку в кодировке. На самом деле, я просто пытался сохранить строку на .txt-файл на моем рабочем столе с некоторыми дополнительными символами в нем, и Защитник Windows начал кричать.
хммм, я закончил играть с 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
Это скорее идея, чем идеальное решение. Что касается ответа Леонардо, как насчет использования фактического фрагмента антивирусного программного обеспечения (ссылка против него) для выполнения поиска другого антивирусного программного обеспечения? ClamAV-это открытый источник и хорошая точка для начала. Вам "только" нужно определить новую и довольно конкретную базу данных сигнатур.
в соответствии с большинством веб-страниц SecurityCenter и SecurityCenter2 недоступны в Windows Server 2008 (Как вы уже разработали для себя).
Я нашел эту статью SO, которая содержит обходной путь. как определить антивирус установленный на Windows 2003 Server и 2008 Server, на сервере 2003 R2 и 2008 сервер R2 с помощью WMI или других затем WMI в C++
по общему признанию, это реализация C++, но я не вижу причин, по которым ее нельзя портировать на В C#
также нашел эту страницу, которая предлагает использовать oesis framework. http://social.msdn.microsoft.com/Forums/en/windowsgeneraldevelopmentissues/thread/b0806608-fee0-413c-a34d-674aeb11be3c