Пытаюсь найти ServiceDescriptorTableShadow анализом кода функции KeAddSystemServiceTable на предмет инструкции Код (Text): lea ecx, _KeServiceDescriptorTableShadow[eax] . Код выглядит вот так: Код (Text): GetShadowTable PROC push esi mov esi, dword ptr[KeAddSystemServiceTable + 2] mov esi, dword ptr[esi] _loop: push esi call MmIsAddressValid test eax, eax jz _brk call VirXasm32 ;Узнаем длину инструкции .if (eax == 1) && (word ptr[esi] == 0C3h) dec eax jmp _brk .endif .if (word ptr[esi] == 888Dh) mov eax, dword ptr[esi + 2] mov eax, dword ptr[eax] jmp _brk .endif add esi, eax jmp _loop _brk: pop esi ret GetShadowTable EndP Вся фишка в том, что функция находит не Shadow таблицу, а обычную! К примеру, у меня на работе (WinXP home sp2) она возвращает 804E2D20h. Командуем айсу "d KeServiceDescriptorTable" и лицезреем тот же самый адрес. Из всякой дряни на компе стоит только NOD32. Скажите, я перегрелся?
Да, я точно перегрелся - ошибка была в ДНК. Если кому надо, вот готовый и рабочий код: Код (Text): GetShadowTable PROC push esi mov esi, dword ptr[KeAddSystemServiceTable + 2] mov esi, dword ptr[esi] _loop: push esi call MmIsAddressValid test eax, eax jz _brk call VirXasm32 .if (eax == 1) && (word ptr[esi] == 0C3h) dec eax jmp _brk .endif .if (word ptr[esi] == 888Dh) mov eax, dword ptr[esi + 2] add eax, 16 mov eax, dword ptr[eax] jmp _brk .endif add esi, eax jmp _loop _brk: pop esi ret GetShadowTable EndP