API Hashing, PEB, LDR - RE

xzh

Üye
8 Nis 2020
216
70

Windows işletim sisteminde shellcode analizinde, Process Environment Block (PEB) önemli bir rol oynar. PEB, bir süreç hakkında bilgi içeren bir veri yapısıdır. PEB, aşağıdaki bilgileri içerir:​

  • Process ID: Sürecin kimliğini temsil eder.
  • Thread ID: Süreç içinde çalışan ana iş parçacığının kimliğini temsil eder.
  • Image Base: Sürecin başlangıç adresidir.
  • Module List: Süreç tarafından yüklenmiş modüllerin bir listesini içerir.
  • Environment Strings: Süreç için özelleştirilmiş ortam dizeleri içerir.
Shellcode, PEB'ye erişerek, yüklü modüllerin adreslerini, Windows API'lerinin adreslerini ve diğer önemli bilgileri elde edebilir.

PEB ile shellcode bulmak için aşağıdaki adımlar izlenir:

  1. Shellcode'un PEB'ye eriştiğini belirleyin. Shellcode, genellikle PEB'ye erişmek için, FS:[0x30] veya FS:[0x60] adresini kullanır. (x86 ve x64 farklılıkları :)
  2. Shellcode'un PEB'de hangi alanı kullandığını belirleyin. Shellcode, genellikle PEB'de aşağıdaki alanları kullanır:
    • Ldr
      • InLoadOrderModuleList: Yüklendikleri sırayla modüllerin listesi.
      • InMemoryOrderModuleList: Belleğe yerleştirildikleri sırayla modüllerin listesi.
      • InInitializationOrderModuleList: Başlatıldıkları sırayla modüllerin listesi.



InLoadOrderModuleList, LIST_ENTRY türünde bir yapıdır. LIST_ENTRY yapısının 2-üye içerir - bir sonraki LIST_ENTRY yapısına bir ileri işaretçi (yani Flink) ve bir önceki LIST_ENTRY yapısına bir geri işaretçi (yani Blink). Örnek olarak, Flink'i takip edeceğiz. Flink, bir LDR_DATA_TABLE_ENTRY yapısı içinde bulunan başka bir LIST_ENTRY yapısına işaret eder.

LDR_DATA_TABLE_ENTRY yapısı, yüklü bir DLL hakkında bilgi içerir ve InLoadOrderModuleList tarafından izlenen her DLL'nin kendisiyle ilişkili bir LDR_DATA_TABLE_ENTRY yapısı vardır. Birçok üyesi arasında, modülün bellekteki temel adresini belirten DllBase bulunur. Temel adres, genellikle shellcode tarafından dışa aktarma dizinini bulmak için bir başlangıç noktası olarak kullanılır. Ayrıca, yüklü DLL'nin adını belirten BaseDllName de dikkate değerdir. Bu üye tipik olarak shellcode tarafından bir DLL adı depolayan Buffer'ın adresini elde etmek için kullanılır. DLL adı, genellikle API karma oluşturmak için bir fonksiyon adıyla birleştirilir.

Shellcode'un PEB'de kullandığı alanı inceleyin.
Shellcode'un PEB'de kullandığı alanı inceleyerek, shellcode'un hangi bilgileri elde ettiğini belirleyebilirsiniz.

Kod:
; Shellcode'un başlangıcı

mov eax, FS:[0x30]
mov eax, [eax + 0x0C]

; Shellcode'un sonu

Bu shellcode, FS:[0x30] adresinden PEB'nin adresini alır ve ardından PEB'de Ldr yapısının adresini alır. Ldr yapısının adresini elde ederek, shellcode yüklü modüllerin bir listesini elde edebilir.

References
  1. Understanding the PEB_LDR_DATA Structure
  2. MSDN
 

Floppaging

Yeni üye
12 Ocak 2024
9
13
Teşekkürler, sağlam içerik. Böyle kaliteyi yükselten şeyler görmek mutlu ediyor devamını beklerim.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.