MCPcopy Create free account
hub / github.com/NoMercy-ac/NoMercy / MyGetProcAddress

Function MyGetProcAddress

Source/Client/NM_Engine/DynamicWinapi.cpp:382–432  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

380}
381
382static FARPROC WINAPI MyGetProcAddress(_In_ HMODULE hModule, _In_ LPCSTR lpProcName)
383{
384 auto fptmpAdr = reinterpret_cast<FARPROC>(NktHelper::GetProcAddress_A(hModule, lpProcName));
385 if (!fptmpAdr)
386 {
387 fptmpAdr = CustomGetProcAddress(hModule, lpProcName);
388 }
389
390 if (!fptmpAdr)
391 {
392 fptmpAdr = LI_FIND(GetProcAddress)(hModule, lpProcName);
393 }
394
395 if (!fptmpAdr)
396 {
397 auto szModuleName = g_nmApp->DynamicWinapiInstance()->GetModuleNameFromAddress((DWORD)hModule);
398
399 DEBUG_LOG(LL_ERR, "ERROR! %s!%s Windows API not initialized!", szModuleName.c_str(), lpProcName);
400
401 g_nmApp->OnCloseRequest(EXIT_ERR_WINAPI_INIT_FAIL, g_winapiApiTable->GetLastError(), (void*)lpProcName);
402 return 0;
403 }
404
405 if (g_nmApp->DynamicWinapiInstance()->HasInitialized() == false)
406 {
407 auto szModuleName = g_nmApp->DynamicWinapiInstance()->GetModuleNameFromAddress((DWORD)hModule);
408 DEBUG_LOG(LL_SYS, "Getprocaddress called for: %s!%s Address: %p", szModuleName.c_str(), lpProcName, fptmpAdr);
409
410#if 0
411 // TESTME
412 auto iStep = 0;
413 while (InModuleRange(hModule, reinterpret_cast<DWORD_PTR>(fptmpAdr)) == false)
414 {
415 auto pRedirectPtr = (FARPROC)GetRealAddress(fptmpAdr);
416 auto szRealOwner = g_nmApp->DynamicWinapiInstance()->GetModuleNameFromAddress(reinterpret_cast<DWORD_PTR>(pRedirectPtr));
417 DEBUG_LOG(LL_ERR, "Hook detected! API: %s Hooked address: %p Real Address: %p Owner: %s Step: %d", lpProcName, fptmpAdr, pRedirectPtr, szRealOwner.c_str(), iStep++);
418 fptmpAdr = pRedirectPtr;
419 }
420#endif
421
422 auto fpRealAddress = (FARPROC)GetRealAddress(fptmpAdr);
423 if (fpRealAddress != fptmpAdr)
424 {
425 auto szRealOwner = g_nmApp->DynamicWinapiInstance()->GetModuleNameFromAddress(reinterpret_cast<DWORD_PTR>(fpRealAddress));
426 DEBUG_LOG(LL_ERR, "Hook detected! Hooked address: %p Real Address: %p Owner: %s", fptmpAdr, fpRealAddress, szRealOwner.c_str());
427 fptmpAdr = fpRealAddress;
428 }
429 }
430
431 return fptmpAdr;
432}
433
434HMODULE CDynamicWinapi::GetPythonHandle()
435{

Callers

nothing calls this directly

Calls 7

CustomGetProcAddressFunction · 0.85
InModuleRangeFunction · 0.85
GetRealAddressFunction · 0.85
DynamicWinapiInstanceMethod · 0.80
OnCloseRequestMethod · 0.80
HasInitializedMethod · 0.80

Tested by

no test coverage detected