Access the Windows API by module enumeration.
Resolve base address sebuah module (misal kernel32.dll) dengan menelusuri InLoadOrderModuleList 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
InLoadOrderModuleList - mencocokkan
BaseDllNamedengan nama DLL target.
- Baca
PEB.Ldrdari segment register (GSpada x64,FSpada x86). - Ambil head dari
InLoadOrderModuleList. - Iterasi setiap entri; gunakan
CONTAINING_RECORD(entry, MY_LDR_ENTRY, InLoadOrderLinks)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. InLoadOrderModuleListmerefleksikan urutan pemuatan modul yang sebenarnya.InLoadOrderLinksadalah field pertama diLDR_DATA_TABLE_ENTRY, sehinggaCONTAINING_RECORDmenghasilkan offset 0.
- String nama DLL tetap ada di binary, sehingga mudah ditemukan melalui analisis statis.
- Entri pertama setelah list head adalah executable utama, bukan
ntdll.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
- InMemoryOrder: variasi penelusuran PEB melalui
InMemoryOrderModuleList