Developer knowledge network ยท moderated exchange

Komunitas Kode Tidak Dapat Diandalkan

Riset Pengembang, Rekayasa Terbalik & Komunitas Pengkodean

Knowledge indexHidup
4Categories
919Threads
2.8KPostingan
Tutorial

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

vtable_slayer
Senior Reverser
MEMBER
Reputasi: 215
Tanggal Bergabung: Mar 2018
Postingan: 86
Terima kasih: 61
1 bulan yang lalu ยท 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
Reputasi: 181
Tanggal Bergabung: Jul 2019
Postingan: 21
Terima kasih: 50
1 bulan yang lalu ยท 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
Reputasi: 162
Tanggal Bergabung: May 2018
Postingan: 73
Terima kasih: 42
1 bulan yang lalu ยท Jul 12, 2026 3:46 AM
#3

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