ZwReadVirtualMemory и PatchGuard

У меня есть вопрос о вызове подпрограммы ZwReadVirtualMemory из моего драйвера. Я заметил, что ntokskrnl не экспортирует его после сброса EAT. Как и где я могу найти виртуальный адрес для этой процедуры?

Он находится в ssdt? если да, то не мешает ли мне patchguard читать там все равно? Или это только для письма.

Кроме того, это для Windows 7 x64.

Спасибо!


person Nick    schedule 09.09.2011    source источник
comment
Я предполагаю, что под трюком ntdll вы подразумеваете использование этого целого числа без знака, которое перемещается в регистр eax/rax в пользовательском режиме до выполнения фактического системного вызова?   -  person Lynn    schedule 12.09.2011


Ответы (2)


ZwReadVirtualMemory не экспортируется из ядра. Но вы можете найти его в SSDT. Используйте трюк с ntdll. Не беспокойтесь о PatchGuard. Это предотвращает только изменение кода, чтение в порядке.

Также примите во внимание, что ZwReadVirtualMemory — не единственный способ чтения виртуальной памяти.

person Sergey Podobry    schedule 12.09.2011
comment
Аккуратный. Какие еще есть способы? Я слышал о KeStackAttachProcess. Что-нибудь еще? Также кажется, что экспорт ssdt отсутствует в моем ntoskrnl.exe здесь, на x64 winodws 7. Не знаю, почему .. - person Nick; 13.09.2011
comment
Да, используя KeStackAttachProcess. Может быть, вы смотрите не на тот индекс в SSDT? - person Sergey Podobry; 13.09.2011
comment
Можете ли вы рассказать больше о трюке с ntdll для использования ZwReadVirtualMemory? Спасибо. - person mox; 04.01.2014
comment
Сопоставить или прочитать ntdll.dll, разобрать его заголовки и найти адрес NtReadVirtualMemory, посмотреть в начало функции, там должна быть инструкция mov eax, index, взять индекс из нее. Надеюсь, у вас есть идея. - person Sergey Podobry; 04.01.2014

Имейте в виду, что SSDT на win 64 не содержит указателей на функции. Он содержит смещения относительно начала nt!KiServiceTable. Также одним из жизнеспособных способов обнаружения SSDT является выполнение своего рода сканирования шаблонов для определения местоположения. В основном для 64-битных просто забудьте о том, чтобы свободно возиться с SSDT. Для получения дополнительной информации прочитайте это.

Кроме того, patchguard предназначен только для модификации системно-критичных компонентов.

person LordDoskias    schedule 20.09.2011