Получаем название установленновсленного антивируса через WMI

Jeffs

RAM
Пользователь
Регистрация
28.12.2018
Сообщения
148
Реакции
89
Баллы
23
C:
#include <wbemidl.h>
#include <comutil.h>

#pragma comment(lib, "wbemuuid.lib")
#pragma comment(lib, "comsuppw.lib")

HRESULT GetInstalledAvName(LPSTR installedAv)
{
    HRESULT hr = S_OK;
    
    hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);

    if (FAILED(hr))
    {
        return hr;
    }

    hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL, EOAC_NONE, NULL);

    if (FAILED(hr))
    {
        CoUninitialize();
        return hr;
    }

    IWbemLocator* pWbemLocator = NULL;
    hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pWbemLocator);

    if (FAILED(hr))
    {
        CoUninitialize();
        return hr;
    }

    IWbemServices* pWbemServices = NULL;
    //в вин версиях ниже 7, вместо "root\\SecurityCenter2" - "\root\SecurityCenter", не проебитесь.
//как получить версию винды смотрите в соседней теме
    hr = pWbemLocator->ConnectServer(_bstr_t(L"root\\SecurityCenter2"), NULL, NULL, 0, NULL, 0, NULL, &pWbemServices);

    if (FAILED(hr))
    {
        pWbemLocator->Release();
        CoUninitialize();
        return hr;
    }

    IEnumWbemClassObject* pEnum;
    hr = pWbemServices->ExecQuery(bstr_t("WQL"), bstr_t("Select * From AntivirusProduct"), WBEM_FLAG_FORWARD_ONLY, NULL, &pEnum);

    if (FAILED(hr))
    {
        pWbemLocator->Release();
        pWbemServices->Release();
        CoUninitialize();
        return hr;
    }

    ULONG uObjectCount = 0;
    IWbemClassObject* pWmiObject;
    hr = pEnum->Next(WBEM_INFINITE, 1, &pWmiObject, &uObjectCount);

    if (FAILED(hr))
    {
        pWbemLocator->Release();
        pWbemServices->Release();
        pEnum->Release();
        return hr;
    }

    VARIANT vtProp;
    hr = pWmiObject->Get(L"displayName", 0, &vtProp, 0, 0);

    if (FAILED(hr))
    {
        pWbemLocator->Release();
        pWbemServices->Release();
        pEnum->Release();
        pWmiObject->Release();
        return hr;
    }

    lstrcatA(installedAv, _com_util::ConvertBSTRToString(vtProp.bstrVal));

    return TRUE;
}
Использование:

C:
int main()
{
    static char installedAv[100];
    HRESULT hr = S_OK;

    hr = GetInstalledAvName(installedAv);

    if (FAILED(hr))
    {
        printf("Getting installedAv error\n");
    }

    printf("installedAv = %s\n", installedAv);

    return 0;
}
 

Obsession

HDD-drive
Пользователь
Регистрация
20.03.2020
Сообщения
35
Реакции
21
Баллы
8
Палево. АВ будут такое рубить в большинстве. Лучше будет получать список установленных драйверов и сопоставлять драйвера АВ с ним.
 

Jeffs

RAM
Пользователь
Регистрация
28.12.2018
Сообщения
148
Реакции
89
Баллы
23

На Windows 7 SP1 отрабатывает корректно.



На Windows 10 1607 тоже всё ровно
 

Jeffs

RAM
Пользователь
Регистрация
28.12.2018
Сообщения
148
Реакции
89
Баллы
23
Палево. АВ будут такое рубить в большинстве. Лучше будет получать список установленных драйверов и сопоставлять драйвера АВ с ним.
Интересно, какие ав именно детектят? Нет возможности просканить на dyncheck
 

Obsession

HDD-drive
Пользователь
Регистрация
20.03.2020
Сообщения
35
Реакции
21
Баллы
8
Интересно, какие ав именно детектят? Нет возможности просканить на dyncheck
Не помню уже. Но когда я юзал - именно из-за этой темы несколько штук детектили.
 

Jeffs

RAM
Пользователь
Регистрация
28.12.2018
Сообщения
148
Реакции
89
Баллы
23

oski_seller

RAID-массив
Пользователь
Регистрация
30.10.2019
Сообщения
57
Реакции
23
Баллы
14
Telegram
WMI в малвари на массмаркет лучше не использовать - большое палево на рантайме будет.
Большинство значений можно из реестра вытащить, в случае с установленным по-умолчанию авером сейчас не скажу, но версию винды и прочее - запросто.
 

Jeffs

RAM
Пользователь
Регистрация
28.12.2018
Сообщения
148
Реакции
89
Баллы
23
WMI в малвари на массмаркет лучше не использовать - большое палево на рантайме будет.
Большинство значений можно из реестра вытащить, в случае с установленным по-умолчанию авером сейчас не скажу, но версию винды и прочее - запросто.
Версию винды проще через PEB получить (в соседней теме есть пример).
А как иначе получить установленный ав? Парсить установленные программы?
 

Obsession

HDD-drive
Пользователь
Регистрация
20.03.2020
Сообщения
35
Реакции
21
Баллы
8
Реестр не панацея. Это тоже лютое палево. По поводу ав - выше же написал, драйвера.
 

Haunt

(L3) cache
Пользователь
Регистрация
07.11.2019
Сообщения
238
Реакции
326
Баллы
68
Палево. АВ будут такое рубить в большинстве. Лучше будет получать список установленных драйверов и сопоставлять драйвера АВ с ним.
На каком конкретно авере конкретно эту технику?
 
Верх