dll, автоматически загружающиеся во все процессы

Тема в разделе "WASM.WIN32", создана пользователем Nouzui, 6 мар 2007.

  1. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    например, ntdll и kernel32
    а также, как выяснилось, user32, gdi32, advapi32 и rpcrt4
    вопрос: где они прописаны и кто их загружает?
     
  2. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    user32 грузится ведь далеко не во все процессы, в консольных прогаъх его нету.
    также не уверен насчёт rpcrt4...
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    создай простенькую программульку с бесконечным циклом без вызова апей, собери с subsystem console, проверь, что реально console и что в импорте ничего нет, и запусти
    потом посмотри либы, которые к ней подгрузились
     
  4. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    ntdll загружается во время создания процесса, kernel32 загружает сервер подсистемы win32, когда ему приходит опевещение о создании нового процесса (может немного ошибаюсь)))
    если поле subsystem PE-заголовка равно 0x0001 (native) то в адресном пространстве в обязательном порядке может присутствовать только ntdll

    ну а все остальные библиотеки грузятся в случае если наша прога ипортирует что-либо из них
     
  5. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Nouzui
    Так. Способа есть 4. По крайней мере я знаю 4 способа.

    Способ 1. Реестр. Это же ответ на твой вопрос.

    От комманды uinc вышла в свет прекрасная утилка autoruns.exe
    Скачать можешь на ихнем сайте.
    Это я к тому, что есть несколько веток реестра, занеся в которые путь к своей либе, ты обеспечишь ее загрузку во все процессы.
    Какие это ветки - выбирай сам. Скачиваешь эту утилку и смотришь, куда тебе лучше вклиниться.

    Способ 2. Ручной
    Тут не все так просто, как с первым способом, и еще нужно беспокоиться о новых процессах. И так суть, ты просто пишешь небольшую
    процедурку GetPIDbyName(lpImageName); а далее открываешь процесс, выделяешь в нем память, создаешь удаленный поток, который подгружает либу.
    Нужные тебе АПИ - это VirtualAllocEx, WriteProcessMemory, CreateRemoteThread, LoadLibraryExA, ExitThread. Хотя можно обойтись и первыми 4мя.

    Способ 3. Хуки
    Инжект идет далеко не во все процессы, а только в те, которые запустились после установки хуков.

    Способ 4. Патчинг, сплайсинг, перехват через сдт
    Все вирмейкерские методики. Но в данном случае, если ты уже на таком уровне, смысла подгружать длл особого я не вижу
     
  6. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    nitrotoluol
    да нет, ты не понял
    user32, gdi32, advapi32 и rpcrt4 и так всегда грузятся во все процессы с subsystem console и gui, даже если в импорте вообще ничего нет
    я просто пытаюсь понять, почему
     
  7. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Nouzui
    Я же тебе объясняю...
    В некоторых ветках реестра прописанны либы, которые всегда грузятся, независимо от того, есть они в импорте или нет.
    Очень часто, подгрузка либы - это реакция на событие, как например winlogon/notify.
    Списки событий заложенны в ядре, а вот длл, которы нужно грузить - прописываются в реестре.
    Загрузка консоли - это уже событие, которое соответственно обрабатывается...
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    короче, загадка природы
    kernel32 и правда подгружается csrss'ом?
     
  9. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Такого не может быть.

    Что за утилита? Знаю такую же от Марка Руссиновича, а вот от uinc без понятия.
     
  10. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    W4FhLF
    Эээ... а я не знаю..может и Руссинович... Но я скачал в UINC/Project. Поэтому считал, что ихняя...
     
  11. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    Ничего подобного. При создании любого процесса на его адресное пространство загрузчиком проецируется ntdll.dll, причем, она всегда проецируется первой, независимо от таблицы импорта. А если стоит подсистема native, то в этом процессе кроме ntdll.dll ничего не должно использоваться (по идее). А всякая лажа грузиться в твой процесс по всей видимости из-за различных rtl и прочих сочетаний фигни из трех букв.
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    W4FhLF
    nitrotoluol
    Руссиновича-Руссиновича

    говорю же, подсистемы character и gui, для них еще подгружается kernel32. Скорее всео, это делает csrss

    импорт пустой!

    короче, не грузитесь. Я уже выяснил, что кроме моего компа это больше нигде не воспроизводится. Если когда-нить пойму, почему, напишу...