| 
 
TA的每日心情|  | 开心 2022-1-9 18:41
 | 
|---|
 签到天数: 5 天 [LV.2]偶尔看看I | 
 
| 备注 原文地址:https://evasions.checkpoint.com/techniques/ui-artifacts.html
 原文标题:Evasions: UI artifacts
 更新日期:2021年5月20日
 此文后期:根据自身所学进行内容扩充
 因自身技术有限,只能尽自身所能翻译国外技术文章,供大家学习,若有不当或可完善的地方,希望可以指出,用于共同完善这篇文章。
 
  目录
 
 用户界面伪装检测方法1.检查操作系统中是否存在具有特定类名的窗口2.检查顶层窗口数量是否过少识别标志反制措施归功于
 用户界面伪装检测方法
 这一组描述的技术滥用了这样一个事实:一些窗口的名称只存在于虚拟环境中,而不是通常的主机操作系统。此外,主机操作系统包含大量的窗口,而虚拟机和沙盒则倾向于将打开的窗口保持在最低水平。它们的数量被检查出来,并得出结论,这是否是一个虚拟机。
 1.检查操作系统中是否存在具有特定类名的窗口
 检测表
 
 | 检查操作系统中是否存在具有以下类别名称的窗口: |  | 检测 | 类别名称 |  | VirtualBox | VBoxTrayToolWndClass |  | VBoxTrayToolWnd | 
 代码样本
 
 复制代码BOOL vbox_window_class()
{
  HWND hClass = FindWindow(_T("VBoxTrayToolWndClass"), NULL);
  HWND hWindow = FindWindow(NULL, _T("VBoxTrayToolWnd"));
  if (hClass || hWindow)
    return TRUE;
  else
    return FALSE;
}
该代码样本的作者:al-khaser project
 2.检查顶层窗口数量是否过少
 如上所述,主机操作系统包含大量的窗口,而虚拟机和沙盒则努力将打开的窗口保持在可能的最低限度。窗口数量被测量,并得出结论,这是否是一个虚拟机。
 如果操作系统中的窗口太少,这可能是虚拟环境的一个迹象。常规的主机有很多(>10)顶级窗口。
 代码样本
 
 复制代码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;
}
识别标志
 没有为这个规避技术提供识别标志,因为很难说代码的目的是执行某种规避技术而不是 "合法 "行动。
 反制措施
 
 versus windows with certain class names: Exclude windows with particular names from enumeration or modify these names.versus checking top level windows' number: Create fake windows in the system so that their number will not be small or equal to the predefined numbers.
 归功于
 归功于开源项目,代码样本来自该项目:
 尽管Check Point工具InviZzzible已经实现了所有这些功能,但由于代码的模块化结构,需要更多的空间来展示这个工具的代码样本,以达到相同的目的。这就是为什么我们决定在整个百科全书中使用其他伟大的开源项目作为例子。
 | 
 |