MCPcopy Index your code
hub / github.com/bytecode77/r77-rootkit / GetExecutableFunction

Function GetExecutableFunction

r77api/r77win.c:869–902  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

867 }
868}
869DWORD GetExecutableFunction(LPBYTE image, LPCSTR functionName)
870{
871 BOOL is64Bit;
872 if (IsExecutable64Bit(image, &is64Bit))
873 {
874 PIMAGE_EXPORT_DIRECTORY exportDirectory;
875 if (is64Bit)
876 {
877 PIMAGE_NT_HEADERS64 ntHeaders = (PIMAGE_NT_HEADERS64)(image + ((PIMAGE_DOS_HEADER)image)->e_lfanew);
878 exportDirectory = (PIMAGE_EXPORT_DIRECTORY)(image + RvaToOffset(image, ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress));
879 }
880 else
881 {
882 PIMAGE_NT_HEADERS32 ntHeaders = (PIMAGE_NT_HEADERS32)(image + ((PIMAGE_DOS_HEADER)image)->e_lfanew);
883 exportDirectory = (PIMAGE_EXPORT_DIRECTORY)(image + RvaToOffset(image, ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress));
884 }
885
886 LPDWORD nameDirectory = (LPDWORD)(image + RvaToOffset(image, exportDirectory->AddressOfNames));
887 LPWORD nameOrdinalDirectory = (LPWORD)(image + RvaToOffset(image, exportDirectory->AddressOfNameOrdinals));
888
889 for (DWORD i = 0; i < exportDirectory->NumberOfNames; i++)
890 {
891 if (StrStrA((PCHAR)(image + RvaToOffset(image, *nameDirectory)), functionName))
892 {
893 return RvaToOffset(image, *(LPDWORD)(image + RvaToOffset(image, exportDirectory->AddressOfFunctions) + *nameOrdinalDirectory * sizeof(DWORD)));
894 }
895
896 nameDirectory++;
897 nameOrdinalDirectory++;
898 }
899 }
900
901 return 0;
902}
903DWORD RvaToOffset(LPBYTE image, DWORD rva)
904{
905 PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS)(image + ((PIMAGE_DOS_HEADER)image)->e_lfanew);

Callers 2

InjectDllMethod · 0.85
InjectDllFunction · 0.85

Calls 2

IsExecutable64BitFunction · 0.85
RvaToOffsetFunction · 0.85

Tested by

no test coverage detected