список загруженных модулей

Тема в разделе "WASM.NT.KERNEL", создана пользователем XshStasX, 15 ноя 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Какие есть возможные варианты получения списка загруженных модулей в процес, из драйвера ?
    Есть еще что-то кроме как через РЕВ и PEPROCESS(напрямую)
     
  2. Craz

    Craz New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2010
    Сообщения:
    7
    Собственно тоже интересуюсь.
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    В принципе, способы есть, но это зависит от того, какая именно информация требуется для каждого модуля.

    Чем не устраивает?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    парсинг VAD.
    здесь есть старая тулза - http://vadtools.sourceforge.net/
    но общие принципы можно глянуть.
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Адресс peb находится в пользовательской памяти тоесть нужно делать KeAttachProcess, все хорошо но!
    При попытки прочитать из LDR_DATA_TABLE_ENTRY FullDllName происходит ошибка доступа(windbg тоже не может показать строку), хотя обращение ко всем остальным параметрам LDR_DATA_TABLE_ENTRY и они имеют правильное значение.
    А PEPROCESS меняется в разных версиях.
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Вероятно, ты что-то делаешь не так. Например, ты уверен, что не пытаешься прочитать голову списка? Головной элемент не содержит никаких полезных данных, перечисление необходимо начинать с pleListHead -> Flink. Ну и код можешь показать, вдруг что присоветуем.

    Адрес PEB легко извлекается через PsGetProcessPeb().
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    Вначале нужно определить условия при которых модуль можно считать загруженным. Тоесть для загрузчика например если нет записи, то нет и модуля, хотя проекция может быть.
     
  8. Craz

    Craz New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2010
    Сообщения:
    7
    Похоже XshStasX тоже делает ядерный загрузчик PE образов, так что способ с PEB вполне подходит. Если модуль промаплен вручную то можно использовать ntreadvirtualmemory + PE парсер для определения валидного PE образа.
     
  9. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Ещё есть NtQueryVirtualMemory() с классом MemoryBasicInformation, на выходе будет MEMORY_BASIC_INFORMATION, поле Type проверить на MEM_IMAGE. Это в случае честно загруженного модуля будет работать. В случае отображённого образа можно проверять на MEM_MAPPED, тоже будет работать. Ну а во всех остальных случаях - да, только чтение и анализ.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    x64
    Как считаете, возможен ли вызов пользовательского кода напрямую из ядра(при !IRQL). Тоесть например прямо джамп в ntdll!LdrEnumerateLoadedModules() из дрова. И какие с этим могут быть проблемы.
     
  11. Craz

    Craz New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2010
    Сообщения:
    7