抗沙箱方式列举

admin 2024年5月7日12:50:00评论4 views字数 2294阅读7分38秒阅读模式

前言

研究过免杀的朋友们一定会碰到过自己的🐎今天还能用,明天就被秒的情况。这种情况大多数是被上传到沙箱然后被沙箱检测和分析发现是🐎,进而记录特征让咱们花好几天写的🐎直接废了。为了提高🐎的存活周期,咱们就需要抗沙箱这门技术。

未加抗沙箱

首先,作为演示我先写一个pingdnslog的程序,然后咱们加上一些抗沙箱手段来展示效果。

代码

#include <windows.h>#include <stdio.h>int main(){    system("ping e22799d2.dnslog.biz");}

抗沙箱方式列举

这里没加任何反沙箱手段,程序运行。

抗沙箱方式列举

检测文件夹

在vm虚拟机上安装了“vmware tools”就会生成对应名称的文件夹,路径:C:\Program Files\VMware\VMware Tools,这样就可以在代码上加上一个判断。同理我们也可以加个同目录检测,检测当前目录下有没有某一个文件夹或者文件,如若没有就不运行程序。

代码

if (PathIsDirectory(L"C:\Program Files\VMware\VMware Tools") == 0)  {    return flase;  }  else  {    return TRUE;  }}

抗沙箱方式列举

这里检测到是沙箱便不在运行程序了。

检测进程

虚拟机运行会有vmtoolsd.exe这个进程,下面代码是检测进程中是否有vmtoolsd.exe。同理我们可以检测别的进程比如检测某个软件是否在运行,如果没运行程序就不运行。

代码

PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };  HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);  if (hProcessSnap == INVALID_HANDLE_VALUE)  {    return false;  }  while (Process32Next(hProcessSnap,&pe32))  {    if (wcscmp(pe32.szExeFile,L"vmtoolsd.exe") == 0)    {      return true;    }  }  CloseHandle(hProcessSnap);  return false;

抗沙箱方式列举

检测mac地址

由于vmware默认的mac地址是00开头的所以我们可以利用这个来检测是不是在虚拟机上运行,来判断是否运行程序

代码

void GetMac(byte* mac){  PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();  unsigned long stSize = sizeof(IP_ADAPTER_INFO);  int nRet = GetAdaptersInfo(pIpAdapterInfo, &stSize);  if (nRet == ERROR_BUFFER_OVERFLOW)  {    delete pIpAdapterInfo;    pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];    nRet = GetAdaptersInfo(pIpAdapterInfo, &stSize);  }  if (nRet == ERROR_SUCCESS)  {    while (pIpAdapterInfo)    {      memcpy(mac, pIpAdapterInfo->Address, 8);      break;    }  }  if (pIpAdapterInfo)  {    delete pIpAdapterInfo;  }}BOOL VM(){  byte mac[8] = { 0 };  GetMac(mac);  if (mac[0] == 0x00 && mac[1] == 0x05 && mac[2] == 0x69)  {    return TRUE;  }  else if (mac[0] == 0x00 && mac[1] == 0x0c && mac[2] == 0x29)  {    return TRUE;  }  else if (mac[0] == 0x00 && mac[1] == 0x50 && mac[2] == 0x56)  {    return TRUE;  }  else  {    return FALSE;  }}

抗沙箱方式列举

检测是否开启测试模式

在看分析的时候偶然发现截图里面显示系统为测试模式(不清楚是什么的建议百度一下windows测试模式这里不做赘述),便想通过检测是否是测试模式来进行抗沙箱。

代码

HKEY hKey;DWORD testModeValue;LPCWSTR regPath = L"SYSTEM\CurrentControlSet\Control\CI\Testing";LPCWSTR regValue = L"TestSigning";if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, regPath, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {    DWORD dwType;    DWORD dwSize = sizeof(DWORD);    if (RegQueryValueExW(hKey, regValue, NULL, &dwType, (LPBYTE)&testModeValue, &dwSize) == ERROR_SUCCESS) {        RegCloseKey(hKey);        if (testModeValue == 1) {            return false;        }        else            return true;    }    RegCloseKey(hKey);}

抗沙箱方式列举

end

目前就先写这些,等我过段时间再给大家分享一些手段(又双叒叕挖坑了),毕竟知识得沉淀,我可不想拿些几年前能用的方法来糊弄大家(还不如我直接开个直播间然后咬打火机),最后祝大家五一快乐玩的开心。

原文始发于微信公众号(FTC安全):抗沙箱方式列举

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月7日12:50:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   抗沙箱方式列举http://cn-sec.com/archives/2707556.html

发表评论

匿名网友 填写信息