DMALibrary
DMALibrary copied to clipboard
Keyboard
win32ksgd.sys cannot be found in csrss.exe module VMMDLL_ProcessGetModuleBaseU returns 0 windows11 24h2 LTSC Winver: 26100
try it
bool c_keys::InitKeyboard()
{
std::string win = registry.QueryValue("HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentBuild", e_registry_type::sz);
int Winver = 0;
if (!win.empty())
Winver = std::stoi(win);
else
return false;
std::string ubr = registry.QueryValue("HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\UBR", e_registry_type::dword);
int Ubr = 0;
if (!ubr.empty())
Ubr = std::stoi(ubr);
else
return false;
this->win_logon_pid = mem.GetPidFromName("winlogon.exe");
if (Winver > 22000)
{
auto pids = mem.GetPidListFromName("csrss.exe");
pids.push_back(win_logon_pid);
pids.push_back(mem.GetPidFromName("System"));
for (size_t i = 0; i < pids.size(); i++)
{
auto pid = pids[i];
uintptr_t tmp = VMMDLL_ProcessGetModuleBaseU(mem.vHandle, pid, const_cast<LPSTR>("win32ksgd.sys"));
uintptr_t g_session_global_slots = 0;
if (tmp == 0){
tmp = VMMDLL_ProcessGetModuleBaseU(mem.vHandle, pid, const_cast<LPSTR>("win32k.sys"));
g_session_global_slots = tmp + 0x824F8; // win11 24h2
}else{
g_session_global_slots = tmp + 0x3110;
}
uintptr_t user_session_state = 0;
for (int i = 0; i < 4; i++)
{
user_session_state = mem.Read<uintptr_t>(mem.Read<uintptr_t>(mem.Read<uintptr_t>(g_session_global_slots, pid) + 8 * i, pid), pid);
if (user_session_state > 0x7FFFFFFFFFFF)
break;
}
if(Winver >= 26100){
gafAsyncKeyStateExport = user_session_state + 0x3818; // win11 24h2
}else{
if (Winver >= 22631 && Ubr >= 3810)
gafAsyncKeyStateExport = user_session_state + 0x36A8;
else
gafAsyncKeyStateExport = user_session_state + 0x3690;
}
if (gafAsyncKeyStateExport > 0x7FFFFFFFFFFF)
break;
}
if (gafAsyncKeyStateExport > 0x7FFFFFFFFFFF)
return true;
return false;
}
else
{
PVMMDLL_MAP_EAT eat_map = NULL;
PVMMDLL_MAP_EATENTRY eat_map_entry;
bool result = VMMDLL_Map_GetEATU(mem.vHandle, mem.GetPidFromName("winlogon.exe") | VMMDLL_PID_PROCESS_WITH_KERNELMEMORY, const_cast<LPSTR>("win32kbase.sys"), &eat_map);
if (!result)
return false;
if (eat_map->dwVersion != VMMDLL_MAP_EAT_VERSION)
{
VMMDLL_MemFree(eat_map);
eat_map_entry = NULL;
return false;
}
for (int i = 0; i < eat_map->cMap; i++)
{
eat_map_entry = eat_map->pMap + i;
if (strcmp(eat_map_entry->uszFunction, "gafAsyncKeyState") == 0)
{
gafAsyncKeyStateExport = eat_map_entry->vaFunction;
break;
}
}
VMMDLL_MemFree(eat_map);
eat_map = NULL;
if (gafAsyncKeyStateExport < 0x7FFFFFFFFFFF)
{
PVMMDLL_MAP_MODULEENTRY module_info;
auto result = VMMDLL_Map_GetModuleFromNameW(mem.vHandle, mem.GetPidFromName("winlogon.exe") | VMMDLL_PID_PROCESS_WITH_KERNELMEMORY, static_cast<LPCWSTR>(L"win32kbase.sys"), &module_info, VMMDLL_MODULE_FLAG_NORMAL);
if (!result)
{
LOG("failed to get module info\n");
return false;
}
char str[32];
if (!VMMDLL_PdbLoad(mem.vHandle, mem.GetPidFromName("winlogon.exe") | VMMDLL_PID_PROCESS_WITH_KERNELMEMORY, module_info->vaBase, str))
{
LOG("failed to load pdb\n");
return false;
}
uintptr_t gafAsyncKeyState;
if (!VMMDLL_PdbSymbolAddress(mem.vHandle, str, const_cast<LPSTR>("gafAsyncKeyState"), &gafAsyncKeyState))
{
LOG("failed to find gafAsyncKeyState\n");
return false;
}
LOG("found gafAsyncKeyState at: 0x%p\n", gafAsyncKeyState);
}
if (gafAsyncKeyStateExport > 0x7FFFFFFFFFFF)
return true;
return false;
}
}
u got for 23H2?