Заменить ObjectAttributes из-под zwCreateFile

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

  1. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Здраствуйте,
    Подскажите: как из-под драйвера-перехватчика(ntCreateFile) изменить содержимое поля ObjectAttributes?
    Нужно это для подстановки(подмены) файлов если что-то не устраивает перехватчика...
    Т.е. установить новое имя файла, перезатерев старое и все остальное.

    Спасибо.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    В нем есть поле ObjectName с указателем UNICODE_STRING*. Там лежит запрашиваемое имя объекта, в данном случае, файла.
     
  3. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Да, но ведь длина оригинального имени и моего скорее всего не совпадут, плюс может нужно что-то еще "подрихтовать"?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Begemot
    замени сам указатель ObjectName на свою структуру UNICODE_STRING.
     
  5. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    ок, сенькс
     
  6. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Сделал так:

    Код (Text):
    1.         pPath=(wchar_t *)ExAllocatePool(PagedPool, 50);
    2.         if (pPath) {
    3.             RtlZeroMemory(pPath, 50);
    4.             wcscpy(pPath, L"C:\\Security Template.txt");
    5.             RtlInitUnicodeString(&uniFileName, pPath);
    6.             ObjectAttributes->ObjectName=&uniFileName;
    7.             status=TrueNtCreateFile(FileHandle,DesiredAccess,ObjectAttributes,IoStatusBlock,
    8.                                 AllocationSize,FileAttributes,ShareAccess,CreateDisposition,
    9.                                 CreateOptions,EaBuffer,EaLength);
    10.             ExFreePool(pPath);
    11.             return status;
    12.         }
    Но результата нет - файл не найден.
    Меняю только имя файла, остальные параметры - оригинальные.
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    надо имя файла передавать в виде \\??\\C:\\somefile.txt
    как имя в глобальном каталоге имен.
    С учетом моих пожеланий,
    Код (Text):
    1.             wcscpy(pPath, L"\\??\\C:\\Security Template.txt");
     
  8. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Неа, не прокатило.... :/

    Так тоже:
    Код (Text):
    1. RtlInitUnicodeString(&uniFileName, L"\\??\\C:\\Security Template.txt");
    ...
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А ты уверен, что этот файл есть?)
     
  10. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Да, железно
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    hRootObject?
    Вообще лучше переинициализировать ObjectAttributes.
     
  12. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Да, но при этом я потеряю все остальные поля оригинальной структуры

    А это чего такое? Расскажи подробнее, плиз
     
  13. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Может есть другой способ "подсунуть" файл из-под перехватчика?
     
  14. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Интересно, мой код выполняется дважды(вызывающая прога пытается вызвать ntCreateFile дважды, видимо) и в первый раз ntCreateFile с моим подмененным именем возвращает 0, а второй: -(минус)1073741819
    К чему бы это...
     
  15. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Никто в общем-то не мешает скопировать перед изменением, а затем вернуть все обратно ;)

    0xc0000005 - STATUS_ACCESS_VIOLATION - к неверным параметрам обычно
     
  16. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Но тогда и смысла все переинициализировать нет. Ведь получится тоже что уже есть...

    Честно говоря не понимаю какие параметры ему не нравятся...
     
  17. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Стоп, а как быть с RootDirectory? Его ж тоже настраивать надо. Или нет?

    Видимо нет, в оригинале он равен нулю...
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Короче забекапь старую OBJECT_ATTRIBUTES и подсунь свою, другую.
     
  19. Begemot

    Begemot New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    79
    Делаю так:
    Код (Text):
    1.     OBJECT_ATTRIBUTES InterceptedObjectAttributes;
    2.     RtlInitUnicodeString(&uniFileName, L"\\??\\C:\\Security Template.txt");
    3.     InitializeObjectAttributes(&InterceptedObjectAttributes, &uniFileName, ObjectAttributes->Attributes, ObjectAttributes->RootDirectory, ObjectAttributes->SecurityDescriptor);
    4.     status=TrueNtCreateFile(FileHandle,DesiredAccess,&InterceptedObjectAttributes,IoStatusBlock,
    5.                         AllocationSize,FileAttributes,ShareAccess,CreateDisposition,
    6.                         CreateOptions,EaBuffer,EaLength);
    7.     return status;
    Это имеешь ввиду? Результат тот же...
     
  20. wasm_test

    wasm_test wasm test user

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