PEB и WoW64

Тема в разделе "WASM.X64", создана пользователем M0rg0t, 5 мар 2021.

  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Запутался что-то с этим всем, может кто подскажет? Если приложение нативное (32 битное на 32 битной ОС или 64 бит), то там все как бы ясно. Но , для WoW64 есть 2 РЕВ в процессе. И какой за что отвечает, откуда вообще брать инфу?

    Берем WinDBG , запускаем 32 битную софтину на 64 битной ОС.

    >0:000:x86> !peb
    Код (Text):
    1. PEB at 0000000000279000
    2.   InheritedAddressSpace:  No
    3.   ReadImageFileExecOptions: No
    4.   BeingDebugged:  Yes
    5.   ImageBaseAddress:  0000000000400000
    6.   Ldr  00007ff98b4653c0
    7.   *** unable to read Ldr table at 00007ff98b4653c0
    8.   SubSystemData:  0000000000000000
    9.   ProcessHeap:  0000000000500000
    10.   ProcessParameters: 0000000000502560
    11.   CurrentDirectory:  'C:\WINDOWS\' ...
    Берем адрес 279000 , пишем
    0:000:x86> dt _peb 0x279000

    Код (Text):
    1. ntdll_772e0000!_PEB
    2.    +0x000 InheritedAddressSpace : 0 ''
    3.    +0x001 ReadImageFileExecOptions : 0 ''
    4.    +0x002 BeingDebugged    : 0x1 ''
    5.    +0x003 BitField         : 0 ''
    6.    +0x003 ImageUsesLargePages : 0y0
    7.    +0x003 IsProtectedProcess : 0y0
    8.    +0x003 IsImageDynamicallyRelocated : 0y0
    9.    +0x003 SkipPatchingUser32Forwarders : 0y0
    10.    +0x003 IsPackagedProcess : 0y0
    11.    +0x003 IsAppContainer   : 0y0
    12.    +0x003 IsProtectedProcessLight : 0y0
    13.    +0x003 IsLongPathAwareProcess : 0y0
    14.    +0x004 Mutant           : (null)
    15.    +0x008 ImageBaseAddress : 0xffffffff Void
    16.    +0x00c Ldr              : 0xffffffff _PEB_LDR_DATA
    17.    +0x010 ProcessParameters : 0x00400000 _RTL_USER_PROCESS_PARAMETERS
    18.    +0x014 SubSystemData    : (null)
    19.    +0x018 ProcessHeap      : 0x8b4653c0 Void
    20.    +0x01c FastPebLock      : 0x00007ff9 _RTL_CRITICAL_SECTION
    21.    +0x020 AtlThunkSListPtr : 0x00502560 _SLIST_HEADER
    22.    +0x024 IFEOKey          : (null)
    23.    +0x028 CrossProcessFlags : 0
    24.    +0x028 ProcessInJob     : 0y0
    25.    +0x028 ProcessInitializing : 0y0
    26.    +0x028 ProcessUsingVEH  : 0y0
    27.    +0x028 ProcessUsingVCH  : 0y0
    28.    +0x028 ProcessUsingFTH  : 0y0
    29.    +0x028 ProcessPreviouslyThrottled : 0y0
    30.    +0x028 ProcessCurrentlyThrottled : 0y0
    31.    +0x028 ProcessImagesHotPatched : 0y0
    32.    +0x028 ReservedBits0    : 0y000000000000000000000000 (0)
    33.    +0x02c KernelCallbackTable : (null)
    34.    +0x02c UserSharedInfoPtr : (null)
    35.    +0x030 SystemReserved   : 0x500000
    36.    +0x034 AtlThunkSListPtr32 : (null)
    37.    +0x038 ApiSetMap        : 0x8b464fe0 Void
    38.    +0x03c TlsExpansionCounter : 0x7ff9
    39.    +0x040 TlsBitmap        : (null)
    40.    +0x044 TlsBitmapBits    : [2] 0
    41.    +0x04c ReadOnlySharedMemoryBase : (null)
    42.    +0x050 SharedData       : 0x00000001 Void
    43.    +0x054 ReadOnlyStaticServerData : (null)
    44.    +0x058 AnsiCodePageData : (null)
    45.    +0x05c OemCodePageData  : (null)
    46.    +0x060 UnicodeCaseTableData : (null)
    47.    +0x064 NumberOfProcessors : 0
    48.    +0x068 NtGlobalFlag     : 0x40000
    49.    +0x070 CriticalSectionTimeout : _LARGE_INTEGER 0x0
    50.    +0x078 HeapSegmentReserve : 0x8b465340
    51.    +0x07c HeapSegmentCommit : 0x7ff9
    52.    +0x080 HeapDeCommitTotalFreeThreshold : 0x7ffff
    53.    +0x084 HeapDeCommitFreeBlockThreshold : 0
    54.    +0x088 NumberOfHeaps    : 0x7fe50000
    55.    +0x08c MaximumNumberOfHeaps : 0
    56.    +0x090 ProcessHeaps     : (null)
    57.    +0x094 GdiSharedHandleTable : (null)
    58.    +0x098 ProcessStarterHelper : 0x7fe50750 Void
    59.    +0x09c GdiDCAttributeList : 0
    60.    +0x0a0 LoaderLock       : 0x7ffb0000 _RTL_CRITICAL_SECTION
    61.    +0x0a4 OSMajorVersion   : 0
    62.    +0x0a8 OSMinorVersion   : 0x7ffc0228
    63.    +0x0ac OSBuildNumber    : 0
    64.    +0x0ae OSCSDVersion     : 0
    65.    +0x0b0 OSPlatformId     : 0x7ffd0650
    66.    +0x0b4 ImageSubsystem   : 0
    67.    +0x0b8 ImageSubsystemMajorVersion : 0xc
    68.    +0x0bc ImageSubsystemMinorVersion : 0x470
    69.    +0x0c0 ActiveProcessAffinityMask : 0x79b8000
    70.    +0x0c4 GdiHandleBuffer  : [34] 0xffffe86d
    71.    +0x14c PostProcessInitRoutine : (null)
    72.    +0x150 TlsExpansionBitmap : (null)
    73.    +0x154 TlsExpansionBitmapBits : [32] 0
    74.    +0x1d4 SessionId        : 0
    75.    +0x1d8 AppCompatFlags   : _ULARGE_INTEGER 0x0
    76.    +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER 0x0
    77.    +0x1e8 pShimData        : (null)
    78.    +0x1ec AppCompatInfo    : (null)
    79.    +0x1f0 CSDVersion       : _UNICODE_STRING ""
    80.    +0x1f8 ActivationContextData : (null)
    81.    +0x1fc ProcessAssemblyStorageMap : (null)
    82.    +0x200 SystemDefaultActivationContextData : (null)
    83.    +0x204 SystemAssemblyStorageMap : (null)
    84.    +0x208 MinimumStackCommit : 0
    85.    +0x20c SparePointers    : [4] (null)
    86.    +0x21c SpareUlongs      : [5] 0
    87.    +0x230 WerRegistrationData : (null)
    88.    +0x234 WerShipAssertPtr : (null)
    89.    +0x238 pUnused          : 0x8b465320 Void
    90.    +0x23c pImageHeaderHash : 0x00007ff9 Void
    91.    +0x240 TracingFlags     : 1
    92.    +0x240 HeapTracingEnabled : 0y1
    93.    +0x240 CritSecTracingEnabled : 0y0
    94.    +0x240 LibLoaderTracingEnabled : 0y0
    95.    +0x240 SpareTracingBits : 0y00000000000000000000000000000 (0)
    96.    +0x248 CsrServerReadOnlySharedMemoryBase : 0
    97.    +0x250 TppWorkerpListLock : 0
    98.    +0x254 TppWorkerpList   : _LIST_ENTRY [ 0x0 - 0x0 ]
    99.    +0x25c WaitOnAddressHashTable : [128] (null)
    100.    +0x45c TelemetryCoverageHeader : (null)
    101.    +0x460 CloudFileFlags   : 0
    102.    +0x464 CloudFileDiagFlags : 0
    103.    +0x468 PlaceholderCompatibilityMode : 0 ''
    104.    +0x469 PlaceholderCompatibilityModeReserved : [7]  ""
    105.    +0x470 LeapSecondData   : (null)
    106.    +0x474 LeapSecondFlags  : 0
    107.    +0x474 SixtySecondEnabled : 0y0
    108.    +0x474 Reserved         : 0y0000000000000000000000000000000 (0)
    109.    +0x478 NtGlobalFlag2    : 0
    Явно что-то другое показывает.

    Пишем
    >!wow64exts.info

    Код (Text):
    1. PEB32: 0x27a000
    2. PEB64: 0x279000
    Значит, то что выше - 64 битный РЕВ, дампим 32 битный

    0:000:x86> dt _peb 0x27a000

    Код (Text):
    1. ntdll_772e0000!_PEB
    2.   +0x000 InheritedAddressSpace : 0 ''
    3.   +0x001 ReadImageFileExecOptions : 0 ''
    4.   +0x002 BeingDebugged  : 0x1 ''
    5.   +0x003 BitField  : 0 ''
    6.   +0x003 ImageUsesLargePages : 0y0
    7.   +0x003 IsProtectedProcess : 0y0
    8.   +0x003 IsImageDynamicallyRelocated : 0y0
    9.   +0x003 SkipPatchingUser32Forwarders : 0y0
    10.   +0x003 IsPackagedProcess : 0y0
    11.   +0x003 IsAppContainer  : 0y0
    12.   +0x003 IsProtectedProcessLight : 0y0
    13.   +0x003 IsLongPathAwareProcess : 0y0
    14.   +0x004 Mutant  : 0xffffffff Void
    15.   +0x008 ImageBaseAddress : 0x00400000 Void
    16.   +0x00c Ldr  : 0x773fdca0 _PEB_LDR_DATA
    17.   +0x010 ProcessParameters : 0x00641fd8 _RTL_USER_PROCESS_PARAMETERS
    18.   +0x014 SubSystemData  : (null)
    19.   +0x018 ProcessHeap  : 0x00640000 Void
    20.   +0x01c FastPebLock  : 0x773fda60 _RTL_CRITICAL_SECTION
    21.   +0x020 AtlThunkSListPtr : (null)
    22.   +0x024 IFEOKey  : (null)
    23.   +0x028 CrossProcessFlags : 3
    24.   +0x028 ProcessInJob  : 0y1
    25.   +0x028 ProcessInitializing : 0y1
    26.   +0x028 ProcessUsingVEH  : 0y0
    27.   +0x028 ProcessUsingVCH  : 0y0
    28.   +0x028 ProcessUsingFTH  : 0y0
    29.   +0x028 ProcessPreviouslyThrottled : 0y0
    30.   +0x028 ProcessCurrentlyThrottled : 0y0
    31.   +0x028 ProcessImagesHotPatched : 0y0
    32.   +0x028 ReservedBits0  : 0y000000000000000000000000 (0)
    33.   +0x02c KernelCallbackTable : (null)
    34.   +0x02c UserSharedInfoPtr : (null)
    35.   +0x030 SystemReserved  : 0
    36.   +0x034 AtlThunkSListPtr32 : (null)
    37.   +0x038 ApiSetMap  : 0x00040000 Void
    38.   +0x03c TlsExpansionCounter : 0
    39.   +0x040 TlsBitmap  : 0x773fdc50 Void
    40.   +0x044 TlsBitmapBits  : [2] 0x10001
    41.   +0x04c ReadOnlySharedMemoryBase : 0x7fe50000 Void
    42.   +0x050 SharedData  : (null)
    43.   +0x054 ReadOnlyStaticServerData : 0x7fe50750  -> (null)
    44.   +0x058 AnsiCodePageData : 0x7ffb0000 Void
    45.   +0x05c OemCodePageData  : 0x7ffc0228 Void
    46.   +0x060 UnicodeCaseTableData : 0x7ffd0650 Void
    47.   +0x064 NumberOfProcessors : 0xc
    48.   +0x068 NtGlobalFlag  : 0x470
    49.   +0x070 CriticalSectionTimeout : _LARGE_INTEGER 0xffffe86d`079b8000
    50.   +0x078 HeapSegmentReserve : 0x100000
    51.   +0x07c HeapSegmentCommit : 0x2000
    52.   +0x080 HeapDeCommitTotalFreeThreshold : 0x10000
    53.   +0x084 HeapDeCommitFreeBlockThreshold : 0x1000
    54.   +0x088 NumberOfHeaps  : 1
    55.   +0x08c MaximumNumberOfHeaps : 0x10
    56.   +0x090 ProcessHeaps  : 0x773fc760  -> 0x00640000 Void
    57.   +0x094 GdiSharedHandleTable : (null)
    58.   +0x098 ProcessStarterHelper : (null)
    59.   +0x09c GdiDCAttributeList : 0
    60.   +0x0a0 LoaderLock  : 0x773fb3d0 _RTL_CRITICAL_SECTION
    61.   +0x0a4 OSMajorVersion  : 0xa
    62.   +0x0a8 OSMinorVersion  : 0
    63.   +0x0ac OSBuildNumber  : 0x47bb
    64.   +0x0ae OSCSDVersion  : 0
    65.   +0x0b0 OSPlatformId  : 2
    66.   +0x0b4 ImageSubsystem  : 2
    67.   +0x0b8 ImageSubsystemMajorVersion : 4
    68.   +0x0bc ImageSubsystemMinorVersion : 0
    69.   +0x0c0 ActiveProcessAffinityMask : 0xfff
    70.   +0x0c4 GdiHandleBuffer  : [34] 0
    71.   +0x14c PostProcessInitRoutine : (null)
    72.   +0x150 TlsExpansionBitmap : 0x773fdc38 Void
    73.   +0x154 TlsExpansionBitmapBits : [32] 1
    74.   +0x1d4 SessionId  : 1
    75.   +0x1d8 AppCompatFlags  : _ULARGE_INTEGER 0x0
    76.   +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER 0x0
    77.   +0x1e8 pShimData  : 0x001b0000 Void
    78.   +0x1ec AppCompatInfo  : (null)
    79.   +0x1f0 CSDVersion  : _UNICODE_STRING ""
    80.   +0x1f8 ActivationContextData : (null)
    81.   +0x1fc ProcessAssemblyStorageMap : (null)
    82.   +0x200 SystemDefaultActivationContextData : 0x001a0000 _ACTIVATION_CONTEXT_DATA
    83.   +0x204 SystemAssemblyStorageMap : (null)
    84.   +0x208 MinimumStackCommit : 0
    85.   +0x20c SparePointers  : [4] (null)
    86.   +0x21c SpareUlongs  : [5] 0
    87.   +0x230 WerRegistrationData : (null)
    88.   +0x234 WerShipAssertPtr : (null)
    89.   +0x238 pUnused  : (null)
    90.   +0x23c pImageHeaderHash : (null)
    91.   +0x240 TracingFlags  : 0
    92.   +0x240 HeapTracingEnabled : 0y0
    93.   +0x240 CritSecTracingEnabled : 0y0
    94.   +0x240 LibLoaderTracingEnabled : 0y0
    95.   +0x240 SpareTracingBits : 0y00000000000000000000000000000 (0)
    96.   +0x248 CsrServerReadOnlySharedMemoryBase : 0x7df4`a6460000
    97.   +0x250 TppWorkerpListLock : 0
    98.   +0x254 TppWorkerpList  : _LIST_ENTRY [ 0x27a254 - 0x27a254 ]
    99.   +0x25c WaitOnAddressHashTable : [128] (null)
    100.   +0x45c TelemetryCoverageHeader : (null)
    101.   +0x460 CloudFileFlags  : 0
    102.   +0x464 CloudFileDiagFlags : 0
    103.   +0x468 PlaceholderCompatibilityMode : 0 ''
    104.   +0x469 PlaceholderCompatibilityModeReserved : [7]  ""
    105.   +0x470 LeapSecondData  : 0x7ffa0000 _LEAP_SECOND_DATA
    106.   +0x474 LeapSecondFlags  : 0
    107.   +0x474 SixtySecondEnabled : 0y0
    108.   +0x474 Reserved  : 0y0000000000000000000000000000000 (0)
    109.   +0x478 NtGlobalFlag2  : 0
    Еще что-то совсем другое.
    В общем, помогите разобраться.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    Судя по смещениям эта команда пытается парсить указатель, как 32-битный PEB. И когда ты пытаешься парсить адрес 32-битного PEB, он парсится корректно, не понимаю, в чем вопрос?
     
  3. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    Ну структуры имеют разный размер для 64 и 32 бит.
     
  4. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Rel, ну как же корректно, если пишет
    Код (Text):
    1.  +0x00c Ldr              : 0xffffffff _PEB_LDR_DATA
    и это PEB64:

    Как понял, нужно получать адреса РЕВ и точно указывать, какой парсим, РЕВ32 или 64, через dt - тогда глюков нет.
    Просто по дефолту !peb видимо парсит 32 битный РЕВ по 64 битному адресу, или хз.


    Thetrik, когда пишем вида mov eax,[fs:30h]
    какой РЕВ будет в еах, при условии что прога 32 бит, а винда 64 ? 32 битный же?
     
  5. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    fs хранит 32 битный, gs 64 битный.
     
    M0rg0t нравится это.
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Теперь все ясно, спасибо.
    Вопрос снят.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    Все правильно он пишет:
    +0x00c Ldr : 0x773fdca0
    Это 32-битный пеб, все правильно.