Developer knowledge network ยท moderated exchange

UnreliableCode Community

Developer Research, Reverse Engineering & Coding Community

Knowledge indexLive
4Categories
919Threads
2.8KPosts
Tutorial

Compile-time API hashing with MurmurHash3 and PEB traversal in C++20

vtable_slayer
Senior Reverser
MEMBER
Rep: 215
Join Date: Mar 2018
Posts: 86
Thanks: 61
1 months ago ยท Jul 11, 2026 10:02 AM
#1

Hide Win32 API imports from your binary's Import Address Table:

CPP
constexpr uint32_t HashString(const char* str) {
    uint32_t hash = 0x811c9dc5;
    while (*str) {
        hash ^= (uint8_t)*str++;
        hash *= 0x01000193;
    }
    return hash;
}

// Usage in code:
FARPROC pVirtualAlloc = GetExportByHash(hKernel32, HashString("VirtualAlloc"));

Because HashString is evaluated by the compiler via constexpr, the string "VirtualAlloc" is never compiled into the binary, only the hash 0x4A1F3B20!

hook_doctor
Hooking Specialist
MEMBER
Rep: 181
Join Date: Jul 2019
Posts: 21
Thanks: 50
1 months ago ยท Jul 11, 2026 12:43 PM
#2

Pair this with a custom PEB module list iterator to eliminate GetProcAddress and LoadLibrary from imports.

ptr_arithmetic
C++ Wizard
MEMBER
Rep: 162
Join Date: May 2018
Posts: 73
Thanks: 42
1 months ago ยท Jul 12, 2026 3:46 AM
#3

Clean FNV-1a constexpr hash. Clean and elegant.