正在記憶體裡執行的才叫 Process
程式幫你執行的才是 Process
死掉了就不是 Process
Components
Process Threads
一個 process 可以有多個 threads
執行的最小單位是 threads
threads 之間互不干涉
threads 之間可以交換資訊
Process Memory
Virtual Memory
可以超出 RAM 大小 用 page 管理
Physical Memory
實際上要被使用的記憶體
Memory Type
Private Memory
只有自身 Process 可以存取
Mapped
可以跟別的 processes 共用 Memory 空間
Image Memory
一個 Program 的 Code / Data 映射到 Memory 上
Process Enviroment Block
PEB
很多沒寫清楚用途的欄位
常用欄位
BeingDebugged
當前 Process 被 debug 時會 = 1
Ldr
指向 PEB_LDR_DATA
結構內記錄了當前載入的 DLL
ProcessParameters
當前 Process 執行時的參數
可以拿來 Spoofing
可以透過改掉來偽裝
AtlThunkSListPtr / AtlThunkSListPtr32
用來存 Function Thunk 的 Linked-List
類似 Linux 的 GOT
Thread Enviroment Block
TEB
TEB可以從 FS,GS Register 取得
TEB可以取得PEB
TlsSlots
Thread Local Storage
threads 可以用 TLS 存 Per Thread 的資料
Process And Thread Handles
每個 Process 跟 Thread 都有自己的 Unique ID
可以用 OpenProcess / OpenThread 來做進一步操作
Windbg
可以用 !peb 叫出 PEB 的欄位