TrueNtQuerySystemInformation+ ExAllocatePool = STATUS_ACCESS_VIOLATION

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

  1. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Внутри NewNtQuerySystemInformation выделяю свой буфер, и скармливаю его оригинальной TrueNtQuerySystemInformation. На что получаю STATUS_ACCESS_VIOLATION

    Есть подозрение на то что функция внутри делает проверки вроде ExGetPreviousMode, смотрит адрес и посылает куда подельше видя что из юзермода пришел кернел указатель.
     
  2. x64

    x64 New Member

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

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    SystemModuleInformation, буфер предоставляемый из юзермода мал
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Ясно. В любом случае, так делать нельзя. Сам подумай: системный сервис получает на вход адрес ядерного буфера, присланного из приложения. Вопрос 1: откуда у приложения адрес ядерного буфера? Вопрос 2: как приложение будет читать данные из этого буфера, даже если сервис отработает корректно? С точки зрения, ядра такой ситуации быть не может. В таком случае, как у тебя, следует использовать ZwAllocateVirtualMemory() или делать проекцию ядерной памяти, выделенной из пула, в а.п. текущего процесса и только тогда уже передавать сервису адрес проекции. Вот так было бы правильно, но я всё ещё не понимаю, зачем это всё? Какую задачу ты пытаешься решить?

    И чем это плохо лично для тебя?
     
  5. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Задача - выдавать по SystemModuleInformation на один элемент меньше чем их есть. Когда происходит первый вызов с нулевыми аргументами - я возвращаю необходимый размер буфера минус один элемент. Для второго, уже полноценноговызова, буфер будет мал. Естественно планировал после вызова скопировать данные из кернел буфера в юзермода почленно. Спасибо, думаю подойдет функция указаная. а поправить TEB на время вызова - так очень опасно?
     
  6. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    -нафиг это делать?
    возвращайте размер как есть, ведь не факт что модуль какойто не выгрузился во время манипуляций или не подгрузился
     
  7. reader323

    reader323 New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2009
    Сообщения:
    134
    assorted
    А не судьба сделать пост обработку?
    т.е. когда ориг функция отработает и все заполнит как надо - возьми да поправь буфер.
    А так вырываем гланды через жо..
     
  8. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    ZwAllocateVirtualMemory идея хорошая. А остальные варианты - и есть вырывание гланд через жо. Возвращать размер как есть и делать постобработку означает что последний член SYSTEM_MODULE_ENTRY будет всегда присутствовать но будет пустовать. То есть вы предлагаете сделать так, чтобы NtQuerySystemInformation перестала соответствовать спецификации.
     
  9. reader323

    reader323 New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2009
    Сообщения:
    134
    вам религия не позволяет отредактировать буфер должным образом или что?

    покажите мне "спецификацию" на изъятие модулей из списка

    ваша тема феерический бред
     
  10. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    с чего бы? что размер уже определяет кол-во?
     
  11. assorted

    assorted New Member

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

    Модули не так часто грузятся/выгружаются. В большинстве случаев их количество не изменно длительное время.