Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка kernel mode драйвера из памяти


ter ©   (2007-09-07 12:57:00) 

Возможно ли загрузить драйвер без использования менеджера сервисов?
Т.е. загрузить драйвер из области памяти, поместив его туда заранее.


SLoW.AlfaMoon.Com   (2007-09-10 10:22:00) [1]


> Возможно ли загрузить драйвер без использования менеджера
> сервисов?
> Т.е. загрузить драйвер из области памяти, поместив его туда
> заранее.


Файл нужен. Поскольку ZwCreateSection с флагом SEC_IMAGE на входе требует хэндл файла.


ter   (2007-09-07 13:45:00) [2]

вот неапример код загрузки драйвера без использования менеджера сервисов, хотя он также берет тело драйвера из файла
взято здесь: http://rootkits.ru/library/ShowLib.aspx?id_l=21

//----------------------------------------------------------------
// load a sys file as a driver using undocumented method
//----------------------------------------------------------------
bool load_sysfile()
{
     SYSTEM_LOAD_AND_CALL_IMAGE GregsImage;
     WCHAR daPath[] = L"\\??\\C:\\MIGBOT.SYS";
     //////////////////////////////////////////////////////////////
     // get DLL entry points
     //////////////////////////////////////////////////////////////
     if(!(RtlInitUnicodeString = (RTLINITUNICODESTRING)
                 GetProcAddress( GetModuleHandle("ntdll.dll")
                 ,"RtlInitUnicodeString"
                 )))
     {
           return false;
     }

     if(!(ZwSetSystemInformation = (ZWSETSYSTEMINFORMATION)
                                   GetProcAddress(
                                   GetModuleHandle("ntdll.dll")
                                   ,"ZwSetSystemInformation" )))
     {
           return false;
     }

     RtlInitUnicodeString(&(GregsImage.ModuleName),
                          daPath);
     if(!NT_SUCCESS(
                 ZwSetSystemInformation(SystemLoadAndCallImage,
                                                   &GregsImage,
     sizeof(SYSTEM_LOAD_AND_CALL_IMAGE))))
     {
           return false;
     }
     return true;
}


Инс   (2007-09-07 13:44:00) [3]


> Undri   (07.09.07 13:43) [12]

ЧТД.


Undri   (2007-09-07 13:43:00) [4]


> Хотя можно еще поискать исходники этих утилит, и посмотреть,
>  как он это сделал.


Rouse_   (2007-09-07 13:42:00) [5]

В свое время занимался этим вопросом, вплоть до консультаций с разработчиками одной из виртуальных машин, но даже они не смогли сказать ничего вразумительного по данному вопросу...
Работать драйвер без образа на жестком диске может. Пример PSSDK от Microolap, но даже их варинат драйвера перед загрузкой скидывается из ресурсов на диск и после загрузки удаляется...


Игорь Шевченко   (2007-09-07 13:41:00) [6]


> Возможно ли загрузить драйвер без использования менеджера
> сервисов?


До сих пор было невозможно.

http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/Executable%20Images/NtLoadDriver.html


Undri   (2007-09-07 13:41:00) [7]

Сбрасывает на диск из ресурсов -> загружает SCM'ом -> удаляет с диска


Инс   (2007-09-07 13:39:00) [8]


> можно обойтись и без менеджера сервисов

Тогда повторю вопрос [1]


clickmaker   (2007-09-07 13:39:00) [9]


> сохранять тело драйвера на диск не желательно

почему?


ter   (2007-09-07 13:36:00) [10]

можно обойтись и без менеджера сервисов, есть правда небольшие ограничения


Инс   (2007-09-07 13:33:00) [11]


> сохранять тело драйвера на диск не желательно

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


ter   (2007-09-07 13:30:00) [12]

сохранять тело драйвера на диск не желательно


Инс   (2007-09-07 13:29:00) [13]

Насколько мне известно, утилиты Руссиновича  (у них тоже драйвер в ресурсах) прозрачно для пользователя сбрасывают драйвер на диск и загружают. Теоретически конечно можно написать свой загрузчик из памяти, но ИМХО лучше первое. Хотя можно еще поискать исходники этих утилит, и посмотреть, как он это сделал.


ter   (2007-09-07 13:18:00) [14]

тело драйвера находится в ресурсе, необходимо его распаковать в память и загрузить.


Инс   (2007-09-07 13:15:00) [15]

А зачем прятать драйвер?


Наверх

Титульная страница Поиск, карта сайта Написать письмо