Hier ist mal ein kleiner Codeschnipsel um die VM von hybrid-analysis.com zu erkennen. Ist zwar sehr standard aber funktioniert trotzdem.
//#include <windows.h> int CPUInfo[4] = { -1 }; char CPUBrandString[0x40]; __cpuid(CPUInfo, 0x80000000); unsigned int nExIds = CPUInfo[0]; memset(CPUBrandString, 0, sizeof(CPUBrandString)); for (int i = 0x80000000; i <= nExIds; ++i) { __cpuid(CPUInfo, i); // Interpret CPU brand string. if (i == 0x80000002) memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo)); else if (i == 0x80000003) memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo)); else if (i == 0x80000004) memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo)); } CPU = CPUBrandString; char pcname[MAX_PATH]; GetEnvironmentVariableA("COMPUTERNAME", pcname, sizeof(pcname)); int digits = 0; for (int i = 0; i < strlen(pcname); i++) { if (isdigit(pcname[i])) digits++; } if ((digits * 4) > strlen(pcname)) { goto VMerkannt; } else { if ((CPU.find("AMD") != std::string::npos) && (CPU.find("6272") != std::string::npos)) { goto VMerkannt; } else { goto keinVM; }
Schaut zuerst ob mehr als 25% des PC-namen Zahlen sind (random generierte Namen) und schaut dann ob der Prozessor der AMD 6272 ist (der ist nämlich in der Hybrid Analysis VM "eingebaut")
Ne andere Möglichkeit wäre über die MAC Adresse des stanard Netzwerkadapters zu gehen, da die MAC immer mit den gleichen 3 Blöcken anfängt. Habe ich allerdings hier nicht implementiert.