用户界面

描述

恶意软件通过滥用仅存在于虚拟环境中而不是通常的主机操作系统中的一些窗口名称和主机操作系统包含大量窗口,而虚拟机和沙箱更喜欢将打开的窗口保持在最低限度和检查窗口数量来判断是否是为虚拟环境。

1.检查操作系统中是否存在具有特定类名的窗口

BOOL vbox_window_class()
{
  HWND hClass = FindWindow(_T("VBoxTrayToolWndClass"), NULL);
  HWND hWindow = FindWindow(NULL, _T("VBoxTrayToolWnd"));

  if (hClass || hWindow)
    return TRUE;
  else
    return FALSE;
}

2.检查顶层窗口数量

主机操作系统包含大量窗口,而虚拟机和沙箱则会尽量减少活动的窗口。如果操作系统中的窗口太少,则可能表明存在虚拟环境。
BOOL CALLBACK enumProc(HWND, LPARAM lParam)
{
    if (LPDWORD pCnt = reinterpret_cast<LPDWORD>(lParam))
        *pCnt++;
    return TRUE;
}

bool enumWindowsCheck(bool& detected)
{
    DWORD winCnt = 0;

    if (!EnumWindows(enumProc,LPARAM(&winCnt))) {
        std::cerr << "EnumWindows() failed\n";
        return false;
    }

    return winCnt < 10;
}