首页
社区
课程
招聘
[原创][翻译]规避技术:用户界面伪装
2021-5-20 10:50 7010

[原创][翻译]规避技术:用户界面伪装

2021-5-20 10:50
7010

备注
原文地址: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.


归功于
归功于开源项目,代码样本来自该项目:

  •  github上的al-khaser 项目

尽管Check Point工具InviZzzible已经实现了所有这些功能,但由于代码的模块化结构,需要更多的空间来展示这个工具的代码样本,以达到相同的目的。这就是为什么我们决定在整个百科全书中使用其他伟大的开源项目作为例子。



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-5-20 10:55 被梦幻的彼岸编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回