Инжект сразу во все процессы

Тема в разделе "WASM.WIN32", создана пользователем Smarts, 13 фев 2008.

  1. Smarts

    Smarts New Member

    Публикаций:
    0
    Регистрация:
    10 июн 2007
    Сообщения:
    4
    Мне нужно загрузить DLL сразу во все процессы (кроме совсем недоступных системных), для этого использую глобальный хук, только тут возникает проблема - инжект происходит не сразу и не во все процессы. Пробовал хук на WH_CBT, WH_MOUSE - DLL загружается только когда пользователь активирует окно, а для некоторых процессов - вообще никогда, например explorer.exe и некоторые другие, что очень важно. Если же использовать CreateRemoteThread, то DLL загружается без проблем в данные процессы.

    Почему хуки работают не для всех процессов, и как это исправить не используя загрузку в каждый процесс по отдельности? Мне нужно чтобы DLL загружалась и во вновь запускаемые процессы, поэтому вариант с вызовом CreateRemoteThread для каждого выполняемого процесса отпадает...

    Операционная система - Vista 64bit, может быть что-то не так именно в висте? Если нужена какая-нибудь часть кода хуков - могу выложить.
     
  2. slow_at_work

    slow_at_work New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    64
    Конечно не во все, а ты думал? На процессы, исполняемые на другом десктопе - глобальный хук не распространяется
     
  3. Smarts

    Smarts New Member

    Публикаций:
    0
    Регистрация:
    10 июн 2007
    Сообщения:
    4
    Спасибо, а как тогда поставить хук на все десктопы?
     
  4. slow_at_work

    slow_at_work New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    64
    С Вистой не работал.. Чти MSDN про desktops/window stations
     
  5. LazzY

    LazzY New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2006
    Сообщения:
    123
    Smarts, в случае инжэкта через хук, для висты почитайте про Integrity Level. потому и невовсе грузится. ну и десктопы само собой :)
     
  6. Smarts

    Smarts New Member

    Публикаций:
    0
    Регистрация:
    10 июн 2007
    Сообщения:
    4
    Если я правильно понимаю, различные десктопы используются в случае нескольких залогиненных юзеров. Если же есть только один юзер, то мой процесс с хуками должен запуститься на десктопе с остальными процессами, которые видны в его диспетчере задач? Почему тогда инжект происходит всего в несколько процессов?

    Какой метод используют антивирусы и прочие защитные программы в своей user-mode части для поддержки длл загруженной во все процессы вне зависимости от десктопов и прочих факторов?
     
  7. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    а открыть процесс, записать шеллкод, загрузить DLL уже не модно ?
     
  8. slow_at_work

    slow_at_work New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    64
    Smarts
    сервисы например на отдельном десктопе запускаются.

    неа, там различные window stations

    и +1 к предложению WIN32
     
  9. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Недавно видел прикольный способ инжекта во все процессы:
    1. При запуске - енумерация всех процессов + CreateRemoteThread.
    2. Внутри процесса хукаем CreateRemoteThread
    3. CreateRemoteThread вызывается при создании дочернего процесса (CreateProcess), в хуке CreateRemoteThread аллокируем память в новом процессе и передаем туда управление.

    Таким образом будут "заражены" все существующие процессы + все новые.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    хукай создание новых процессов, не понял в чем проблема.
     
  11. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    katrus
    Ничего необычного.
     
  12. Smarts

    Smarts New Member

    Публикаций:
    0
    Регистрация:
    10 июн 2007
    Сообщения:
    4
    WIN32
    Можно так пройтись по всем процессам, но мне нужно чтобы DLL загружалась и в новые процессы, иначе достаточно выгрузить инжектнутый процесс и загрузить снова - DLL в нем уже не будет.

    katrus
    Спасибо за совет, может быть так и сделаю.

    Кстати, какой метод обычно используют антивирусы и различный защитный софт для поддержки своего user-mode компонента во всех процессах? Например, Outpost Firewall имеет драйверные хуки и DLL, у Касперского вроде также.
     
  13. LazzY

    LazzY New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2006
    Сообщения:
    123
    outpost пишет длл в AppInit
    у касперского дров подгржает длл, если не ошибаюсь
     
  14. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    ...а есть еще HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs :)
    примитивный до безобразия способ... любая прописанная тут длл автоматом загружается во все запускаемые процессы. Или почти во все.
     
  15. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    FatMoon
    разумеется в те процессы, которые используют user32.dll
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Пропатчить подсистему - удобно.
    CreateRemoteThread() ведь можно словить.
     
  17. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    Smarts
    Извини конечно, но ты определись что ты хочешь, в начале ты написал Мне нужно загрузить DLL сразу во все процессы (кроме совсем недоступных системных), для этого использую глобальный хук, только тут возникает проблема - инжект происходит не сразу и не во все процессы..
    делай так как я сказал, в своей DLL будеш хукать создание новых процессов и в недряй туда свою DLL.
     
  18. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Если тебе нужно инжектить свою dll во все процессы в т.ч. при загрузке, можно сделать так: откл. WFP, пропатчить секцию импорта например kernel32.dll вписав туда DllMain из своей dll и все. Патчер можно прописать в своей dll или в отдельной проге. Метод палевный, т.к. его сразу обнаружит даже то же Outpost но о скрытности и своей конкретной цели ты не писал. Если хуками, то хукай shell при загрузке:
    SetWindowsHookEx(WH_GETMESSAGE,HookProc,(HINSTANCE)hm,GetWindowThreadProcessId(GetShellWindow(),NULL));
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    CreateThread(Process)->csrss->ZwReplyWaitReceivePort()
     
  20. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Инжекти APC на старте первого потока из драйвера