Помогите разобраться с драйвером-фильтром

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

  1. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    Доброго дня

    Подскажите пожалуйста, есть драйвер-фильтр клавиатуры (win32), считывает нажатые клавиши и пишит их в файл.
    Есть необходимость различать пользователей, которые в данные момент собственно печатают(имя пользователя, процесс, окно)
    Драйвер должен работать в мультипользовательской среда(терминальный доступ и быстрое переключение пользователей).

    Короче говоря, есть необходимость определить куда будет отправлена нажатая клавиша, какому пользователю, процессу, окну.

    Кто может дать хоть какие нибудь сведенья - откликнитесь.
     
  2. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    перехватывать intы, но это уж совсем низкоуровне...

    Чем не подходит SetWindowsHook из user mode?

    А вообще задачка... Хм. Хм.

    П.С. если хочешь трояна из 0 кольца, придется винду перековырять по int и какому процессу будет отправлена нотификация.

    П.С. П.С. Посмотри в исходниках и инструментах на васме, кажется Four-F что то писал или не он?
     
  3. b000bs

    b000bs New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2009
    Сообщения:
    11
    каким образом
    связано с тем что написал ТС?
     
  4. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    Есть прога такая EliteKeylogger, авторы утверждают что полностью она работает из 0-кольца. Хотим реализовать нечто похожее. юзермодный вариант не подходит - слишком просто)) Щас гляну ваши рекомендации.
     
  5. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    А что писал TC, киньте ссылку плз
     
  6. reversecode

    reversecode Guest

    Публикаций:
    0
    тьфу
    ну сделайте хук по типу SetWindowsHook токо из ядра
     
  7. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    А можно немножко подробней на этом месте)))) если не затруднит конечно))
     
  8. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Куда уже подробнее? NtUserSetWindowsHookEx

    Вообще моё мнение - ваш вопрос вызван глобальным нежеланием что-либо сделать самостоятельно. Содрали код у того же Хоглунда, а как что-то добавить, так облом. Буду рад, если ошибаюсь.

    Текущий процесс - вообще тривиально. PsGetCurrentProcess/PsGetCurrentProcessId
    Активное окно - NtUserGetForegroundWindow. По Hwnd можно получить процесс/поток с помощью NtUserQueryWindow
     
  9. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Это не будет работать.
     
  10. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    Ну знаете ли)) не все сразу профи становятся. Всегда нужно чтоб кто то дал дельный совет и указал направление

    Сейчас направление, в какую сторону копать, примерно найдено..
    Благодарю, если есть еще какие мысли буду рад их принять)))
     
  11. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Это зависит от того, откуда оно вызывается. Конечно, если в процедуре обработки прерывания вызывать - то работать не будет. Точнее, будет, но будет возвращать процесс System.
    В любом случае кода нет. Так что утверждать, что работать не будет, не надо.
     
  12. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Приложения не открывают напрямую \Device\KeyboardClass*, соответственно, в фильтре при чтении данных клавиатуры процесс приложения не виден.
     
  13. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Спасибо, я в курсе.
    Дело в том, что разговор зашёл о глобальных хуках и я усомнился, на самом ли деле это драйвер-фильтр в привычном смысле слова. Типов ядерных кейлоггеров может быть несколько. Я встречал кейлоггеры, перехватывающие функции из теневой таблицы, и вполне справляющиеся с PsGetCurrentProcess. Поэтому и упомянул об NtUserQueryWindow для получения процесса.
    Конечно, если это действительно классический драйвер-фильтр, то не подойдёт. Но кода-то нет. Так что нельзя сказать однозначно, что будет работать, а что нет.
     
  14. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Можно посмотреть в сторону перехвата NtUserTranslateMessage, там будут уже отмапленные сканкоды и хэндл окна.
     
  15. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    Да, драйвер-фильтр действительно классический, цепляется над \Device\KeyboardClass*, и просто на данный момент мне не понятно, можно ли вообще по данной схеме получить данные о месте назначения скэн-кодов.

    Меня))) терзают смутные сомнения, что скэн коды-полученные на данном этапе очень сложно потом пристыковать к их месту назначения....

    Если я не ошибаюсь, то вероятно необходимо отойти от класической схемы фильтра, и делать что то более сложное.

    Выскажите ваше мнения, благодарю
     
  16. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Совершенно верно.

    Думаю, Shadow SDT хук тут самое оно будет. Выше уже подсказали про NtUserTranslateMessage().
     
  17. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    Спасибо всем большое
     
  18. wf_

    wf_ New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2009
    Сообщения:
    40
    помнится я так когда-то делал, из перехваченного обработчика IRP получал текушее окно ( в этот момент мы выполняемся как-раз в нужном контексте ), все работало отличненько, только вместо NtUserQueryWindow там юзался другой метод, но с NtUserQueryWindow наверно даже лучше ). Только ж не из CompletionRoutine :)
     
  19. 0xFox

    0xFox Андрей

    Публикаций:
    0
    Регистрация:
    14 янв 2010
    Сообщения:
    47
    Адрес:
    Белгород
    Уважаемый wf_, а подскажите пожалуйста примерную схему работы после перехвата IRP, только не сильно пинайте)))) дальше сам разберусь.
     
  20. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    x64
    а ее нельзя не как обойти из юзер мода? может есть альтернативный способ получения сообщения? и еще а как добавить сообщение в очередь? можно конечно создать свою фейковую очередь, но не хотелось бы :derisive: