Skip to content

Latest commit

 

History

History
43 lines (31 loc) · 2.15 KB

File metadata and controls

43 lines (31 loc) · 2.15 KB

Shellcode Loader

Access the Windows API by PEB walk.

Overview

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 BaseDllName dengan nama DLL target.

How It Works

  1. Baca PEB.Ldr dari segment register (GS pada x64, FS pada x86).
  2. Ambil head dari InInitializationOrderModuleList.
  3. Iterasi setiap entri; gunakan CONTAINING_RECORD(entry, MY_LDR_ENTRY, InInitializationOrderLinks) untuk mendapatkan struktur modul.
  4. Bandingkan BaseDllName dengan nama DLL target (misal kernel32.dll).
  5. Jika cocok, kembalikan DllBase.
  6. Parse export table dari DllBase dan cocokkan nama fungsi (lihat manual-name).

Advantages

  • Menghindari hook EDR pada GetModuleHandle dan API loader Win32 lainnya.
  • InInitializationOrderModuleList merefleksikan urutan inisialisasi DllMain modul.
  • Melengkapi cakupan ketiga linked list modul pada PEB.

Disadvantages

  • 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.

Reference