1. GHOST20.04.2025 в 14:44от
Загрузка...
Загрузка...

Подмена disk serial number на время сессии

Тема в разделе "Софт", создана пользователем lordoleg, 16.04.2025 в 16:22.

Метки:
  1. lordoleg

    lordoleg

    Статус:
    Оффлайн
    Регистрация:
    05.04.17
    Сообщения:
    53
    Репутация:
    25 +/-
    Занялся вопрос об написании драйвера, который смог бы перехватывать
    IOCTL_STORAGE_QUERY_PROPERTY данные о всех дисках и подменять их. Написал драйвер, создал подпись и смог даже запустить его(установить в системе), но, он не видит никаких данных по этому полю и ничего не подменяет. wmi API возвращает старые значения.

    ВАЖНО: изменить не VolumeId, а именно серийник

    Вот кусок кода С++, который занимался обработкой:

    Код:
    NTSTATUS DispatchDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) {
        UNREFERENCED_PARAMETER(DeviceObject);
        PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
    
        // Log IOCTL type
        char logMessage[256];
        RtlStringCchPrintfA(logMessage, sizeof(logMessage), "[DiskSpoof] IOCTL received: 0x%x\n", stack->Parameters.DeviceIoControl.IoControlCode);
        WriteToLog(logMessage);
    
        if (stack->Parameters.DeviceIoControl.IoControlCode == IOCTL_STORAGE_QUERY_PROPERTY) {
            PSTORAGE_PROPERTY_QUERY query = (PSTORAGE_PROPERTY_QUERY)Irp->AssociatedIrp.SystemBuffer;
            if (query && query->PropertyId == StorageDeviceProperty) {
                PSTORAGE_DEVICE_DESCRIPTOR desc = (PSTORAGE_DEVICE_DESCRIPTOR)Irp->AssociatedIrp.SystemBuffer;
                if (desc->SerialNumberOffset != 0 && desc->SerialNumberOffset < Irp->IoStatus.Information) {
                    CHAR* serial = (CHAR*)desc + desc->SerialNumberOffset;
                    RtlCopyMemory(serial, SPOOF_SERIAL, min(strlen(SPOOF_SERIAL), 20));
    
                    // Log the spoofed serial number
                    RtlStringCchPrintfA(logMessage, sizeof(logMessage), "[DiskSpoof] Serial spoofed to: %s\n", SPOOF_SERIAL);
                    WriteToLog(logMessage);
                }
            }
        }
    
        return DispatchPassThrough(DeviceObject, Irp);
    }
    Вопрос: может существует уже созданный софт или же драйвер, который это делает? Подойдет даже сырой код для драйвера, думаю, смогу его собрать для своей системы