Перехват ZwCreateFile в ядре

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

  1. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Перехватываю ZwCreateFile в ядре. У это функции есть парметр ObjectAttributes, где хранится путь к файлу с которым мы работаем(кажется путь хранится здесь: ObjectAttributes->ObjectName->Buffer).
    Не подскажете как можно определить вхождение в переданный путь подстроки "qwerty.dll". Мне необходимо запретить доступ к тому файлу. Если можно, с примерами пожалуйста. Всех благодарю за внимание.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А функции для работы со строками из CRT уже совсем не канают? wcsstr
     
  3. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Спасибо огромное ! Не думал что все будет так просто. И еще... эта функция ищет с учетом РЕГИСТРА или нет ?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    С учётом
     
  5. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Ане подскажете как искать без учета регистра ? =\
     
  6. Guest

    Guest Guest

    Публикаций:
    0
    wcscpy(buf, str1);
    wcscpy(buf2, str2);
    wcsupr(buf);
    wcsupr(buf2);
    wcsstr(buf, buf2);
     
  7. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    довай аню, поцкажем и покажем :)
     
  8. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Че за АНЮ ? =\
     
  9. PROFi

    PROFi New Member

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

    Если файл на NTFS - просто запрети к нему доступ. Если хочешь и админу. то тут есть одна хитрость - удаляешь в настройках политики безопасности возможность овладения чужими объектами для админа, создаешь нового пользователя (можно сделать так чтобы его не было видно призагрузке) и передаешь все права на пользование файлом ему т.е. типа cacls.exe qwerty.dll /P NewUser:F
     
  10. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    Код старый, может чем поможет.
    rtl_headers.h
    Код (Text):
    1. #include "rtl_headers.h"
    2. NTSTATUS NewZwCreateFile(OUT PHANDLE  FileHandle,IN ACCESS_MASK  DesiredAccess,IN POBJECT_ATTRIBUTES  ObjectAttributes,OUT PIO_STATUS_BLOCK  IoStatusBlock,IN PLARGE_INTEGER  AllocationSize  OPTIONAL,IN ULONG  FileAttributes,IN ULONG  ShareAccess,IN ULONG  CreateDisposition,IN ULONG  CreateOptions,IN PVOID  EaBuffer  OPTIONAL,IN ULONG  EaLength)
    3. {
    4.     NTSTATUS                                rc;
    5.     BOOLEAN         bStat;
    6.     PWCHAR          wStr;
    7.     rc = OldZwCreateFile(FileHandle,DesiredAccess,ObjectAttributes,IoStatusBlock,AllocationSize,FileAttributes,ShareAccess,CreateDisposition,CreateOptions,EaBuffer,EaLength);
    8.     if (ObjectAttributes->ObjectName->Length > 0 && MmIsAddressValid((PVOID)ObjectAttributes->ObjectName->Buffer))
    9.     {
    10.         wStr = RtlParseWstr(ObjectAttributes->ObjectName->Buffer,(wchar_t)'\\');
    11.         wStr = RtlUpcaseWideStr(wStr,wStrLen(wStr));
    12.         if (wStr)
    13.         {
    14.             DbgPrint("NewZwCreateFile Hook :%ws|%d",RtlUpcaseWideStr(wStr,wStrLen(wStr)),wStrLen(wStr));
    15.         }
    16.     }
    17.     return rc; 
    18. }
     
  11. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Спасибо)