ObReferenceObjectByHandle(SectionHandle...) Как добратья до данных?

Тема в разделе "WASM.NT.KERNEL", создана пользователем assorted, 27 окт 2009.

  1. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Перехватив NtCreateProcessEx и вызывав ObReferenceObjectByHandle для параметра SectionHandle удалось получить доступ к имени файла..

    Вопрос - как по SectionHandle добраться до данных в секции?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    NtMapViewOfSection() ?
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    ZwMapViewOfSection()
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Само собой :)
    Просто привычнее Nt-имена писать.
     
  5. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Это не "само собой", данная ошибка существенна и может повлиять на ещё не окрепшее мышление тех, кто не в курсе. Оба варианта и Nt- и Zw- в данном случае экспортируются ядром. Но если использовать Nt-вариант напрямую, это может привести к неожиданным отказам в доступе в случае, если требуется безусловный доступ к секции при условии, что все необходимые проверки входных данных уже выполнены драйвером.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    вроде в куче мест написано когда и зачем нужно использовать ZwXXX, а когда NtXXX.
    Думаю каждый драйверописатель должен понимать эту разницу, так же как и знать, что такое irql, как работать с ресурсами (память, ивенты, мьютексы).
     
  7. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    а где я возьму параметр IN ULONG CommitSize ???
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    В документации совершенно чётко сказано, что значит этот параметр. Если ты не знаешь, что такое "committed", то, похоже, тебе стоит подучиться немного, а не лезть в огород.
     
  9. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Есть ощущение что меня дезинформировали... Потрассировав CreateProcessA вижу

    1) ZwCreateSection
    2) ZwOpenSection
    3) ZwMapViewOfSection
    4) ZwCreateProcessEx
    5) ZwReadVirtualMemory
    6) ...............

    Получается в ZwCreateProcessEx приходит хендел на уже смапленую секцию..
    Повторный вызов ZwMapViewOfSection говорит ошибка в хенделе.

    Так как же правильно добраться до данных? (уточню свою задачу - нужно считать CRC запускаемого файла. Пытался поновой открыть ZwCreateFile по полному имени - тоже не открылось)