Список драйверов под Win 9x

Тема в разделе "WASM.WIN32", создана пользователем pateykin, 10 май 2006.

  1. pateykin

    pateykin New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    10
    Адрес:
    Kiev
    Здравствуйте, Господа!



    Как можно получить список загруженных драйверов под Win9x?



    Заранее спасибо за ответы.
     
  2. wanasm

    wanasm New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    52
    можно найти первый ddb и пройтись по цепочке до конца.в какждой такой структуре есть указатель на след.
     
  3. pateykin

    pateykin New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    10
    Адрес:
    Kiev
    можно найти первый ddb и пройтись по цепочке до конца.в какждой такой структуре есть указатель на след.



    Здравствуйте!



    Что есть ddb? Как его найти? Обязательное условие - пользовательский режим, никаких драйверов ядра.
     
  4. wanasm

    wanasm New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    52
    ты сам представляеш как это можно сделать? помоему на ring3 нет у винды сервисов для получения сабжа.

    темболее у винды9х нет засчиты памяти. можно сканить с использованием seh'а. ddb - это просто сруктура описывающая загруженный VxD. она есть и у vmm и т.д.

    формат:

    _DDB struct

    _DB_Next dd ?; 00h

    _DDB_SDK_Version dw ?; 04h

    _DB_Req_Device_Number dw ?; 06h

    _DDB_Dev_Major_Version db ?; 08h

    _DDB_Dev_Minor_Version db ?; 09h

    _DDB_Flags dw ?; 0Ah

    _DDB_Name db " "; 0Ch

    _DB_Init_Order dd ?; 14h

    _DDB_Control_Proc dd ?; 18h

    _DDB_V86_API_Proc dd ?; 1Ch

    _DDB_PM_API_Proc dd ?; 20h

    _DB_V86_API_CSIP dd ?; 24h

    _DDB_PM_API_CSIP dd ?; 28h

    _DDB_Reference_Data dd ?; 2ch

    _DB_VxD_Service_Table_Ptr dd ?; 30h

    _DDB_VxD_Service_Table_Size dd ?; 34h

    _DDB_Win32_Service_Table dd ?; 38h

    _DDB_Prev db 'Prev'; 3Ch

    _DDB_Size dd ?; 40

    _DDB_Reserved1 db 'Rsv1'; 44h

    _DDB_Reserved2 db 'Rsv2'; 48h

    _DDB_Reserved3 db 'Rsv3'; 5Ch

    ends

    сигнатура Rsv1 ну да по стуктуре видно. искать с аддреса 0C0001000H до 0C0200000H.вот так я делал под нулем:

    mov eax, 0C0001000H

    _0:

    inc eax

    cmp eax, 0C0200000h

    je exit_r0

    cmp 4 ptr [eax], 'Rsv1'

    jne _0

    lea eax, 4 ptr [eax - 44h]

    _1:

    под ринг 3 поросто добавляеш оброботку ошибок через seh.
     
  5. pateykin

    pateykin New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    10
    Адрес:
    Kiev
    Здравствуйте!



    Спасибо за ответ. Буду пробовать.
     
  6. wanasm

    wanasm New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    52
    чтото типо такого.

    mov ebx, 0C0001000H

    _0:

    call isread

    or eax, eax

    jnz _1

    cmp ebx, 0C0200000h

    je _1

    cmp 4 ptr [ebx], 'Rsv1'

    inc ebx

    jne _0

    lea ebx, 4 ptr [ebx - 44h]

    _1:

    ret

    isread:

    call _seh_init ; install seh

    mov esp, [esp+8]

    xor eax, eax

    inc eax

    jmp _seh_exit

    _seh_init:

    push dword ptr fs:[0]

    mov fs:[0], esp

    mov eax, [ebx]

    xor eax, eax

    _seh_exit:

    pop dword ptr fs:[0]

    pop edx

    ret