PEB / TEB の覚書
TEB アドレスの取得
| mov eax,fs:[00000018h] |
テーブルの内容
//
// Thread Environment Block (TEB)
//
typedef struct _TEB
{
NT_TIB Tib; /* 00h */
|
BYTE* / Undocumented 32-bit PEB and TEB Structures
PEB(Process Environment Block)
PEB アドレスの取得
| mov eax,fs:[00000018h] // TEB取得 mov eax,[eax+30] |
または
| mov eax,fs:[00000030h] |
テーブルの内容
typedef struct _PEB
{
UCHAR InheritedAddressSpace; /* 00h */
UCHAR ReadImageFileExecOptions; /* 01h */
UCHAR BeingDebugged; /* 02h */
BOOLEAN SpareBool; /* 03h */
HANDLE Mutant; /* 04h */
PVOID ImageBaseAddress; /* 08h */
PPEB_LDR_DATA Ldr; /* 0Ch */
struct _RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10h */
PVOID SubSystemData; /* 14h */
PVOID ProcessHeap; /* 18h */
PVOID FastPebLock; /* 1Ch */
PPEBLOCKROUTINE FastPebLockRoutine; /* 20h */
PPEBLOCKROUTINE FastPebUnlockRoutine; /* 24h */
ULONG EnvironmentUpdateCount; /* 28h */
PVOID* KernelCallbackTable; /* 2Ch */
PVOID EventLogSection; /* 30h */
PVOID EventLog; /* 34h */
PPEB_FREE_BLOCK FreeList; /* 38h */
ULONG TlsExpansionCounter; /* 3Ch */
PVOID TlsBitmap; /* 40h */
ULONG TlsBitmapBits[0x2]; /* 44h */
PVOID ReadOnlySharedMemoryBase; /* 4Ch */
PVOID ReadOnlySharedMemoryHeap; /* 50h */
PVOID* ReadOnlyStaticServerData; /* 54h */
PVOID AnsiCodePageData; /* 58h */
PVOID OemCodePageData; /* 5Ch */
PVOID UnicodeCaseTableData; /* 60h */
ULONG NumberOfProcessors; /* 64h */
ULONG NtGlobalFlag; /* 68h */
LARGE_INTEGER CriticalSectionTimeout; /* 70h */
ULONG HeapSegmentReserve; /* 78h */
ULONG HeapSegmentCommit; /* 7Ch */
ULONG HeapDeCommitTotalFreeThreshold; /* 80h */
ULONG HeapDeCommitFreeBlockThreshold; /* 84h */
ULONG NumberOfHeaps; /* 88h */
ULONG MaximumNumberOfHeaps; /* 8Ch */
PVOID* ProcessHeaps; /* 90h */
PVOID GdiSharedHandleTable; /* 94h */
PVOID ProcessStarterHelper; /* 98h */
PVOID GdiDCAttributeList; /* 9Ch */
PVOID LoaderLock; /* A0h */
ULONG OSMajorVersion; /* A4h */
ULONG OSMinorVersion; /* A8h */
USHORT OSBuildNumber; /* ACh */
USHORT OSCSDVersion; /* AEh */
ULONG OSPlatformId; /* B0h */
ULONG ImageSubSystem; /* B4h */
ULONG ImageSubSystemMajorVersion; /* B8h */
ULONG ImageSubSystemMinorVersion; /* BCh */
ULONG ImageProcessAffinityMask; /* C0h */
ULONG GdiHandleBuffer[0x22]; /* C4h */
PVOID PostProcessInitRoutine; /* 14Ch */
struct _RTL_BITMAP *TlsExpansionBitmap; /* 150h */
ULONG TlsExpansionBitmapBits[0x20]; /* 154h */
ULONG SessionId; /* 1D4h */
PVOID AppCompatInfo; /* 1D8h */
UNICODE_STRING CSDVersion; /* 1DCh */
} PEB, *PPEB;
|
利用可能な TEBのサイズ
| SUB_L004D7F4C: push esi push edi mov edi,[esp+0Ch] push edi call KeAttachProcess push 00000FA4h push edi call SUB_L004D7D9A mov esi,eax xor edx,edx or dword ptr [esi],FFFFFFFFh mov [esi+0Ch],edx mov dword ptr [esi+10h],00001E00h |
Win2000 SP4
| SUB_L004AE0F5: push 00000014h push L00423B50 call SUB_L0040BDF3 mov esi,[ebp+08h] push esi call KeAttachProcess lea eax,[ebp-1Ch] push eax push 00000FB8h push esi call SUB_L004AE20F mov edi,eax test edi,edi jl L005256DA and dword ptr [ebp-04h],00000000h mov eax,[ebp-1Ch] or dword ptr [eax],FFFFFFFFh mov eax,[ebp-1Ch] mov dword ptr [eax+10h],00001E00h |
XP SP3
| SUB_L006600D7: push 0000002Ch push L0044D160 call SUB_L00454C60 mov edi,ecx mov ebx,[ebp+0Ch] lea eax,[ebp-3Ch] push eax push [ebp+08h] call KeStackAttachProcess lea eax,[ebp-20h] push eax push 00000FE4h push 00000000h push [ebp+08h] call SUB_L00618BDF mov [ebp+0Ch],eax test eax,eax jge L0066011F lea eax,[ebp-3Ch] push eax call KeUnstackDetachProcess mov eax,[ebp+0Ch] jmp L006601ED L0066011F: and dword ptr [ebp-04h],00000000h mov esi,[ebp-20h] or dword ptr [esi],FFFFFFFFh mov dword ptr [esi+10h],00001E00h |
Win7SP1


Comments