Update RfGetModuleHandle.cpp

bug fix
This commit is contained in:
vxunderground 2022-07-17 22:33:43 -05:00 committed by GitHub
parent 771872571f
commit d2596e8442
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -3,12 +3,13 @@ HMODULE RfGetModuleHandleA(LPCSTR lpModuleName)
PPEB Peb = GetPeb(); PPEB Peb = GetPeb();
PLDR_MODULE Module = NULL; PLDR_MODULE Module = NULL;
CHAR wDllName[64] = { 0 }; CHAR wDllName[64] = { 0 };
PLIST_ENTRY Head = &Peb->LoaderData->InMemoryOrderModuleList;
PLIST_ENTRY Next = Head->Flink;
Module = (PLDR_MODULE)((PBYTE)Next - 16);
Module = (PLDR_MODULE)((PBYTE)Peb->LoaderData->InMemoryOrderModuleList.Flink - 16); while (Next != Head)
while (Module != NULL)
{ {
Module = (PLDR_MODULE)((PBYTE)Module->InMemoryOrderModuleList.Flink - 16); Module = (PLDR_MODULE)((PBYTE)Next - 16);
if (Module->BaseDllName.Buffer != NULL) if (Module->BaseDllName.Buffer != NULL)
{ {
RfZeroMemory(wDllName, sizeof(wDllName)); RfZeroMemory(wDllName, sizeof(wDllName));
@ -26,16 +27,20 @@ HMODULE RfGetModuleHandleW(LPCWSTR lpModuleName)
PPEB Peb = GetPeb(); PPEB Peb = GetPeb();
PLDR_MODULE Module = NULL; PLDR_MODULE Module = NULL;
Module = (PLDR_MODULE)((PBYTE)Peb->LoaderData->InMemoryOrderModuleList.Flink - 16); PLIST_ENTRY Head = &Peb->LoaderData->InMemoryOrderModuleList;
PLIST_ENTRY Next = Head->Flink;
Module = (PLDR_MODULE)((PBYTE)Next - 16);
while (Module != NULL) while (Next != Head)
{ {
Module = (PLDR_MODULE)((PBYTE)Module->InMemoryOrderModuleList.Flink - 16); Module = (PLDR_MODULE)((PBYTE)Next - 16);
if (Module->BaseDllName.Buffer != NULL) if (Module->BaseDllName.Buffer != NULL)
{ {
if (StringCompareW(lpModuleName, Module->BaseDllName.Buffer) == 0) if (StringCompareW(lpModuleName, Module->BaseDllName.Buffer) == 0)
return (HMODULE)Module->BaseAddress; return (HMODULE)Module->BaseAddress;
} }
Next = Next->Flink;
} }
return NULL; return NULL;