Перехват копирования файлов

Тема в разделе "WASM.WIN32", создана пользователем Victor, 23 апр 2007.

  1. Victor

    Victor New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    3
    Добрый день. Перекопал весь сайт wasm.ru и написал длл-ку на C++, запрещающую доступ к сменным носителям, методом перехвата вызовов API CreateFileA и CreateFileW. Создание и открытие файлов перехватывается и запрещается, а копирование проходит.
    Программа API-монитор при копировании файлов тоже не перехватывает CreateFile в режиме записи.
    Куда дальше двигаться? Может кто-то сталкивался с такой проблемой?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    CopyFile?
     
  3. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Логичнее перехватывать ZwCreateFile. А то кроме CreateFile + WriteFile есть еще туева куча вариантов копирования файла.
     
  4. Victor

    Victor New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    3
    Пасибо за совет. Перехватил, то только не ZwCreateFile, а NtCreateFile. Для определение имени файла по хэндлу использую функцию GetMappedFileName (в MSDN есть пример.)
    Проблема состоит в том, что таким способом можно определить имя только существующего файла. При копировании когда я перехватываю вызов ZwCreateFile на получателе файла еще не существует. Таким образом имя я определить не могу и запретить копирование тоже.
    Может быть есть еще какой-нибудь способ определить имя?
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    хмм, ZwCreateFile вызывается же два раза по идее при копировании - при открытии файла источника и файла назначения. Вот и пали имена из OBJECT_ATTRIBUTES->ObjectName.Buffer
    Правда, для чтения источника может применяться и ZwOpenFile, учти и этот старомодный вариант тоже
     
  6. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Great
    а разве zwopenfile не через zwcreatefile реализована??
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    slow
    хз, не смотрел) вполне возможно. тогда вообще только ZwCreateFile хучить и все

    ЗЫ. Ща гляну ядро =)
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Глянул. И ZwCreateFile и ZwOpenFile вызывают IoCreateFile. Вот пусть топикстартер и шурует хукать именно её )
     
  9. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    точно, как же я забыл то :dntknw:
     
  10. Victor

    Victor New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    3
    Спасибо всем. Заработало. Перехватываю NtCreateFile. Просто не внимательно смотрел на параметры, оказалось что там есть имя файла.
    Правд остался еще один ворос - как быть с удалением файлов с диска? Пытаюсь перехватить NtDeleteFile тем-же способом, а он не перехватывается, мой перехватчик не вызывается. Как быть?
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Для удаления вызывается ZwSetInformationFile
     
  12. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Victor
    загрузив драйвер ловко считываем твой файл.