MmIsAddressValid

Тема в разделе "WASM.NT.KERNEL", создана пользователем agent007, 19 мар 2007.

  1. agent007

    agent007 New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2007
    Сообщения:
    166
    В общем эта функция возвращает FALSE при проверки IN OUT PVOID *BaseAddress в ZwMapViewOfSection, хотя адрес валиден и все впоряде... Мне подсказали что это связано с контекстом в котором вызываешь ZwMapViewOfSection... Куда курить чтобы все работало?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    По идее она проверяет адрес(если он < 0x80000000) в контексте процесса, который её вызвал. Без кода хз.
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    agent007
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    MmIsAddressValid - опасная функция, т.к. делает не совсем то, что кажется.

    http://blogs.msdn.com/doronh/archive/2006/03/09/547793.aspx
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    кстати, давно хотел узнать, как правильно проверить доступ памяти в ядре, не лазя по всяким PTE
    MmSecureVirtualMemory?

    или все-таки MmProbeAndLockPages?
     
  6. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Никак. Парадигма простая: память, которую ты сам выделил и так знаешь, а по чужим огородам неча шариться ;)
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    IoAllocateMdl для какого-то адреса в ядре
    потом MmProbeAndLockPages?
    или это закончится BSODом?
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ммм а как же ProbeForRead ?
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Great
    я про проверку памяти ядра
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ProbeForRead - экспортируемая функция ядра. И рекомендованная для использования в драйверах для проверки доступа. Согласно ддк, она выбрасывает исключение нарушения доступа, если доступа к памяти нету. Соответственно обернув ее в try/except можно сразу сказать, есть доступ к участку, или нету.
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    она только для проверки юзермодных буферов..
    чтобы испольовать ее для проверки ядра, нужно как минимум на время изменить переменную MmUserProbeAddress, хотя не факт, что функция после этого заработает правильно
    а менять MmUserProbeAddress, пусть даже и ненадолго.. но гуд )
     
  12. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Nouzui
    В последнем NtInsider было упоминание про функцию проверки памяти ядра на Висте :)
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    тру.. найти какой-нить способ для XP, а начиная с Висты юзать документированне возможности
    а что, XP документированно никак?
     
  14. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    итак, резюме:
    MmSecureVirtualMemory работает только с юзермодом
    MmProbeAndLockPages бсодится при обращении к отсутствующей памяти ядра
    ProbeForRead тоже работает только с юзермодом.. в принципе, самая подходящая функция, но для использования с памятью ядра требует временной коррекции MmUserProbeAddress или передачи управления не в начало, в обход проверки
    MmIsAddressValid делает не совсем то, что нужно

    лажово получается...
     
  15. BAY

    BAY New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    23
    подскажите пожалуйста как правильно обрабатывать исключения от MmProbeAndLockPages на асме?

    Код (Text):
    1. _try
    2. invoke MmProbeAndLockPages,pMdl,KernelMode,IoWriteAccess
    3. _finally
    не помогает(при обращении к отсутствующему адресу bsod все равно)
     
  16. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Пока, вроде, никто не научился этого делать.

    http://www.wasm.ru/forum/viewtopic.php?id=11025
     
  17. BAY

    BAY New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    23
    а если использовать
    Код (Text):
    1. invoke MmIsAddressValid,pMdl
    перед вызовом MmIsAddressValid? уменьшит/исключит ли это возможные bsod'ы?
    в msdn как-то про это туманно написано
    Код (Text):
    1. If the pages do not support the specified operation, the routine raises the STATUS_ACCESS_VIOLATION exception.
    по каким правилам должен быть поставлен SEH-кадр?
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    нет, это не поможет скорее всего. исключение возникает не из-за кривости pMdl, а из-за того, что может обломаться попытка проверки и блокировки страниц, которые описывает MDL.
     
  19. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Этого я не знаю. Всё что у меня было, приаттачил в том посте. Дизассемблирование нужных компонентов архива + многочисленные статьи по внутренностям SEH должны помочь ;)
     
  20. BAY

    BAY New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    23
    наверное так и сделаю.

    А нельзя с помощью каких либо функций точно установить будет ли в результате вызова MmProbeAndLockPages сгенерировно исключение? тоесть чтоб точно знать насчет того , что "может обломаться попытка проверки и блокировки страниц, которые описывает MDL"