Передача строковых данных из драйвера.

Тема в разделе "WASM.WIN32", создана пользователем WaterGhost, 19 июн 2007.

  1. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Напоминаю что я новичок в написании драйверов :)
    Ввожу в курс дела... читал Солдатова, тут в статьях про ввод/вывод DeviceIoControl, по форуму искал. Но так и не нашел конкретный ответ ри помощи чего можно организовать передачу строки из драйвера в юзермодное приложение. Метод передачи должен быть надежным. Т.е. все данные без возможности перехвата и изменения другими приложениями должны поступать в мое приложение для обработки. Ответ драйверу необязателен. =\ Помогите нубу с проблемкой... буду очень благодарен =)
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    DeviceIoControl можно перехватить.
    Лучше в драйвере модифицируй IDT, а при вызове int X в твоём приложении, управление перейдёт к драйверу, ты промаппируешь память на юзермодерное пространство, и вернешь в eax указатель в АП твоего процесса.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    WaterGhost
    Без возможности перехвата - ну если вы новичек это будет трудно вам, но смысл таков:
    Аттачимся драйвером в контекст процесса, заказываем память под Mdl (ExAllocatePool), формируем Mdl (IoAllocateMdl), Делаем блок на адресное пространство процесса (напрмер MmMapLockedPagesSpecifyCache), и копируем туда что хотим напрямую. Потом детач.
    Все.
    Можно и без аттача-детача, но тут еще сложнее и на сколько я понимаю надо самим обработат MmAccessFault и подкачать страницы памяти нужного процесса из файла подкачки в ОП.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    TermoSINteZ
    а откуда приложение адрес маппинга узнает?
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    n0name
    Можно ему это сказать, например как ответ на DeviceIoControl. Если перехватят , то надо догадаться что это пришло .
    Можно память пометить сигнатурой.. В общем есть пути .
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    а чем решение как у меня в посте не подходит?
    из user-mode скорее всего никто не перехватит.
     
  7. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Так, сперва нада выяснить какой способ будет легче))) А то я БСОД'ов не один десяток увижу пока достигну цели =)
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    легче, это просто обработка IRP_MJ_CONTROL.
    буквально строк 30 кода в драйвере.
     
  9. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Ну это же ненадежно =\ Я имел ввиду какие из 2х вышеприведенных способов легче :)
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    дык
    это надо будет делать всегда.
    а вызывать этот код можно через прерывания, либо DeviceIoControl, либо еще какойнибудь неозвученный вариант.
     
  11. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    n0name
    На да вы правы, в принципе одинаково все.

    Но можно и без мапинга - Прямой ввод вывод, между драйвером и приложением, а данные при передачи шифовать - тогда перехватить не удастся - придется разобраться с алгоритмом шифрования и тп.
     
  12. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Ну тут другая проблема возникнет... эти данные необязательно расшифровывать. В них ничего полездного для других, но вот главное чтобы они дошли. Так что можно перехватить и уничтожить пакет... и он не дойдет.
     
  13. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    WaterGhost
    Кароче, смысл такой, никак)) память которую ты выделишь и на которую будет надеяться твоё приложение с драйвером легко можно поставить под бряк и контролировать, единственно что ты можешь сделать, это попытаться запудрить мозги, но, помоему, у тебя это не получится)))
     
  14. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    WaterGhost
    передачу данных между дровом и юзермодом можно организовать тем же тупым образом - бряк на диаппазон адресов из драйвера, к примеру когда юзермодное приложение будет писать\читать память из этого диаппазона, и даже незаметно получится)) по крайней мере новичёк может сразу не догадаться, либо подсовывать фолтную инструкцию, обработчик в idt которого будет держать драйвер. но это будет заметно, можно конечно сделать и незаметно=)), но тут уж сам думай