Skip to content

Commit

Permalink
hyperv_fucker prototype 9
Browse files Browse the repository at this point in the history
  • Loading branch information
kernelwernel committed Aug 9, 2024
1 parent 929ac58 commit 831c42c
Showing 1 changed file with 36 additions and 4 deletions.
40 changes: 36 additions & 4 deletions src/vmaware.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1627,7 +1627,7 @@ struct VM {
core_debug("HYPERV_FUCKER: eax = ", eax);

if (eax == 12) {
std::string p = SMBIOS_string();
const std::string p = SMBIOS_string();

core_debug("HYPERV_FUCKER: SMBIOS string = ", p);

Expand Down Expand Up @@ -1996,9 +1996,41 @@ struct VM {
return nullptr;
}

// TODO: rewrite this, it sucks
auto ScanDataForString = [](unsigned char* data, unsigned long data_length, unsigned char* string2) -> unsigned char* {
std::size_t string_length = strlen(reinterpret_cast<char*>(string2));

for (std::size_t i = 0; i <= (data_length - string_length); i++) {
if (strncmp(reinterpret_cast<char*>(&data[i]), reinterpret_cast<char*>(string2), string_length) == 0) {
return &data[i];
}
}

return 0;
};

auto AllToUpper = [](char* str, std::size_t len) {
for (std::size_t i = 0; i < len; ++i) {
str[i] = static_cast<char>(std::toupper(static_cast<unsigned char>(str[i])));
}
};

AllToUpper(p, length);

// cleaner and better shortcut than typing reinterpret_cast<unsigned char*> a million times
auto cast = [](char* p) -> unsigned char* {
return reinterpret_cast<unsigned char*>(p);
};

RegCloseKey(hk);
std::string tmp(p);
return tmp;

if (ScanDataForString(cast(p), length, (unsigned char*)("INNOTEK GMBH"))) { std::string tmp(p); return tmp; }
if (ScanDataForString(cast(p), length, (unsigned char*)("VIRTUALBOX"))) { std::string tmp(p); return tmp; }
if (ScanDataForString(cast(p), length, (unsigned char*)("SUN MICROSYSTEMS"))) { std::string tmp(p); return tmp; }
if (ScanDataForString(cast(p), length, (unsigned char*)("VBOXVER"))) { std::string tmp(p); return tmp; }
if (ScanDataForString(cast(p), length, (unsigned char*)("VIRTUAL MACHINE"))) { std::string tmp(p); return tmp; }

return nullptr;
}

[[nodiscard]] static bool motherboard_string(const wchar_t* vm_string) {
Expand Down Expand Up @@ -4523,7 +4555,7 @@ struct VM {
#if (!MSVC)
return false;
#else
std::string p = util::SMBIOS_string();
const std::string p = util::SMBIOS_string();

if (p.empty()) {
debug("MSSMBIOS: nullptr detected, returned false");
Expand Down

0 comments on commit 831c42c

Please sign in to comment.