Загрузка драйвера из ядра

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

  1. gevara

    gevara максим

    Публикаций:
    0
    Регистрация:
    10 ноя 2006
    Сообщения:
    112
    Адрес:
    г. Пермь
    Можно ли из ядра загрузить драйвер (то есть один драйвер загружает другой)? Какие есть способы кроме ZwLoadDriver (не хочу создавать ключ реестра).
     
  2. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    попробуй ZwSetSystemInformation
     
  3. gevara

    gevara максим

    Публикаций:
    0
    Регистрация:
    10 ноя 2006
    Сообщения:
    112
    Адрес:
    г. Пермь
    эти флаги?

    SystemLoadImage, // 26 N Y
    SystemUnloadImage, // 27 N Y
    SystemLoadAndCallImage, // 38 N Y
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Угу, zwsetsysteminformation + SystemLoadImage
    Примеры в инете есть, use google
     
  5. gevara

    gevara максим

    Публикаций:
    0
    Регистрация:
    10 ноя 2006
    Сообщения:
    112
    Адрес:
    г. Пермь
    Хорошо. есть ещё вопрос. Как я понимаю, ядро всегда загружается по одному и тому же адресу. Могут ли меняться адреса функций ntoskrnl.exe при различных событиях (обновление системы, установка новых драйверов и т.д.). То есть могу ли я, скажем, один раз (во время инсталяции дрова) определить адреса нужных мне фунекций и намертво прошить их в дров. насколько стоит на это надеяться?
     
  6. n0name

    n0name New Member

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

    gevara максим

    Публикаций:
    0
    Регистрация:
    10 ноя 2006
    Сообщения:
    112
    Адрес:
    г. Пермь
    хм.. Я имею ввиду на конкретном компьютере. Неужели ntdll и kernel32 загружаеются всегда по одинаковым адресам, а ntoskrnl постоянно по разным?

    При загрузке:

    Код (Text):
    1. NTSTATUS __stdcall DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
    2. {
    3.     SYSTEM_LOAD_AND_CALL_IMAGE  ImageInfo = {InitUnicodeString(L"\\??\\c:\\test_driver.sys")};
    4.     NTSTATUS status;
    5.  
    6.     pDriverObject->DriverUnload = DriverUnload;
    7.  
    8.     status = ZwSetSystemInformation(SystemLoadAndCallImage,&ImageInfo,sizeof(SYSTEM_LOAD_AND_CALL_IMAGE));
    9.     DbgPrint("%08X",status);
    10.  
    11. return STATUS_SUCCESS;
    12. }
    вылазит ошибка STATUS_NO_MEMORY = 0xC0000017.
    обычным способом test_driver.sys грузится нормально.
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    не всегда, но и полагатся на это не нужно.
     
  9. wasm_test

    wasm_test wasm test user

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

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    ядро может буть чуток изменено, зависит напрямую от сервиспаков.
     
  11. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    ZwSetSystemInformation нужно использовать с большой осторожностью, только в случае если понимаешь все ее минусы, в свое время убил кучу времени в непонтках, почему падает драйвер на строках по виду на 100 процентов корректных. Для ОФИЦИАЛЬНОГО так сказать софта ее не нужно использовать не вкоем случае. Я ее использовал только для загрузки драйвера, который снимал SSDT хуки, а потом с помощью ZwLoadDriver уже грузил полноценный драйвер.