25 września 2016

Dwie struktury PEB w procesie

Struktura PEB (opens new window) zawiera podstawowe informacje o procesie działającym w systemie Windows, m.in.:

  • Informację, czy do procesu jest podczepiony debugger.
  • Informację o linii poleceń, jaka została użyta do stworzenia procesu.
  • Informację o modułach załadowanych do pamięci procesu.

Oficjalny opis znaczenia poszczególnych pól jest dostępny na MSDN (opens new window), natomiast bardziej rozbudowaną wersję można znaleźć na ntinternals.net (opens new window) lub geoffchappell.com (opens new window).

Uzyskiwanie adresu PEB

Aby pobrać adres struktury PEB, możemy wykorzystać funkcję NtQueryInformationProcess (opens new window).

NTSTATUS WINAPI NtQueryInformationProcess(
  _In_      HANDLE           ProcessHandle,
  _In_      PROCESSINFOCLASS ProcessInformationClass,
  _Out_     PVOID            ProcessInformation,
  _In_      ULONG            ProcessInformationLength,
  _Out_opt_ PULONG           ReturnLength
);

Ustawienie ProcessInformationClass na zero oraz przekazanie wskaźnika na strukturę PROCESS_BASIC_INFORMATION w ProcessInformation spowoduje zapisanie w polu PebBaseAddress adresu struktury PEB w przestrzeni wirtualnej procesu właściciela.

Ile struktur PEB ma proces?

Należy uruchomić naszą 32-bitową aplikację na 64-bitowym systemie, a następnie skompilować kolejną aplikację, która będzie pytała o adres PEB w pierwszym procesie. Wynik, który uzyskamy, jak się okazuje, jest zależny od tego, w jaki sposób kompilowany był proces analizujący.

Wywołanie funkcji z procesu 32-bitowego spowoduje uzyskanie innego adresu niż wówczas, gdy proces analizujący jest 64-bitowy.

Czy zatem aplikacje WOW64 mają dwie struktury PEB?

Odpowiedź brzmi: tak. Obie także zawierają ciekawe informacje, a są względem siebie przesunięte dokładnie 0x1000 bajtów. Warto zaznaczyć, że obie są pełnoprawnymi strukturami – jedna z nich to 32-bitowa struktura, taka jak w procesie 32-bitowym, zaś druga to WOW64, wyrównana do 8 bajtów.

Adresy struktur PEB w procesie WOW64

PEB adres

Zawartość obu struktur PEB

PEB 1
PEB 2

Czy to dotyczy tylko PEB?

Inne ważne struktury systemowe są również zduplikowane. Mamy po dwie struktury TEB dla każdego wątku oraz osobne stosy i sterty dla kodu 32-bitowego i 64-bitowego.

TEB