Доступ к драйверу.

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

  1. WaterGhost

    WaterGhost New Member

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

    wasm_test wasm test user

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

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    сделай аутентификацию запросов в драйвере. пусть драйвер будет видимым, но при этом чтобы он проверял запросы. либо через общую с прогой память сделай проверку "кодов доступа".
     
  4. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    дело в том что я новичек в этом.. не подскажите в какую конкретно сторону копать ?
     
  5. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Моя задача запустить драйвер, скрыть его отовсех... b при завершении программы выгрузить. Я не могу его выгрузить, т.к. он невидим даже для меня... как это сделать ? =\\\
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Сделать его снова видимым =)
    Скрываешь ты удалением его объекта из \Driver ?
     
  7. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Скрываю вот так :
    http://www.everfall.com/paste/id.php?hfiovl43p793
     
  8. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    WaterGhost

    Как вариант. Просто создай поток и прибей его после всех действий по условию.
     
  9. WaterGhost

    WaterGhost New Member

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

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Ну смотри- ты скрыл драйвер из директории обьектов, стало быть для менежера в/в он стан. невидимым,
    стало быть IRP до него не дойдут. А стало быть коммуникации через пайпы, deviceioctl тоже.
    , да так можно, коды как работать с IDT, были когда в кодах Рутковской, но там не рассчитано на неоднопроцессорные машины. Тебе придется перезатачивать эти коды, помнить про некоторые ньюансы. Ну и помнить, что посмотреть, что там в IDT тоже просто.
    А Jupiter очевидно тебе предлагает в обработчике MJ_CREATE, смотреть, что за процесс и откуда вызывает его, если не аутотентичный, то посылать его, тоже вариант.
    EP_X0FF поясняет, что создавай поток из DriverEntry, функцией PsCreateSystemThread и делай что тебе надо там. Только имей ввиду, что ты в контексте процесса system, необх. контекст другого процесса - KeAttachProcess.

    Вообще не стоит использовать недокументированные методы без особой на то надобности:)
     
  11. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    А какой способ, на ваш взгляд, наиболее оптимален?
    Насчет потока: ну создал я поток... но я же устанавливаю перехват в драйвере... я новичек в этом. Я не понимаю что можно при помощи этого потока сделать =/
     
  12. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Ну про оттимальный способ никто ничего не скажет, как так не известно что делает твой драйвер.
    Ну про поток тебе толкуют, что в выдели память, загони туда код и запускай поток
     
  13. genesis

    genesis New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    43
    создать процессом мутекс, передать его драйверу, в драйвере создать поток, и ждать этот мутекс. при завершении процесса, мутекс просигналит (KeWaitForSingleObject вернет STATUS_ABANDONED). Ну и выгрузить драйвер...
     
  14. WaterGhost

    WaterGhost New Member

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

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    ну подскажите как в драйвере самого себя выгрузить ? =\
     
  16. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Другим драйвером и выгрузить. Потом, тем же макаром, его тоже, выгрузить.. Вобщем припастись как следует драйверами выгрузки. :)
     
  17. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    не вижу смысла выгружать драйвер - лучше (проще и стабильнее) оставить его в памяти и не трогать.
    сначала я было подумал, что непонятно написал про аутентификацию запросов в драйвере, но Cock же меня правильно понял!

    принцип таков:
    для того, чтобы драйвер работал только с твоим приложением, он должен как-то твоё приложение узнавать. я и предложил сделать аутентификацию при обращениях к драйверу.
    при вызове драйвера ты сначала передаёшь ему некий "код начала сеанса", после проверки которого драйвер ждёт от тебя указателя (или ты его сам получаешь в драйвере - тут как те проще) на общую память (секцию), в которой вы обмениваетесь "ключами", драйвер проверяет ключ на правильность, при полоэительном рез-те выдаёт тебе код для данной сесси, который ты впоследствии передаёшь драйверу. разработай протокол обмена сообщениями твоей программы с драйвером, почитав доки по аутентификации.
     
  18. WaterGhost

    WaterGhost New Member

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