Access the Windows API by module enumeration.
Resolve base address sebuah module (misal kernel32.dll) dengan menelusuri InMemoryOrderModuleList pada PEB.Ldr, lalu mendapatkan alamat fungsi melalui manual export walk by name. Tidak memanggil GetModuleHandle, GetProcAddress, atau LoadLibrary.
Teknik ini memfokuskan pada langkah resolusi modul:
- membaca PEB dari segment register
- iterasi linked list
InMemoryOrderModuleList - mencocokkan
BaseDllNamedengan nama DLL target.
- Baca
PEB.Ldrdari segment register (GSpada x64,FSpada x86). - Ambil head dari
InMemoryOrderModuleList. - Iterasi setiap entri; gunakan
CONTAINING_RECORD(entry, MY_LDR_ENTRY, InMemoryOrderLinks)untuk mendapatkan struktur modul. - Bandingkan
BaseDllNamedengan nama DLL target (misalkernel32.dll). - Jika cocok, kembalikan
DllBase. - Parse export table dari
DllBasedan cocokkan nama fungsi (lihatmanual-name).
- Menghindari hook EDR pada
GetModuleHandledan API loader Win32 lainnya. InMemoryOrderModuleListadalah list PEB yang paling umum digunakan dalam shellcode dan teknik evasi.BaseDllNametersedia langsung pada offsetInMemoryOrderLinksdiLDR_DATA_TABLE_ENTRY.
- String nama DLL tetap ada di binary, sehingga mudah ditemukan melalui analisis statis.
- Urutan modul pada list ini berbeda dari urutan pemuatan; entri pertama adalah executable utama, bukan
ntdll.dll(berbeda dengan teknik syscall yang mengambil entri kedua untukntdll.dll). - Hanya menangani modul yang sudah dimuat; tidak memuat DLL baru.
- PEB Structure
- PEB_LDR_DATA
- LDR_DATA_TABLE_ENTRY
- manual-name: manual PE export walk by name