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

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

  1. XshStasX

    XshStasX New Member

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

    Craz New Member

    Публикаций:
    0
    Собственно тоже интересуюсь.
     
  3. x64

    x64 New Member

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

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

    n0name New Member

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

    XshStasX New Member

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

    x64 New Member

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

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

    Clerk Забанен

    Публикаций:
    0
    n0name
    Вначале нужно определить условия при которых модуль можно считать загруженным. Тоесть для загрузчика например если нет записи, то нет и модуля, хотя проекция может быть.
     
  8. Craz

    Craz New Member

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

    x64 New Member

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

    Clerk Забанен

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

    Craz New Member

    Публикаций:
    0