首页 > 其他分享 >【攻防技术系列+沙箱】反虚拟机+硬件检测

【攻防技术系列+沙箱】反虚拟机+硬件检测

时间:2024-12-09 12:33:12浏览次数:7  
标签:攻防 return header buffer 虚拟机 hDevice 沙箱 query NULL

虚拟机是模拟的硬件设备,描述上有特征

HDD(硬盘供应商ID)

BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped
);

‍````

include <windows.h>

include <stdio.h>

BOOL checkVM() {
STORAGE_PROPERTY_QUERY query;
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyStandardQuery;

HANDLE hDevice = CreateFile("\\.\PhysicalDrive0", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if (hDevice == INVALID_HANDLE_VALUE) {
printf("Failed to open physical drive. Error code: %d\n", GetLastError());
return FALSE;
}

STORAGE_DESCRIPTOR_HEADER header;
DWORD bytesReturned = 0;

// Get the size of the STORAGE_DESCRIPTOR_HEADER
if (!DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &header, sizeof(header), &bytesReturned, NULL)) {
printf("Failed to get storage property header. Error code: %d\n", GetLastError());
CloseHandle(hDevice);
return FALSE;
}

// Allocate memory to retrieve the actual data
BYTE* buffer = (BYTE*)malloc(header.Size);

if (buffer == NULL) {
printf("Memory allocation failed.\n");
CloseHandle(hDevice);
return FALSE;
}

// Get the storage property data
if (!DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), buffer, header.Size, &bytesReturned, NULL)) {
printf("Failed to get storage property data. Error code: %d\n", GetLastError());
free(buffer);
CloseHandle(hDevice);
return FALSE;
}

// Replace the following with the actual structure for Vendor ID
// In this example, assuming Vendor ID is at a specific offset in the buffer
char* vendorId = (char*)(buffer + sizeof(STORAGE_DESCRIPTOR_HEADER));

free(buffer);
CloseHandle(hDevice);
return TRUE;
}

int main() {
if (checkVM()) {
// Handle virtual machine detected case
MessageBox(NULL, "Meow!", "=..=", MB_OK);
} else {
// Handle non-virtual machine case
MessageBox(NULL, "Squeak!", "=..=", MB_OK);
}

return 0;
}

执行需要管理员权限,获得Vendor ID可以进行比较,上面代码没有比较过程

标签:攻防,return,header,buffer,虚拟机,hDevice,沙箱,query,NULL
From: https://www.cnblogs.com/o-O-oO/p/18594624

相关文章

  • 【攻防技术系列】对抗反汇编-1
    一、常见对抗反汇编技术比如API混淆、汇编代码混淆、控制流程扁平化等加入一下数学运算干扰反汇编分析#include<winsock2.h>#include<windows.h>#include<math.h>#include<stdio.h>#pragmacomment(lib,"w2_32")//defineadummyfunctionwithmathoperationsvo......
  • 【攻防技术系列】API Hook基础与实战
    例子:exe调用dll,后hook掉dll中的函数dll代码:#include<windows.h>//EntrypointoftheDLLBOOLAPIENTRYDllMain(HMODULEhModule,DWORDdwReasonForCall,LPVOIDlpReserved){switch(dwReasonForCall){caseDLL_PROCESS_ATTACH:break;caseDLL......
  • 【攻防技术系列+沙箱】反虚拟机+文件系统检测
    检测不同虚拟机的特征文件VirtualBoxVM:c:\windows\system32\drivers\VBoxMouse.sysc:\windows\system32\drivers\VBoxGuest.sysc:\windows\system32\drivers\VBoxSF.sysc:\windows\system32\drivers\VBoxVideo.sysc:\windows\system32\vboxdisp.dllc:\window......
  • 【攻防技术系列+沙箱】反虚拟机+注册表检测
    判断注册表项是否存在intregistryKeyExist(HKEYrootKey,char*subKeyName){HKEYregistryKey=nullptr;LONGresult=RegOpenKeyExA(rootKey,subKeyName,0,KEY_READ,&registryKey);if(result==ERROR_SUCCESS){RegCloseKey(registryKey);returnTRUE;}retur......
  • 【攻防技术系列+沙箱】反虚拟机+基于时间的沙箱逃逸
    沙箱仿真时间很少超过3-5分钟,恶意软件可以sleep一段时间再运行恶意功能,但是现在沙箱有sleep-skipping技术很快执行完sleep,类似加速器,一次可以检测时间差来判断#include<windows.h>#include<stdio.h>//DefinitionsforNtDelayExecutiontypedefNTSTATUS(WINAPI*fnNtDela......
  • #渗透测试#红队攻防 火狐浏览器插件大全并支持一键导入
    目录标题一、前言二、效果1.Hackbar2.FoxyProxy3.FindSomething4.Wappalyzer-Technologyprofiler5.X-Forwarded-ForHeader6.User-AgentSwitcherandManage7.superSearchPlus8.Ctool程序开发常用工具9.fly63工具箱10.Cookie-Editor11.HTTPHeaderLive1......
  • 探索 .vmp.exe:虚拟机保护与逆向工程的挑战
    探索.vmp.exe:虚拟机保护与逆向工程的挑战在数字世界中,软件保护是开发者们面临的重要课题之一。为了防止软件被逆向工程、破解或盗版,开发者们采用了各种技术手段。其中,虚拟机保护(VMProtect)是一种非常强大的保护工具,它通过将原始代码转换为虚拟机代码(VMcode)来实现保护。本......
  • 虚拟机(VM)中毒排查涉及一系列步骤,目的是定位并清除虚拟机内可能存在的恶意软件或病毒。
    虚拟机(VM)中毒排查涉及一系列步骤,目的是定位并清除虚拟机内可能存在的恶意软件或病毒。虚拟机的安全性不仅需要保证虚拟机内部的操作系统和应用程序的安全,还需要考虑宿主机的安全,以及虚拟化平台的整体防护。以下是虚拟机中毒排查的常见步骤:1. 确认中毒的症状性能下降:虚拟机运行......
  • 20222408 2024-2025-1 《网络与系统攻防技术》实验八实验报告
    1.实验内容1.1实验基本内容概述(1)编写含有表单的前端代码,启用Apache,可以访问对应网页。(2)在前端代码中添加javascript代码,进行验证和登录回显的操作,并对其进行注入攻击。(3)启动MySQL,并对其进行基础操作。(4)修改前端代码,编写PHP代码,使网页可以通过请求PHP文件,连接数据库,进行用户认......
  • 城市攻防战(C++#)
    #include<bits/stdc++.h>#include<windows.h>#include<stdio.h>#include<conio.h>#include<time.h>usingnamespacestd;typedefBOOL(WINAPI*PROCSETCONSOLEFONT)(HANDLE,DWORD);PROCSETCONSOLEFONTSetConsoleFont;POINTWindowpo......