[C/C++] Сбор информации о системе.

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Порой при разработке malware продукта у кодера возникает задача - собрать информацию о конфигурации системы. В данной статье мы поговорим как раз об этом.

Первое, что нам нужно - получить юзернейм пользователя и имя компьютера:
C++: Скопировать в буфер обмена
Код:
LPCSTR getUsername()
{
    char *username = new char[MAX_PATH]{'\0'};
    DWORD size = MAX_PATH;
    GetUserName(username, &size);
    return username;
}

LPCSTR getPCName()
{
    char *pcName = new char[MAX_PATH]{'\0'};
    DWORD size = MAX_PATH;
    GetComputerName(pcName, &size);
    return pcName;
}

Здесь все достаточно просто - в WinAPI уже есть функции, которые возвращают эти значения.
Далее мы хотим узнать, сколько оперативной памяти доступно в системе и какой процессор:
C++: Скопировать в буфер обмена
Код:
LPCSTR getCPUName()
{
    int cpuInfo[4] = {0, 0, 0, 0};
    __cpuid(cpuInfo, 0x80000002);
    char *cpuBrand = new char[48]{'\0'};
    memcpy(cpuBrand, cpuInfo, sizeof(cpuInfo));
    return (LPCSTR)cpuBrand;
}

DWORDLONG getRAMSize()
{
    MEMORYSTATUSEX memInfo;
    memInfo.dwLength = sizeof(MEMORYSTATUSEX);
    GlobalMemoryStatusEx(&memInfo);
    return memInfo.ullTotalPhys;
}
Опять же, никаких трудностей. С помощью __cpuid мы можем получить модель процессора, а GlobalMemoryStatusEx возвращает информацию об оперативной памяти.

Можем получить основной язык операционной системы:
C++: Скопировать в буфер обмена
Код:
LANGID getLangID()
{
    LCID lcid = GetSystemDefaultLCID();
    LANGID langId = PRIMARYLANGID(lcid);
    return langId;
}
Тут мы получаем LANGID (он же WORD) - идентификатор языка системы Windows. На MSDN можно Скачать
 
Сверху Снизу