Notatnik techniczny

Dwie struktury PEB w procesie

Struktura PEB 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, natomiast bardziej rozbudowaną wersję można znaleźć na ntinternals.net lub geoffchappell.com.

Uzyskiwanie adresu PEB

Aby pobrać adres struktury PEB, możemy wykorzystać funkcję NtQueryInformationProcess.

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.

PEB