• XSS.stack #1 – первый литературный журнал от юзеров форума

Вылетает синий экран когда устанавливаю функцию выгрузки в драйвере

Решение
Если закомментировать данную функцию то всё ок
DriverObject->DriverUnload = UnloadDriver;
Kdmapper очевидно передаёт мусор вместо DriverObject - этот параметр не юзабелен если маппером грузишь свой драйвер там мусор
Вообщем-то выгрузить его никак нельзя
Перед тем, как вопить "помогите!!!" надо скинуть свой код, что можно было хоть что то понять экспертам.
 
Перед тем, как вопить "помогите!!!" надо скинуть свой код, что можно было хоть что то понять экспертам.
C:
#include <ntifs.h>
VOID UnloadDriver(_In_ struct _DRIVER_OBJECT* DriverObject);
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
NTKERNELAPI VOID NTAPI IoDeleteDriver(PDRIVER_OBJECT DriverObject);





NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
    UNREFERENCED_PARAMETER(RegistryPath);
    
    DriverObject->DriverUnload = UnloadDriver;
    DbgPrintEx(0, 0, "Driver Load");

    

    

    return STATUS_SUCCESS;
}


VOID UnloadDriver(_In_ struct _DRIVER_OBJECT* DriverObject)
{
    UNREFERENCED_PARAMETER(DriverObject);
    DbgPrintEx(0, 0, "Driver Unload");
    DriverObject->DriverUnload = NULL;
    IoDeleteDriver(DriverObject);
    
}
 
Не понимаю, зачем ты используешь IoDeleteDriver, в wdm вообще этого не нашел. И зачем ты зануляешь в DriverObject член DriverUnload, если ты все равно хочешь удалить объект?
 
Не понимаю, зачем ты используешь IoDeleteDriver, в wdm вообще этого не нашел. И зачем ты зануляешь в DriverObject член DriverUnload, если ты все равно хочешь удалить объект?
Занулил на всякий случай а касательно функции она является не задокументированной если ты откроешь WinDbg, Ida.. и посмотришь то ты обязательно её там найдёшь
 
Так ты тогда посмотри особенности самой функции в иде, там скорее всего что то обрабатывается без проверки.
 
Так ты тогда посмотри особенности самой функции в иде, там скорее всего что то обрабатывается без проверки.
Хорошо если тебя так эта функция не устраивает то её можно вырезать но от этого ничего не поменяется синий экран всё равно будет вылетать проблема не в этом
 
Хорошо если тебя так эта функция не устраивает то её можно вырезать но от этого ничего не поменяется синий экран всё равно будет вылетать проблема не в этом

Так ты тогда посмотри особенности самой функции в иде, там скорее всего что то обрабатывается без проверки.
Типо функция принимает один параметр и это указатель на объект что тут может быть не так
 
Процедура выгрузки драйвера, если она предусмотрена, должна называться XxxUnload, где Xxx — префикс, специфичный для драйвера.
DRIVER_UNLOAD callback function
 
Процедура выгрузки драйвера, если она предусмотрена, должна называться XxxUnload, где Xxx — префикс, специфичный для драйвера.
И где найти этот префикс ?
 
Процедура выгрузки драйвера, если она предусмотрена, должна называться XxxUnload, где Xxx — префикс, специфичный для драйвера.
DRIVER_UNLOAD callback function
Что конкретно мне надо изменить чтобы код корректно работал ?
 
Процедура выгрузки драйвера, если она предусмотрена, должна называться XxxUnload, где Xxx — префикс, специфичный для драйвера.
DRIVER_UNLOAD callback function
Префикс не имеет значения я могу назвать функцию выгрузки как хочу
 
ты как драйвер запускаешь? какое имя сервиса указываешь? и не забудь объявить DRIVER_UNLOAD {prefix}Unload;
 
ты как драйвер запускаешь? какое имя сервиса указываешь? и не забудь объявить DRIVER_UNLOAD {prefix}Unload;
Я просто через kdmapper запускаю
 
ты как драйвер запускаешь? какое имя сервиса указываешь? и не забудь объявить DRIVER_UNLOAD {prefix}Unload;
C:
#include <ntifs.h>
//VOID UnloadDriver(_In_ struct _DRIVER_OBJECT* DriverObject);
NTKERNELAPI VOID NTAPI IoDeleteDriver(PDRIVER_OBJECT DriverObject);
DRIVER_UNLOAD UnloadDriver;




NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
    UNREFERENCED_PARAMETER(RegistryPath);
   
    DriverObject->DriverUnload = UnloadDriver;
    DbgPrintEx(0, 0, "Driver Load");
    //IoDeleteDriver(DriverObject);

   


    return STATUS_SUCCESS;
}


VOID UnloadDriver(_In_ PDRIVER_OBJECT DriverObject)
{
    UNREFERENCED_PARAMETER(DriverObject);
    DbgPrintEx(0, 0, "Driver Unload");
    //DriverObject->DriverUnload = NULL;
    //IoDeleteDriver(DriverObject);

}
все равно синий экран
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх