Перехват исходящего звонка модема Win NT/XP

Тема в разделе "WASM.WIN32", создана пользователем ksu_ant, 28 сен 2005.

  1. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Здравствуйте!

    Не могли бы Вы подсказать мне методы отслеживания попыток набора номера модемом с возможностью запрета нежелательных звонков?

    Для этого я вижу 2 пути:

    1 - перехват ZwCreateFile/ZwOpenFile для COM модема;

    2 - написание драйвера модема (фильтра команд), выполняющего данные действия.

    В статьях Ms-rem'a хорошо описан механизм перехвата Native API, но конкретного примера ZwCreateFile/ZwOpenFile там, к сожалению, нет. Также, ограничениями являются следующие моменты: реализация в виде DLL, - не позволит (на сколько я знаю, может быть, я ошибаюсь) перехватывать модемное соединение, инициированное Ring0 драйвером, вызывающим Native функции напрямую из ntdll.dll; если модем имеет интерфейс USB, возникает проблема контроля доступа к данному порту.



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

    Заранее благодарен за помощь и внимание.
     
  2. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    А если отслеживать RAS- функции?

    Например, RasDial.
     
  3. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    нук на RasDialW
     
  4. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Здесь нужна гарантия перехвата ЛЮБОЙ попытки набора номера, а при перехвате RAS невозможно отследить код, использующий CreateFile/WriteFile т.д.
     
  5. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    ЛЮБОЙ - никак не получится, можно, например, из ring0 минуя винду общаться с СОМ-ом (по крайней мере, я думаю, что можно)
     
  6. DESTROY_ru

    DESTROY_ru New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    17
    драйвером, вызывающим Native функции напрямую из ntdll.dll

    Драйвер не имеет доступа к пользовательскому адресному пространству. Следовательно он не может вызывать какие либо функции из ntdll.dll,которая находится в пользовательском адресном пространстве.Драйвер вызывает функции из ntoskrnl.exe



    перехватывать модемное соединение, инициированное Ring0 драйверомЭто как? Мне кажется инициатором всегда является пользовательское приложение, а драйвер является механизмом реализации запроса в системе...
     
  7. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    DESTROY_ru

    Говори, говори да не заговаривайса. Вызов из ядра функций ntdll.dll вполне реален см. Небета "Справочник по базовым функциям WinNT\2000"
     
  8. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    DelExe

    Во-первых: вызывать функции ntdll из ядра можно, но не все, а только те, которые являются переходниками к соответствующим функциям ntoskrnl.exe

    Во-вторых: вызывать их можно только если ты напишешь свой аналог GetProcAddress и получишь адрес функции динамически. При статической линковке система просто откажется грузить твой драйвер.

    В-третьих: ntoskrnl.exe экспортирует функции с именами аналогичными ntdll (не все), и функции ntdll являются переходниками (через интерфейс системных вызовов) к функциям ntoskrnl. Те функции которые не экспортируются ntoskrnl, можно вызывать получив их адрес из sdt.

    В-четвертых: если ты все-таки извернешся и вызовешь функцию из ntdll, то необходимо передать ей параметры в юзермодном диапазоне адресов, так как в KiSystemService есть соответствующая проверка. Иначе функция завершиться с ошибкой.



    DESTROY_ru прав, изучай устройство системы, и тогда и к тебе придет понимание ее рабты.



    DESTROY_ru

    ntdll.dll - единственная dll, которая отображена на все адресные пространства (в том числе и процесса system), так что вызывать ее функции из ядра можно, но для этого еще через ж..у извратиться надо.