пятница, 5 августа 2011 г.

определение версии KPRCB

а вот нас тут спросили давеча - нету ли другого способа узнать какая именно версия KPRCB используется кроме как по версии windows ?

Такой способ есть.Например есть такая экспортируемая кернелом ф-ция - KeIsExecutingDpc. Она возвращает значение KPRC.PrcbData.DpcRoutineActive. Выглядит на разных windows примерно так (я приведу только самую первую и нужную инструкцию)

w2k/xp/w2k3
  movzx   eax, byte ptr ds:0FFDFFA7Ah


Учитывая что по адресу FFDFF000 хранится KPCR для процессора 0, а сама структура KPCR имеет размер 0x120 байт, получаем что смещение поля DpcRoutineActive равно 0x95A.

vista/w7
  mov     eax, large fs:1A54h

Тут тоже все просто - в fs расположен KPRC, cмещение поля DpcRoutineActive равно 0x1934.

Соотв-но можно составить табличку смещений поля DpcRoutineActive для всех поддерживаемых версий KPRCB и простым дизасмом ф-ции KeIsExecutingDpc определить, какая версия KPRCB используется

Комментариев нет:

Отправить комментарий