Пробелма Shadow table поднималась на форуме уже несколько раз. Наиболее понятен для меня пост Ms Rem ( эх ) http://www.wasm.ru/forum/viewtopic.php?pid=108168#p108168 Проблема в том, что KeServiceDescriptorTable->win32k всегда NULL. Как сделать так, чтоб он указывал на теневую таблицу?
ничего не понятно, уточни вопрос она и должна быть всегда NULL сервисы подсистемы юзер достигаются только через shadow таблицу
ничего не понятно, уточни вопрос Нужен адрес Shadow Table в win32k.sys. Для этого, вначале хочу найти в памяти смещение Shadow Table относительно базы win32k.sys. Как я понял KeServiceDescriptorTable->win32k указывает на Shadow Table. Верно? В принципе мне не важно как все делать - в user или kernel space.
не верно. Просьба задавать вопросы чёткие например что есть Shadow Table ? если это KeServiceDescriptorTableShadow то он находится не в win32k.sys. Если это содержимое самой таблици то: для этого нада: 1) Для начала надо найти саму KeServiceDescriptorTableShadow в памяти, для этого нада применять дизасм длин и разбирать некоторые функции, короче зри http://rain.freed0m.org/files/a-log.zip там в сорцах функция GetShadowTable (или как-то так) немного доделаная функа Ms-Rem для получения shadow таблици работающая и для х64 систем. 2) Только после того как тебе будет известен адрес KeServiceDescriptorTableShadow смотрим куда указывает его Service Table Код (Text): kd> dd KeServiceDescriptorTableShadow 808a8380 808278fc 00000000 00000128 8080374c 808a8390 bf9a2000 00000000 00000299 bf9a2d08 ... kd> lm a bf9a2000 start end module name bf800000 bf9cf000 win32k (deferred) 3) Разбираем секции win32k и узнаём смещение в секции адреса Service Table 4) Берём смещение секции в файле слаживаем со смещением которое мы получили на прошлом этапе 5) читаем с диска
rain спасибо! Одно не могу понять - почему все так сложно? Откуда sysenter диспатчер "знает" адреса таблиц?
а они в тебе лежат кажись от туда берёт там разные для гуи потоков и для потоков не гуи, тут всё не так просто, самый простой способ насколько мне известно я привёл выше если вы знаете проще, пишите
Для ГУЙ-потоков в ServiceTable KeServiceDescriptorTableShadow kd> dt _KTHREAD nt!_KTHREAD +0x000 Header : _DISPATCHER_HEADER +0x010 MutantListHead : _LIST_ENTRY +0x018 InitialStack : Ptr32 Void +0x01c StackLimit : Ptr32 Void +0x020 Teb : Ptr32 Void +0x024 TlsArray : Ptr32 Void +0x028 KernelStack : Ptr32 Void +0x02c DebugActive : UChar +0x02d State : UChar +0x02e Alerted : [2] UChar +0x030 Iopl : UChar +0x031 NpxState : UChar +0x032 Saturation : Char +0x033 Priority : Char +0x034 ApcState : _KAPC_STATE +0x04c ContextSwitches : Uint4B +0x050 IdleSwapBlock : UChar +0x051 Spare0 : [3] UChar +0x054 WaitStatus : Int4B +0x058 WaitIrql : UChar +0x059 WaitMode : Char +0x05a WaitNext : UChar +0x05b WaitReason : UChar +0x05c WaitBlockList : Ptr32 _KWAIT_BLOCK +0x060 WaitListEntry : _LIST_ENTRY +0x060 SwapListEntry : _SINGLE_LIST_ENTRY +0x068 WaitTime : Uint4B +0x06c BasePriority : Char +0x06d DecrementCount : UChar +0x06e PriorityDecrement : Char +0x06f Quantum : Char +0x070 WaitBlock : [4] _KWAIT_BLOCK +0x0d0 LegoData : Ptr32 Void +0x0d4 KernelApcDisable : Uint4B +0x0d8 UserAffinity : Uint4B +0x0dc SystemAffinityActive : UChar +0x0dd PowerState : UChar +0x0de NpxIrql : UChar +0x0df InitialNode : UChar +0x0e0 ServiceTable : Ptr32 Void +0x0e4 Queue : Ptr32 _KQUEUE +0x0e8 ApcQueueLock : Uint4B +0x0f0 Timer : _KTIMER +0x118 QueueListEntry : _LIST_ENTRY +0x120 SoftAffinity : Uint4B +0x124 Affinity : Uint4B +0x128 Preempted : UChar +0x129 ProcessReadyQueue : UChar +0x12a KernelStackResident : UChar +0x12b NextProcessor : UChar +0x12c CallbackStack : Ptr32 Void +0x130 Win32Thread : Ptr32 Void +0x134 TrapFrame : Ptr32 _KTRAP_FRAME +0x138 ApcStatePointer : [2] Ptr32 _KAPC_STATE +0x140 PreviousMode : Char +0x141 EnableStackSwap : UChar +0x142 LargeStack : UChar +0x143 ResourceIndex : UChar +0x144 KernelTime : Uint4B +0x148 UserTime : Uint4B +0x14c SavedApcState : _KAPC_STATE +0x164 Alertable : UChar +0x165 ApcStateIndex : UChar +0x166 ApcQueueable : UChar +0x167 AutoAlignment : UChar +0x168 StackBase : Ptr32 Void +0x16c SuspendApc : _KAPC +0x19c SuspendSemaphore : _KSEMAPHORE +0x1b0 ThreadListEntry : _LIST_ENTRY +0x1b8 FreezeCount : Char +0x1b9 SuspendCount : Char +0x1ba IdealProcessor : UChar +0x1bb DisableBoost : UChar А так же имей ввиду, что в некоторых Xp дял разных сессий, разные KeServiceDescriptorTableShadow
Cock Для ГУЙ-потоков в ServiceTable KeServiceDescriptorTableShadow В смысле? Как это можно использовать?