Такой способ есть.Например есть такая экспортируемая кернелом ф-ция - 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 используется
Комментариев нет:
Отправить комментарий