Глобальные хуки системных api на основе драйвера ядра

Тема в разделе "WASM.WIN32", создана пользователем AVC, 9 янв 2010.

  1. AVC

    AVC New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    4
    Нужно перехватить CreateFile и CreateProcess во всех процессах в системе. Проблема в том, что на машинах установлено специализированное защитное ПО, блокирующее все попытки сделать это на уровне пользователя: блокируются CreateRemoteThread и WriteProcessMemory.

    Хочу написать драйвер уровня ядра, который будет загружаться при старте операционной системы и перехватывать NtCreateSection для выявления запуска процессов. При обнаружении запуска процесса, драйвер должен будет загрузить в него мою dll, и пропатчить образ kernel32.dll в памяти процесса, внедрив в начало CreateFile и CreateProcess переходы на код внутри моей dll.

    Вопрос в том, реализуемо ли это? Не будет ли проблем со страничной переадресацией при доступом из драйвера ядра к памяти пользовательского процесса?

    Самое интересное, антивирусам это специализированное защитное ПО не мешает. Как задача глобального хука api обычно решается в антивирусах?
     
  2. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    Что именно?
     
  3. AVC

    AVC New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    4
    Разработка одной небольшой конторы, очень специфическая штука. Но антивирусам она не мешает.
     
  4. Wizard109

    Wizard109 New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2006
    Сообщения:
    346
    Если разработка небольшой конторы не мешает устанавливать перехваты regular антивирусам, то в чем дело-то ? Видать не очень-то и специфическая штука...

    Пробуем - BSODим - жалуемся (предоставляя analyze -v :) )
     
  5. Wizard109

    Wizard109 New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2006
    Сообщения:
    346
    З.Ы. А если еще и предоставите эту штуку (хотя-бы драйвер) то найдутся, я думаю те, кто скажет Большое Спасибо :)
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    С чем чем?
     
  7. Clerk

    Clerk Забанен

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

    AVC New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    4
    Как расшифровывается IDP?
     
  9. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    что-то не пойму почему не перехватывать IoCreateFile и ZwCreateProcess в ядре если уж пишеш драйвер
     
  10. AVC

    AVC New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    4
    Нужна сложная обработка и тащить ее на уровень ядра очень не хочется. Или есть способ временно передать управление из перехватчика в ядре на уровень пользователя в тот же поток?
     
  11. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    TC, гриш обо всем, но ни очем =\
     
  12. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    пробуй анхук ssdt, после инжектся из юзермоде
     
  13. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Ну-ну. Лезем в ring0, чистим ssdt, возвращаемся в ring3 и хучим в всех процессах нужные функции, путем внедрения dll. Ну не ересь ли?

    TC: Если по условию задачи допустимо использование драйвера, то почему бы не перехватить нужные тебе функции прямо в ядре? Ты говоришь, что логика сложна и закладывать ее в драйвер "опасно". Ну что же, есть море способов из драйвера передать управление/дать команду на выполнение коду в ring3.

    В тот же поток тебе не нужно, ибо код драйвера будет исполняться не в контексте твоего приложения. Ты можешь использовать events для того, чтоб уведомить свой юзермодный код о том, что пора поработать. Читай статьи Four-F.