Как определить, установлен ли virusscanner и / или межсетевой экран? (И несколько других связанных с безопасностью вопросов.) - PullRequest
6 голосов
/ 22 сентября 2009

У меня есть приложение, и я пытаюсь убедиться, что оно работает в безопасной среде. Прежде всего, я проверяю, является ли Windows подлинной , что повышает вероятность того, что пользователь обновит ее. Если нет, я просто выскакиваю сообщение, предупреждающее пользователя о возможном риске, потому что ему все еще нужно проверить Windows.

Теперь я хочу сделать немного больше. Я также хочу проверить, установил ли пользователь virusscanner. Мне все равно, какой из них, если он установил один. Затем то же самое для проверки, установлен ли межсетевой экран. И, если возможно, я хочу проверить, когда пользователь в последний раз обновлял свой Windows / Scanner / Firewall, чтобы убедиться, что он не слишком старый. Итак:

1) Как проверить, установлен ли virusscanner?
2) Как определить, когда обновился virusscanner?
3) Как определить, когда virusscanner провел последнюю полную проверку системы?
4) Как определить, установлен ли межсетевой экран и активен ли он?
5) Как проверить, когда Windows получила последнее обновление?

В основном, когда мое приложение запускается, я хочу отображать экран с предупреждениями (только один раз в день) на случай, если с какой-либо из этих проблем возникнут проблемы. Это потому, что мое приложение работает со всеми видами конфиденциальной информации, которую пользователь собирает от своих клиентов. (К ним относятся номера банковских счетов, идентификационные номера паспортов, NAW + DOB, доходы и многое другое.) В основном, если у системы есть проблемы, пользователь должен подтвердить, что он знает об этих проблемах. От моего заявления уходит возможная ответственность, если он продолжает, зная, что его система небезопасна ...


И язык? В основном C ++ или Delphi для примеров WIN32 и C # для примеров .NET. Это больше о .NET / Windows API / .NET, чем о языке.

Ответы [ 2 ]

7 голосов
/ 22 сентября 2009

Я думаю, что вы можете сделать большую часть этого через WMI

Примерно так:

ManagementObjectSearcher wmiData = new ManagementObjectSearcher(@"root\SecurityCenter", "SELECT * FROM AntiVirusProduct");
ManagementObjectCollection data = wmiData.Get();

foreach (ManagementObject virusChecker in data)
{
    // This is the virus checkers name.
    String virusCheckerName = virusChecker["displayName"];
}

[Вы не упомянули, на каком языке, поэтому приведенный выше пример написан на C #, но WMI может быть сделан практически из любого]] [Редактировать: вы можете сделать то же самое, но с «FirewallProduct» вместо этого для информации о брандмауэре. Кроме того, для антивируса вы можете посмотреть свойство «productUptoDate» в результатах для получения информации о том, обновлены ли они]

Справочник WMI должен помочь вам найти другие. (1, 2, 3 и 4 Я уверен, что они доступны через WMI. 5 В этом я не уверен, но думаю, что так и должно быть)

Вы, вероятно, найдете WMI Code Creator полезной для тестирования и определения того, какие запросы / объекты вам нужно использовать. Также могут быть полезны Scriptomatic и WMI Admin инструменты .

3 голосов
/ 05 марта 2015

Поскольку я искал C ++, а не .NET-зависимый путь, я смешал этот ответ с MSDN-примером: получение данных WMI с локального компьютера .

Команды, которые необходимо изменить, чтобы получить имя AV:

  • _bstr_t(L"ROOT\\CIMV2") до _bstr_t(L"ROOT\\SecurityCenter2"). Имейте в виду, что SecurityCenter2 предназначен для Win 7, Vista SP2 и более поздних версий в соответствии с this . Ниже Vista SP2 вам необходимо использовать SecurityCenter .
  • bstr_t("SELECT * FROM Win32_OperatingSystem") до bstr_t("SELECT * FROM AntivirusProduct")
  • hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0); до hr = pclsObj->Get(L"displayName", 0, &vtProp, 0, 0);.

Этот измененный код был проверен и полностью работает.

Для более простого метода вы всегда можете перебрать этого алгоритма и найти свой AV по имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...