Access the Windows API by PEB walk.
Resolve base address sebuah module (misal kernel32.dll) dengan menelusuri InInitializationOrderModuleList 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
InInitializationOrderModuleList - mencocokkan
BaseDllNamedengan nama DLL target.
- Baca
PEB.Ldrdari segment register (GSpada x64,FSpada x86). - Ambil head dari
InInitializationOrderModuleList. - Iterasi setiap entri; gunakan
CONTAINING_RECORD(entry, MY_LDR_ENTRY, InInitializationOrderLinks)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. InInitializationOrderModuleListmerefleksikan urutan inisialisasiDllMainmodul.- Melengkapi cakupan ketiga linked list modul pada PEB.
- String nama DLL tetap ada di binary, sehingga mudah ditemukan melalui analisis statis.
- Kurang umum digunakan dalam shellcode dibandingkan
InMemoryOrder. - Urutan modul pada list ini berbeda dari urutan pemuatan dan alokasi memori.
- 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
- InLoadOrder: variasi penelusuran PEB melalui
InLoadOrderModuleList - InMemoryOrder: variasi penelusuran PEB melalui
InMemoryOrderModuleList